打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Static用法与内存分析
static修饰的成员是类成员:其调用可以用“类名。成员名”“对象名。成员名”这两种方式调用无差别。
非static修饰的成员是实例(对象)成员:其调用必须用“对象名。成员名”调用。
只要你使用上述方法去调用,无论你是在“static调用非static,还是在非static调用static,static调用static,非static调用非static”,都是可以的,而且是最标准的。(注:有得书上写static不能调用非static这句话的前提是同一个类内的直接调用,我本人不建议直接调用非static成员)
关于调用强调
非static调用非static若为同一个类的内部成员也可直接调用不必加对象名,但和加对象名的在内存中是有区别的;

哎又说多了。总之牢记:无论在任何地方只要:static用“类名。成员名”调用,非static用“对象名。成员名”就不会错。语法就这样。

如果非要进一步:static成员属于类,非static成员属于对象(想理解这句话要更进一步)
更进一步,那就到java运行时内存分布了:
java 运行时内存分为堆,栈,方法区(还有寄存器,和本地方法栈,这两个用不到,除非你开发JVM)。一个class文件类加载后就放到了java运行时的内存区里,怎么放的如下:
类刚被加载时所有类的信息都放入方法区(也叫永久区,也就是永远存在的区),方法区里有常量池用来存放 常量 包括String常量,其他的(包括所有的修饰符啦,标示符啦方法代码了等等)也都放在方法区,总之类class被放在方法区。
这也就是说所有的类信息都在方法区,同时方法区会为常量,Static变量开辟额外空间存储其数值(非Static方法内的变量方法区内只存储其代码(方便理解叫代码,其实应该叫字符),其值是存在栈内)。
堆内存储的是对象(书上写的),严格意义上说,堆存储的是每个类非Static变量(类的实例成员属性)的值,和一个指向生成该对象的类的指针(目的指向类Static变量和常量池,这也是为什么static可以“对象名。成员名”调用的原因),一些指向其他对象的指针(对象不能嵌套,多维数组的相关语法来源于此)。因为方法区没有指针指向堆,所以非static成员你不能用类名。成员名调用。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java基础面试题大全 新地图开啦~
第九天
C++重点基础知识
四、C++问答题
java static 详解
静态方法与实例方法的区别
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服