非静态方法引用?
Non-static method reference?
我一直在做的一个有趣的小项目涉及从用户给定的未来日期减去当前日期到 return 它们之间的天数。
public int getDaysBetween(int date2)
{
//Subtract current date from future date (date2), leaving the number of days between them
int getDaysBetween = 0;
Calendar myCalendar = Calendar.getInstance();
myCalendar.get(Calendar.DAY_OF_YEAR);
getDaysBetween = date2-Calendar.DAY_OF_YEAR;
return getDaysBetween;
}
执行此操作的方法是非静态的,因为 date2
int 会发生变化。但是,当我尝试在我的主要 class...
中引用它时
//Figure out a non-static reference
int date2 = Integer.parseInt(JOptionPane.showInputDialog("Enter a day in the year ahead of today"));
message = "Days bewteen: " + Date.getDaysBetween(date2-Calendar.DAY_OF_YEAR);
JOptionPane.showMessageDialog(null, message);
我收到无法从静态上下文引用非静态方法的错误。
我是 Java 的新手,所以对你们大多数人来说这似乎很容易,但我可以使用帮助。
提前致谢!
The method for doing this is non-static, as the date2 int changes.
我认为您误解了 static
修饰符的含义。
你的方法没有使用任何实例字段,也没有理由在子类中覆盖它,所以它应该是一个静态方法。
date2
是一个 参数 ,因此每次调用它都可以传递不同的值。这不取决于您调用该方法的实例。
(顺便说一句,您的方法的目的并不十分清楚 - 您真的对一年中的某一天感兴趣吗?java.time
或 Joda Time 也可能会提供更好的 API。但是,最 重要的是您了解 static
的含义...您可能需要阅读 Java tutorial on class members.)
您的方法似乎打算 return date2
减去当前的 DAY_OF_YEAR
(而不是减去 DAY_OF_YEAR
常量)。如果你做到了 static
那么你就不需要像
这样的实例
public static int getDaysBetween(int date2) {
return date2 - Calendar.getInstance().get(Calendar.DAY_OF_YEAR);
}
假设这是您自己的 Date
class,那么要使其成为非 static
(或 instance
级别),您需要在例如
message = "Days bewteen: " + new Date().getDaysBetween(date2);
但是如果是 static
那么你可以使用
message = "Days bewteen: " + Date.getDaysBetween(date2);
最后,请不要将您的 class 命名为 Date
(JRE 至少包含两个具有该名称的 classes java.sql.Date
和 java.util.Date
).
该方法不是静态的。这意味着您必须有一个 class 的实例才能使用该函数。例如:
Date date = new Date(); // Create an instance of the Date class
date.getDaysBetween(...); // The method call is related to the instance
您正在做的是尝试调用该方法,就好像它是静态的一样。静态方法不需要 class 的实例。相反,它是 class 本身的一个特征。如果你想像这样执行静态方法调用:
Date.getDaysBetween(...);
您需要将方法声明为静态的:
public static int getDaysBetween(int date2)
The method for doing this is non-static, as the date2 int changes.
Static variable is one that is shared between all the instances of the Class.
静态方法是一种无需在 class 上创建和实例即可调用的方法。
不能改变的变量称为常量,用关键字"final"声明。
当您声明您的方法时,您可以通过在方法声明中添加一个 "static" 关键字使其成为静态的,如下所示:
public static int getDaysBetween(int date2){}
否则,您可以使您的方法保持非静态,但在这种情况下,要调用它,您必须创建 class 的实例,然后在该实例上调用方法:
message = "Days bewteen: " + new Date().getDaysBetween(date2);
我一直在做的一个有趣的小项目涉及从用户给定的未来日期减去当前日期到 return 它们之间的天数。
public int getDaysBetween(int date2)
{
//Subtract current date from future date (date2), leaving the number of days between them
int getDaysBetween = 0;
Calendar myCalendar = Calendar.getInstance();
myCalendar.get(Calendar.DAY_OF_YEAR);
getDaysBetween = date2-Calendar.DAY_OF_YEAR;
return getDaysBetween;
}
执行此操作的方法是非静态的,因为 date2
int 会发生变化。但是,当我尝试在我的主要 class...
//Figure out a non-static reference
int date2 = Integer.parseInt(JOptionPane.showInputDialog("Enter a day in the year ahead of today"));
message = "Days bewteen: " + Date.getDaysBetween(date2-Calendar.DAY_OF_YEAR);
JOptionPane.showMessageDialog(null, message);
我收到无法从静态上下文引用非静态方法的错误。
我是 Java 的新手,所以对你们大多数人来说这似乎很容易,但我可以使用帮助。
提前致谢!
The method for doing this is non-static, as the date2 int changes.
我认为您误解了 static
修饰符的含义。
你的方法没有使用任何实例字段,也没有理由在子类中覆盖它,所以它应该是一个静态方法。
date2
是一个 参数 ,因此每次调用它都可以传递不同的值。这不取决于您调用该方法的实例。
(顺便说一句,您的方法的目的并不十分清楚 - 您真的对一年中的某一天感兴趣吗?java.time
或 Joda Time 也可能会提供更好的 API。但是,最 重要的是您了解 static
的含义...您可能需要阅读 Java tutorial on class members.)
您的方法似乎打算 return date2
减去当前的 DAY_OF_YEAR
(而不是减去 DAY_OF_YEAR
常量)。如果你做到了 static
那么你就不需要像
public static int getDaysBetween(int date2) {
return date2 - Calendar.getInstance().get(Calendar.DAY_OF_YEAR);
}
假设这是您自己的 Date
class,那么要使其成为非 static
(或 instance
级别),您需要在例如
message = "Days bewteen: " + new Date().getDaysBetween(date2);
但是如果是 static
那么你可以使用
message = "Days bewteen: " + Date.getDaysBetween(date2);
最后,请不要将您的 class 命名为 Date
(JRE 至少包含两个具有该名称的 classes java.sql.Date
和 java.util.Date
).
该方法不是静态的。这意味着您必须有一个 class 的实例才能使用该函数。例如:
Date date = new Date(); // Create an instance of the Date class
date.getDaysBetween(...); // The method call is related to the instance
您正在做的是尝试调用该方法,就好像它是静态的一样。静态方法不需要 class 的实例。相反,它是 class 本身的一个特征。如果你想像这样执行静态方法调用:
Date.getDaysBetween(...);
您需要将方法声明为静态的:
public static int getDaysBetween(int date2)
The method for doing this is non-static, as the date2 int changes. Static variable is one that is shared between all the instances of the Class.
静态方法是一种无需在 class 上创建和实例即可调用的方法。
不能改变的变量称为常量,用关键字"final"声明。
当您声明您的方法时,您可以通过在方法声明中添加一个 "static" 关键字使其成为静态的,如下所示:
public static int getDaysBetween(int date2){}
否则,您可以使您的方法保持非静态,但在这种情况下,要调用它,您必须创建 class 的实例,然后在该实例上调用方法:
message = "Days bewteen: " + new Date().getDaysBetween(date2);