从头认识java-4.7 构造器初始化(1)

这一章节我们来聊聊构造器的初始化。

(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

 

总结:这一章节主要介绍构造器初始化的顺序。

 

这一章节就到这里,谢谢。

-----------------------------------

目录

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://my.oschina.net/u/2325575/blog/525651

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值