请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

f为null为什么还能有f.finalization?

大概6:48秒左右, 不是应该抛空指针异常之类的吗?

正在回答 回答被采纳积分+3

2回答

翔仔 2019-08-26 11:12:27

同学好,f.finalization 是没问题的,因为静态变量的引用也会挂载到每个类的实例上

1 回复 有任何疑惑可以回复我~
  • 老师好,静态变量引用挂载到每个类的实例理解,是因为静态变量相当于存到类的class对象了,所以每个创建类的实例都携带,可以这么理解么?第二个问题是f只是一个引用,当置于null时照理说就跟finalization对象没关系了,为什么还能调用f.finalization呢?
    回复 有任何疑惑可以回复我~ 2020-05-06 14:07:53
  • 翔仔 回复 莨菽菽 #2
    同学好,因为静态成员是属于类的而非实例对象 , 所以无论用任何实例对象去调用静态成员时 , java编译期会自动替换为类去调用(替你纠正) , 所以无论实例对象(entity)是否为null , 都不影响类访问它的静态成员.
    同学可以反编译一下源码就知道了         60: getstatic     #5                  // Field finalization:Lcom/interview/javabasic/jvm/gc/Finalization;
    回复 有任何疑惑可以回复我~ 2020-05-06 21:32:20
提问者 ZoeC5 2019-08-26 09:53:31

finalization是static的, 看漏了...不过null实例也可以访问类静态成员第一次见,,

1 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信