Java 中一个对象a持有对象b中的静态常量?下面的两种写法有区别么

发表时间:2017-12-21 19:00:02 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《既然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语言指针与二级指针的问题》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题