Fork me on GitHub

静态初始化块与非静态初始化块有什么区别?

  所谓“块”,就是用{}所包含的代码段,它们在逻辑上常常是一个整体。初始化块主要用于对象的初始化操作,在创建对象时调用,可以用于完成初始化属性值、加载其他类等功能。初始化块的执行顺序在构造方法之前,如果构造方法多次重载,此时可以考虑将构造方法中共通的代码提到初始化块中定义。

  非静态初始化块主要用于对象的初始化操作,在每次创建对象时都要调用一次,其执行顺序在构造方法之前。由于非静态成员不能在静态方法中使用,同样也不能在静态初始化块中,因此,静态初始化块主要用于初始化静态变量和静态方法。静态初始化块只调用一次,是在类被第一次加载到内存时,并非要创建对象才执行。

import org.junit.Test;

public class EqualsTest {
    @Test
    public void test(){
        Print test1 = new Print();
        Print test2 = new Print();
    }
}

class Print{
    {
        System.out.println("非静态代码块");
    }
    static{
        System.out.println("静态代码块");
    }
    
}

结果:

  静态初始化块与非静态初始化块有一定的区别,静态的初始化块比非静态初始化块执行要早,而且静态初始化块只执行一次,非静态的初始化块可执行多次。静态初始化块的执行时机需要注意,它在类加载器第一次加载类时调用,不一定非要创建对象,例如使用类名.静态方法名。

posted @ 2018-06-13 13:34  爱跑步的星仔  阅读(3718)  评论(0编辑  收藏  举报