前言 作者:神的孩子都在歌唱
在 Java 中,静态方法(static
方法)和非静态方法之间的区别是程序员在编程时需要特别注意的一个问题。尤其是在静态方法中尝试访问非静态成员时,常常会遇到编译错误。
在讨论静态方法为什么不能访问非静态成员之前,首先要理解一下什么是静态方法,什么是非静态成员。
static
关键字声明的方法。静态方法属于类本身,而不属于类的实例。换句话说,静态方法可以在没有创建对象的情况下调用。静态方法通过类名直接调用,例如 ClassName.methodName()
。静态方法与非静态成员的访问问题,关键在于它们与 对象实例 的关系。
静态方法是属于类的,在类加载的时候就会 分配内存 ,可以通过类名直接访问。而非静态成员属于 实例对象 ,只有在对象实例化之后才存在,需要通过类的实例对象去访问。所以在类的 非静态成员 不存在的时候 静态方法 就已经存在了,此时调用在内存中还不存在的非静态成员,属于非法操作。
虽然静态方法不能直接访问非静态成员,但是我们可以 通过创建对象来访问非静态成员:
/**
* 静态方法
*/
public static void staticMethod() {
ShenChang shenChang = new ShenChang();
System.out.println(shenChang.shenChangVariable);
System.out.println("我是静态方法,可以直接通过类名调用");
}
静态方法和非静态成员之间的主要问题在于,它们 不共享相同的上下文 。具体来说,静态方法没有绑定到任何特定的对象实例,因此它不知道实例变量或实例方法的具体内容。而非静态成员则依赖于特定对象的状态,必须通过 对象引用 来访问。
作者:神的孩子都在歌唱 本人博客:https://blog.csdn.net/weixin_46654114 转载说明:务必注明来源,附带本人博客连接