finalize的作用 | 您所在的位置:网站首页 › finalize调用的时机不确定 › finalize的作用 |
静态方法被null调用,为何不报NullPointerException?
解释: 原因就是,这里调用的方法是类中声明的静态方法,也就是类方法,类方法是属于类的。通常使用类作为调用者来调用类方法,但我们也可以使用对象来调用类方法,其效果与通过类调用完全一样。当使用实例来调用类方法时,实际上依然是委托给该类来访问类成员,因此即使某个实例为null,它也可以访问它所属类的的类成员,而不发生空指针异常。 public class FinalizeTest { public static FinalizeTest finalizeTest; @Override protected void finalize() throws Throwable { System.out.println("finalized"); finalizeTest=this; } public static void main(String[] args) { FinalizeTest f = new FinalizeTest(); System.out.println("first print "+f); f = null; System.gc(); System.out.println("second print "+f); // System.out.println(f.finalizeTest); System.out.println(f.name); }} 结果可能是 也可能是别的 first print FinalizeTest@685f4c2esecond print nullnullfinalized
加入以下代码System.gc();try{Thread.currentThread().sleep(1000);}catch(Exception ex){ ex.printStackTrace();} 结果是 first print FinalizeTest@685f4c2efinalizedsecond print nullFinalizeTest@685f4c2e |
CopyRight 2018-2019 实验室设备网 版权所有 |