我的班级看起来像这样:
public class Month
{
private int numOfMonth;
private int monthNum;
public int monthNum()
{
return monthNum = 1;
}
public void setMonthNum(int monthNum){
switch (monthNum)
{
case 1: System.out.println("January"); break;
case 2: System.out.println("February");break;
case 3: System.out.println("March");break;
case 4: System.out.println("April");break;
case 5: System.out.println("May");break;
case 6: System.out.println("June");break;
case 7: System.out.println("July");break;
case 8: System.out.println("August");break;
case 9: System.out.println("September");break;
case 10: System.out.println("October");break;
case 11: System.out.println("November");break;
case 12: System.out.println("December");break;
}
}
public String getName()
{
return "" + monthNum;
}
}
我的驱动程序如下:
import java.util.Scanner;
public class monthDriver
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("Enter month number: ");
int monthNum = in.nextInt();
System.out.println("Month number " + monthNum + " is the month of " + Month.getName());
}
}
我收到编译时错误:
"monthDriver.java:12: error: non-static method getName() cannot be referenced from a static context
System.out.println("Month number " + monthNum + " is the month of " + Month.getName());1 error"
请记住我是学生,学术诚信对我很重要,为什么我收到这样的错误?另外,有什么建议可以提高我未来的编码效率吗?感谢您的所有时间和精力。 非常赞赏。
答案 0 :(得分:1)
方法1:
你可以通过这样的静态来解决你的问题:
public static String getName()
{
return "" + monthNum;
}
你打电话应该像
System.out.println("Month number " + monthNum + " is the month of " + Month.getName());
方法2:
创建class Month
的对象,然后:
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("Enter month number: ");
int monthNum = in.nextInt();
Month obj=new Month();
System.out.println("Month number " + monthNum + " is the month of " + obj.getName());
}
答案 1 :(得分:1)
对于初学者来说,如果你想要访问一个类的方法(在你的情况下为Month)而没有首先实例化类本身,而是直接使用Month.getName(),那么该方法必须定义为static。
关于何时在课堂上使用静态或非静态方法,你可以在网上找到很多文章来填满图书馆: - )
关于上面代码的另一个小注释。您可能对使用枚举感兴趣而不是使用开关。
答案 2 :(得分:0)
你的代码看起来有点粗糙和混乱。我建议使用:
public static String getMonthNameForNum(int monthNum) {
switch (monthNum) {
case 1:
return "January";
case 2:
return "February";
case 3:
return "March";
case 4:
return "April";
case 5:
return "May";
case 6:
return "June";
case 7:
return "July";
case 8:
return "August";
case 9:
return "September";
case 10:
return "October";
case 11:
return "November";
case 12:
return "December";
default:
return "UNKNOWN";
}
}
然后像:
一样使用它 System.out.println("Month number " + monthNum + " is the month of " + Month.getMonthNameForNum(monthNum));
P.S。当然,这应该只是教育代码,在现实生活中你会使用标准日历等来获取月份名称!
答案 3 :(得分:0)
我不会更正你的程序或改进你的程序,但你需要了解基本概念和你做错了什么。
有时您想要创建类a.k.a对象的所有实例共有的变量。类似地,您还可以定义静态方法
阅读link。我只是在这里粘贴片段。
Java编程语言支持静态方法和静态变量。静态方法在其声明中具有静态修饰符 **应该使用类名调用,而不需要创建类的实例,如
ClassName.methodName(args)
并非所有实例和类变量和方法的组合都是允许的:
实例方法可以直接访问实例变量和实例方法。
实例方法可以直接访问类变量和类方法。
类方法可以直接访问类变量和类方法。
类方法无法直接访问实例变量或实例方法 - 它们必须使用对象引用。此外,类方法不能使用this关键字,因为没有要引用的实例。
在您的情况下,上一条规则适用,因为这是实例方法,因此您无法调用Month.setMonthnum(bla)
public void setMonthNum(int monthNum)