大家都知道静态方法不能调用非静态方法, 如下面的代码:由于main方法有static关键字 所以它是静态方法 当他调用了非静态的cc()方法以后 在编译的时候肯定会出错 我想问一下为什么静态方法调用非静态方法会出错?
class a{
pubic static void main(String[] args){ cc();
} void cc(){
System.out.println("cc");
}}
class a{
pubic static void main(String[] args){ cc();
} void cc(){
System.out.println("cc");
}}
所以静态方法不能调用非静态方法 非静态方法可以调用静态方法
静态方法访问类名.方法名, 非静态的, 实体对象.方法名
你可以想象下在实体还没生成的情况下如何调用?
例如:在用户程序中,堆空间分配动态内存,栈空间分配的相对来说是静态内存;数据段和代码段属于静态内存,堆和栈相对来说都是动态内存;内核中的静态变量和代码属于静态内存,整个用户程序相对来说都是动态内存。
同理:常数值在编译时就确定,变量值要到运行时才确定;局部变量相对于栈基址的偏移,编译时就确定,堆空间变量的相对位置也要运行时才确定;静态变量在用户空间的地址【虚拟地址】编译时就确定,而非静态变量运行时才确定;
所以静态方法不能调用非静态方法,但是非静态方法可以调用静态方法
所以静态方法不能调用非静态方法,但是非静态方法可以调用静态方法
不是依靠对象,而非静态方法是对象的方法。你没有创建对象
就不能用静态方法去调用非静态方法。如果调用了并且没有实例化。就相当于一个存在的东西里面包含不存在的东西。这样是不行的。
既然已经存在,为什么里面有不存在呢,不是矛盾么?
好好的理解一下吧!楼主加油。