打字猴:1.70044125e+09
1700441250
1700441251 我们知道,一个类至少有一个构造函数(如果没有,编译器会无私地为其创建一个无参构造函数),构造函数是在对象生成时调用的,那现在的问题来了:构造函数和构造代码块是什么关系?构造代码块是在什么时候执行的?在回答这个问题之前,我们先来看看编译器是如何处理构造代码块的,看如下代码:
1700441252
1700441253 public class Client{
1700441254
1700441255 {
1700441256
1700441257 //构造代码块
1700441258
1700441259 System.out.println(“执行构造代码块”);
1700441260
1700441261 }
1700441262
1700441263 public Client(){
1700441264
1700441265 System.out.println(“执行无参构造”);
1700441266
1700441267 }
1700441268
1700441269 public Client(String_str){
1700441270
1700441271 System.out.println(“执行有参构造”);
1700441272
1700441273 }
1700441274
1700441275 }
1700441276
1700441277 这是一段非常简单的代码,它包含了构造代码块、无参构造、有参构造,我们知道代码块不具有独立执行的能力,那么编译器是如何处理构造代码块呢?很简单,编译器会把构造代码块插入到每个构造函数的最前端,上面的代码与如下代码等价:
1700441278
1700441279 public class Client{
1700441280
1700441281 public Client(){
1700441282
1700441283 System.out.println(“执行构造代码块”);
1700441284
1700441285 System.out.println(“执行无参构造”);
1700441286
1700441287 }
1700441288
1700441289 public Client(String_str){
1700441290
1700441291 System.out.println(“执行构造代码块”);
1700441292
1700441293 System.out.println(“执行有参构造”);
1700441294
1700441295 }
1700441296
1700441297 }
1700441298
1700441299 每个构造函数的最前端都被插入了构造代码块,很显然,在通过new关键字生成一个实例时会先执行构造代码块,然后再执行其他代码,也就是说:构造代码块会在每个构造函数内首先执行(需要注意的是:构造代码块不是在构造函数之前运行的,它依托于构造函数的执行),明白了这一点,我们就可以把构造代码块应用到如下场景中:
[ 上一页 ]  [ :1.70044125e+09 ]  [ 下一页 ]