Java学习笔记之初始化块(代码块)

来源:互联网 发布:概预算软件下载 编辑:程序博客网 时间:2024/05/16 06:58

类的第四个成员:初始化块(代码块)【属性、方法、构造器】

1.代码块如果有修饰的话,那么只能使用static

2.使用static修饰的叫静态代码块,没有使用static的叫非静态代码块。

非静态代码块:

1、可以对类的属性(静态的 & 非静态的)进行初始化操作,同时可以调用本类中声明的方法(静态的 & 非静态的)。

如:

class Order {    private String orderName;    private int orderId;    {        orderName = "desc";        orderId = 1001;    }
2、里面可以有输出语句。

如:

{    orderName = "desc";    orderId = 1001;    System.out.println("我是非静态代码块1.");}

3、一个类中可以有多个非静态代码块,多个代码块之间按照顺序执行。

如:

class Order {    private String orderName;    private int orderId;    {        orderName = "desc";        orderId = 1001;        System.out.println("我是非静态代码块1.");    }    {        System.out.println("我是非静态代码块2.");    }

4、每创建一个对象,非静态代码块就加载一次。

5、非静态代码块的执行要早于构造器!

如:

{    orderName = "desc";    orderId = 1001;    System.out.println("我是非静态代码块1.");}{    System.out.println("我是非静态代码块2.");}public Order() {    System.out.println("我是Order类的空参构造器!");}

或者:

public Order() {    System.out.println("我是Order类的空参构造器!");}{    orderName = "desc";    orderId = 1001;    System.out.println("我是非静态代码块1.");}{    System.out.println("我是非静态代码块2.");}


★★★★★★★★★★★★★注:属性复制操作的顺序:①默认初始化。②显示的初始化或代码块初始化(此处两个结构按照先后顺序执行)。③构造器中初始化。④通过方法对对象的属性初始化。

静态代码块:

1、可以有输出语句。

2、随着类的加载而加载,而且仅加载一次。

3、多个静态代码块按照出现顺序执行。

4、静态代码块的执行要早于非静态代码块的执行,与出现顺序无关。

5、静态代码块中只能调用静态属性或者静态方法。

一个复杂的实例:

class Root {    static {        System.out.println("Root的静态初始化块");    }    {        System.out.println("Root的普通初始化块");    }    public Root() {        System.out.println("Root的无参构造器");    }}class Mid extends Root {    static {        System.out.println("Mid的静态初始化块");    }    {        System.out.println("Mid的普通初始化块");    }    public Mid() {        System.out.println("Mid的无参构造器");    }    public Mid(String msg) {        this();        System.out.println("Mid的带参数构造器,其参数值:" + msg);    }}class Leaf extends Mid {    static {        System.out.println("Leaf的静态初始化块");    }    {        System.out.println("Leaf的普通初始化块");    }    public Leaf() {        super("我爱你!");        System.out.println("执行Leaf的构造器");    }}public class Test {    public static void main(String[] args) {        new Leaf();    }}/* *输出结果: * Root的静态初始化块 * Mid的静态初始化块 * Leaf的静态初始化块 * Root的普通初始化块 * Root的无参构造器 * Mid的普通初始化块 * Mid的无参构造器 * Mid的带参数构造器,其参数值:我爱你! * 执行Leaf的构造器 */





























0 0
原创粉丝点击