java构造块_Java中构造代码块的使用

例子1

public class Client {

{

System.out.println("执行构造代码块1");

}

{

System.out.println("执行构造代码块2");

}

public Client(){

System.out.println("执行无参构造");

}

public Client(int i){

System.out.println("执行有参构造1");

}

public static void main(String[] args) {

new Client();

new Client(5);

}

}

执行构造代码块1

执行构造代码块2

执行无参构造

执行构造代码块1

执行构造代码块2

执行有参构造1

结论:在通过new关键字生成一个实例时会先执行构造代码块(相当于把构造块的代码插入到构造函数的最前端),然后再执行其他代码,也就是说:构造代码块会在每个构造函数内首先执行(需要注意的是:构造代码块不是在构造函数之前运行的,它依托于构造函数的执行),同时构造代码块的执行顺序为语句编写顺序。

例子2

public class Client {

{

System.out.println("执行构造代码块1");

}

{

System.out.println("执行构造代码块2");

}

public Client(){

System.out.println("执行无参构造");

}

public Client(int i){

System.out.println("执行有参构造1");

}

public Client(String str){

this();

System.out.println("执行有参构造2");

}

public static void main(String[] args) {

new Client();

new Client(5);

new Client("hello");

}

}

执行无参构造

执行构造代码块1

执行构造代码块2

执行有参构造1

执行构造代码块1

执行构造代码块2

执行无参构造

执行有参构造2

结论:特殊情况-如果遇到this关键字(也就是构造函数调用自身其他的构造函数时)则不插入构造代码块,对于我们的例子来说,编译器在编译时发现String形参的构造函数调用了无参构造,于是放弃插入构造代码块,所以只执行了一次构造代码块.。

延伸:在构造代码块的处理上,super方法没有任何特殊的地方,编译器只是把构造代码块插入到super方法之后执行而已

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值