java 静态和非静态的一点疑问

jssyxzy 2014-07-24 10:29:30
java非静态方法不能访问静态成员,处于什么考虑?
...全文
195 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 xiaopeipei2004 的回复:
在java语法级别,静态成员不允许声明在类内部,全部抽取到另一位置声明,会不会更清晰一些。
我感觉也应该这样,可能是为了表现成,静态成员属于类的吧,找也方便些。我记得某本书好像解释过这个问题。
七脉 2014-07-25
  • 打赏
  • 举报
回复
静态方法不可以访问非静态属性或者方法,是因为静态方法先于类加载,而非静态的方法只有在对象建立后,被对象调用才会执行;所以静态方法是无法直接读取非静态方法的,只有在静态方法中建立这个对象,然后用这个对象调用非静态方法
yktd26 2014-07-25
  • 打赏
  • 举报
回复
说反了... 不光JAVA,不然逻辑上过不去
结贴是美德 2014-07-25
  • 打赏
  • 举报
回复
能访问啊,楼主问题搞错了都
Yoara 2014-07-25
  • 打赏
  • 举报
回复
可以访问呀。
yinan9 2014-07-25
  • 打赏
  • 举报
回复
在调用静态方法时,不会将对象的引用传递给它,而非静态成员都初始化于各个对象中,而没有对象的引用也就不能访问这些非静态成员。
grapepaul 2014-07-25
  • 打赏
  • 举报
回复
在java语法级别,静态成员不允许声明在类内部,全部抽取到另一位置声明,会不会更清晰一些。
  • 打赏
  • 举报
回复
原理:一般情况下,静态成员是先加载,并且贮存在内存中,静态成员是属于类的,也就是类变量,他是属于类的,不属于实例对象。所以即使是对象消亡了,类变量也不会消亡。当加载完静态成员之后,才会加载实例变量和实例方法。 结论:所以在静态方法中,当加载静态方法的时候,还没有加载实例方法和变量,所以不可能访问的到。 这样做的道理:有一些常用,频繁使用的方法和变量,如果放在实例中的话,每次使用都必须实例化对象,这样的话会消耗很多的 内存,这样对内存的开销是浪费的。如果放在静态方法中的话,只加载一次,因为它属于的是类,而不是实例。这样多次调用的话,也只是调用它一个而已。
dandan8989251 2014-07-25
  • 打赏
  • 举报
回复
我感觉楼主是说反了!我修改了一下 java静态方法不能访问非静态成员,处于什么考虑? 答:静态的东西,不管是成员变量或方法。都是比非静态先加载到方法区。然后非静态的东西再依次加载到堆栈中。非静态的东西在静态加载到方法区的时还不存在,所以静态方法不能访问非静态成员。(PS:你不能访问一个还不存在的东西吧)

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧