这一章节我们来聊聊构造器的初始化。
(1)域的初始化在构造器初始化之前
package com.ray.testobject; public class Test { private int id; public Test() { System.out.println("id:"+id); id = 2; System.out.println("id:"+id); } public static void main(String[] args) { new Test(); } }
输出:
id:0
id:2
从输出的结果可以看见,属性域在构造器之前已经初始化。
(2)初始化的顺序
无论属性域放到哪里,它的初始化都先于构造器的初始化,而且是按照排列的顺序初始化。
package com.ray.testobject; public class Test { private int id; public Test() { System.out.println("id:" + id); System.out.println("name:" + name); System.out.println("book:" + book); id = 2; name = "jack"; book = new Book(); System.out.println("id:" + id); System.out.println("name:" + name); System.out.println("book:" + book); } private String name; private Book book; public static void main(String[] args) { new Test(); } } class Book { public Book() { System.out.println("create book"); } }
输出:
id:0
name:null
book:null
create book
id:2
name:jack
book:com.ray.testobject.Book@c3c749
从上面的代码可以看出,无论属性域是基本类型还是对象,它们的初始化都在构造器初始化之前,而且是按照排列的顺序初始化。
在构造器初始化之前,id初始化为0,name和book是对象,初始化为null。
我们下面再举一个例子:
package com.ray.testobject; public class Test { public static void main(String[] args) { new House(); } } class Window { public Window(int id) { System.out.println("create window:" + id); } } class House { Window w1 = new Window(1); public House() { System.out.println("create house"); w2 = new Window(99); } Window w2 = new Window(2); }
输出:
create window:1
create window:2
create house
create window:99
总结:这一章节主要介绍构造器初始化的顺序。
这一章节就到这里,谢谢。
-----------------------------------
版权声明:本文为博主原创文章,未经博主允许不得转载。