阿里校招之类实例化的顺序

转自:http://my.oschina.net/u/998081/blog/177882


类A的定义

01 package com.sequence.test;
02  
03 public class A {
04      
05 //  静态变量
06     static String name;
07      
08 //  静态自由块
09     static{
10         name = "a";
11         System.out.println("static filed of A inited.");
12     }
13 //  实例变量
14     String type;
15 //  非静态自由块
16     {
17         type = "a.type";
18         System.out.println("no-static filed of A inited.");
19     }
20     String size;
21 //  构造函数
22     public A(){
23         size = "a.size";
24         System.out.println("construct func of A inited.");
25     }
26 }



类B的定义:
01 package com.sequence.test;
02  
03 public class extends A{
04      
05 //  静态自由块
06     static {
07         System.out.println("static filed  of B inited.");
08     }
09 //  非静态自由块
10     {
11         System.out.println("no-static filed of B inited.");
12     }
13     public B(){
14         System.out.println("constuct func of B inited.");
15     }
16 }



测试类InitSequenceTest:
01 package com.sequence.test;
02  
03 public class InitSequenceTest {
04  
05     /**
06      * @param args
07      */
08     public static void main(String[] args) {
09         // TODO Auto-generated method stub
10         new B();
11     }
12  
13 }



输出:

总结如下:

1,静态自由块在class加载的时候执行。只会执行一次。

2,非静态自由块在新建类的实例的时候执行。可以多次执行。在新建其或子类的实例时,就会执行。

当存在多个同一种类型的自由块时,执行的顺序是根据他们在代码块中出现的顺序。

3,当子类继承父类,执行的顺序如下:父类的静态变量和静态域->子类的静态变量和静态域->父类的非静态自由块->父类的构造函数->子类的非静态自由块->子类的构造函数



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值