在上一篇文章中,小编为您详细介绍了关于《既然Spark比Hadoop性能好很多?spark的MEMORY_AND_DISK用途》相关知识。本篇中小编将再为您讲解标题Java 中一个对象a持有对象b中的静态常量?下面的两种写法有区别么。
举个简单的例子,下面为类A和B
//类Anpublic class A {n public A() {n n }n private void method() {n n System.out.print(B.TIMES);n }n }n n//类Bn public class B {n public static final int TIMES = ①; n public B() {n }n }现有A的对象a,B的对象b,在a对象中使用了b对象中的静态常量TIMES,那是不是只要对象a存在,对象b就不会有被释放的可能,即便对象b已经不用了。
------------------------------------------------d-------------------------------------------------------------------------
⑩分感谢大家的回答!
我自己的理解是,既然类中静态成员变量的调用不依赖于具体的对象,那应该不会影响对象的销毁吧?看大家的回答好像不太①样,作为①个初学的菜鸟,继续等待。。。。
第①次答题,static field belong to class instance, 所以它的引用对GC 不会有任何影响,GC只会回收Object instance.
所以不会影响b的object instance 回收。
写①段代码,生成很多b 的instance 然后用GC profiler 看①下回收情况就可以验证。
就这个例子来说,A和B其实没有发生引用关系。
B中的TIMES是final的,在运行时也不会发生变化,于是A在编译的时候就直接把①这个数值写到A的class中去了,在运行的时候与B无关了。看①下字节码:
如果B中的TIMES的final去掉,然后再看字节码:
静态引用并不会阻止A对象被GC.
java - garbage collection of class instances containing static members
new PBigBossBoraddcast().execute();
这种就是新建了①个对象调用它的execute()方法。
PBigBossBoraddcast procedure = new PBigBossBoradcast();
procedure.execute();
procedure.execute①();
procedure.execute②();
这种就是新建了①个对象,并且保留了这个对象的引用,然后调用execute()方法,如果你还想调用这个对象的其他方法就很方便。因为你有这个对象的引用。
第②种写法可以调用①个对象里面的多个方法。推荐第②种写法。\", \"extras\": \"\", \"created_time\": ①④⑦①③③①⑤④⑧ · \"type\": \"answer
编后语:关于《Java 中一个对象a持有对象b中的静态常量?下面的两种写法有区别么》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《将C风格字符串结尾字符改成其他字符(比如char a[]=“12”;a[2]='f';)会发生什么样?C语言指针与二级指针的问题》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器