为什么类的静态方法不能访问类的非静态资源

为什么静态的方法,只能访问静态资源(如静态属性或方法),却不能访问非静态资源?而非静态方法可以访问静态资源?
 -> 首先,非静态方法可以访问静态资源:比如产生了一个类的实例,调用实例的普通非静态方法,方法内部访问另外一个类的一些静态资源,如static final 类型的常量,这个很常用,容易理解。


 -> 其次,为什么静态方法不可以访问非静态资源?我们知道,静态属性和方法,是随着类的加载就已经加载进来了,此时类的实例并没有产生。假设虚拟机加载类A的静态方法f1时,f1内部访问了另外一个类B的非静态资源(如属性b),那么,我们知道,由于类的非静态资源只有类的实例可以访问,只有类产生了实例才能访问到,很好,那么请问此时类B实例化了吗?类B有实例对象出来了吗?而类A却要去访问人家的非静态资源了,这显然就是试图去访问一个不存在的资源,所以,原因已经很明显了。

posted @ 2013-09-24 21:26  jmStatham  阅读(647)  评论(0编辑  收藏  举报