首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >非静态方法不能从静态上下文引用。

非静态方法不能从静态上下文引用。
EN

Stack Overflow用户
提问于 2013-02-21 16:33:14
回答 4查看 2.4K关注 0票数 1

我的班看起来像这样:

代码语言:javascript
运行
复制
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;
    }

}

我的驱动程序如下所示:

代码语言:javascript
运行
复制
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());

}
 }

我得到编译时错误:

代码语言:javascript
运行
复制
"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"

记住我是一名学生,学术诚信对我来说很重要,为什么我会收到这样的错误呢?还有,有什么建议可以提高我的编码效率在未来吗?谢谢你付出的时间和努力。这是非常感谢的

EN

回答 4

Stack Overflow用户

发布于 2013-02-21 16:40:25

方法1:

您可以通过这样的静态处理来解决您的问题:

代码语言:javascript
运行
复制
public static String getName() 
    {
        return "" + monthNum;
    }

你打电话应该是

代码语言:javascript
运行
复制
System.out.println("Month number " + monthNum + " is the month of " + Month.getName());

方法2:

创建class Month对象,然后:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2013-02-21 16:41:02

首先,如果您想要访问类的方法(在您的情况下是月份),而不首先实例化类本身,而是直接使用Month.getName(),那么必须将该方法定义为静态的。

关于何时在类中使用静态或非静态方法,您可以在网上找到这么多的文章来填充库:-)

关于上面的代码的另一个小注释。与使用开关不同,您可能对使用枚举感兴趣。

票数 1
EN

Stack Overflow用户

发布于 2013-02-21 16:45:52

您的代码看起来有点粗糙和混乱。我建议使用:

代码语言:javascript
运行
复制
    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";
    }
}

然后用它就像:

代码语言:javascript
运行
复制
        System.out.println("Month number " + monthNum + " is the month of " + Month.getMonthNameForNum(monthNum));

当然,这应该只是教育代码,在现实生活中,你会使用标准日历等来获取月份名称!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15007456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档