构造器初始化

来源:互联网 发布:淘宝店铺克隆软件 编辑:程序博客网 时间:2024/05/23 13:04

构造器初始化
1.初始化顺序

  1. 即使变量定义分散于方法定义之间,它仍会在任何方法(包括构造器)被调用之前得到初始化。
  2. 变量定义的先后顺序决定了初始化的顺序
    例:
package clear;class Window {    Window(int marker) {        System.out.println("Window(" + marker + ")");    }}class House {    Window w1 = new Window(1);    House() {        System.out.println("House()");        w3 = new Window(33);    }    Window w2 = new Window(2);    void f() {        System.out.println("f()");    }    Window w3 = new Window(3);}public class OrderOfInitialization {    public static void main(String[] args) {        House h = new House();        h.f();    }}

运行结果:

Window(1)Window(2)Window(3)House()Window(33)f()

2.静态数据的初始化
静态初始化动作发生时间:当首次生成这个类的一个对象,或者首次访问属于那个类的静态成员数据时(只会执行一次)
初始化顺序:先静态对象(如果它尚未因前面的对象创建过程而被初始化),而后是“非静态对象”
例:

class Bowl {    Bowl(int marker) {        System.out.println("Bowl(" + marker + ")");    }    void f1(int marker) {        System.out.println("f1(" + marker + ")");    }}class Table {    static Bowl bowl1 = new Bowl(1);    Table() {        System.out.println("Table()");        bowl2.f1(1);    }    void f2(int marker) {        System.out.println("f2(" + marker + ")");    }    static Bowl bowl2 = new Bowl(2);}class Cupboard {    Bowl bowl3 = new Bowl(3);    static Bowl bowl4 = new Bowl(4);    Cupboard() {        System.out.println("Cupboard()");        bowl4.f1(2);    }    void f3(int marker) {        System.out.println("f3(" + marker + ")");    }    static Bowl bowl5 = new Bowl(5);}public class StaticInitialization {    public static void main(String[] args) {        System.out.println("Creating new Cupboard() in main");        new Cupboard();        System.out.println("Creating new Cupboard() in main");        new Cupboard();        table.f2(1);        cupboard.f3(1);    }    static Table table = new Table();    static Cupboard cupboard = new Cupboard();}/* *  * //Output: *  * Bowl(1) *  * Bowl(2) *  * Table() *  * f1(1) *  * Bowl(4) *  * Bowl(5) *  * Bowl(3) *  * Cupboard() *  * f1(2) *  * Creating new Cupboard() in main *  * Bowl(3) *  * Cupboard() *  * f1(2) *  * Creating new Cupboard() in main *  * Bowl(3) *  * Cupboard() *  * f1(2) *  * f1(1) *  * f1(1) */

这里写图片描述

原创粉丝点击