静态方法为什么不能调用非静态方法!
针对这个问题。有如下两点要说:
1>静态方法不能调用非静态方法(变量):
静态方法是把方法由对象层级提升到类层级。这就使得这个方法在类开始加载的时候就在内存中分配了区域,即这个方法在程序run时就开始存在了。
反之,
对象层级的方法也就是<非静态方法>只有在这个方法的对象被调用时才会去内存中分配区域,即这个方法在什么时候使用才什么时候产生、存在。
因此。
静态方法无法调用非静态方法。即等同于已存在的对象调用暂且不存在的对象,这当然是错误的。
2>静态方法调用非静态方法(变量):
通过上面的解释,大家知道,要想达成——有→无这一过程。也就是让非静态方法提前存在,也就是在程序run加载main主方法时,就实例化非静态方法的对象即可。
如下代码所示:
public class Test{
//非静态方法
public void test(){
system.out.println("我是非静态方法");
}
//静态方法
publid static void test1(){
system.out.println("我是静态方法");
}
//main入口
public static void main(String[] args) {
//实例化
Test test = new test();
//调用非静态方法
test.test();
//不需要实例化,类名直接调用
Test.test1();
}
}
静态方法属于类层级。
非静态方法属于对象层级。
以上,也就是为什么静态方法不能调用非静态方法的原因。