2021/9/19-java静态方法与非静态变量

时间:2021-09-19
本文章向大家介绍2021/9/19-java静态方法与非静态变量,主要包括2021/9/19-java静态方法与非静态变量使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

问题来源:

在开学测试一个论文提交系统中频繁出现一个报错提示:Cannot make a static reference to the non-static method mainFrame() from the type paperManagement

为解决这一问题,我找到了以下答案(参考来源:CSDN   原创:弹指江山)

java静态方法中不能引用非静态变量

静态方法和静态变量是属于某一个类,而不属于类的对象。

静态方法可以在没有创建实例时使用,而申明为非静态的成员变量是一个对象属性,所以它只有在对象存在时引用。因此,如果在对象未创建实例时在静态方法中调用了非静态成员方法就是非法的,所以编译器会在这时报出错误。总而言,静态方法可以不用创建对象就调用,非静态方法则必须通过对象的实例来进行调用,因此如果在静态方法中不通过实例就引用非静态方法,引用的是哪个对象的非静态方法就不确定,所以不能执行。只要不是static修饰的方法,必须要通过对象来进行引用。

如:

class test

{

int a=3;                                                    //非静态变量

public static void main(String[] args)       //静态方法

{

System.out.print(a);                                //成员变量不能直接调用,无法调用非静态变量a(a cannot be resolved to a variable)

}

}

因为静态方法的调用不是通过实例对象进行的,所以在静态方法中没有this指针,不能访问所属类的非静态变量和方法,只能访问方法体内的局部变量、自己的参数和静态变量,所以在static的主函数中调用非static的方法就是错的,应把方法放到另一个类,创建对象再调用,因为这个方法不是类的,即不是属于类的,而是属于具体的一个实例对象的。

记:

用static修饰的成员是属于类的,在static的方法里可以用类名直接调用,而不需要static修饰的成员是属于具体实例对象的,需要用对象名调用,且在static的方法里不可以调用。

原文地址:https://www.cnblogs.com/-yi123/p/15312667.html