码迷,mamicode.com
首页 > 编程语言 > 详细

java 子类、父类中静态代码块、字段,非静态代码块、字段以及构造函数的初始化顺序和次数

时间:2016-08-04 13:23:45      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

一个类中的数据初始化顺序是面试官非常喜欢出的面试题之一,本文用一个实例来介绍java中子类、父类中静态代码块、字段,非静态代码块、字段以及构造函数的执行顺序和次数。

一、包结构

技术分享

Cat继承Animal

Runner里包含main函数,程序入口

Sing类主要用来打印执行顺序的序列号

 

二、代码

public class Animal {

        Sing s1=new Sing(1,"animal\tnot static field");
        static Sing s2=new Sing(2,"animal\tstatic field");
        static Sing s3;
        Sing s4;
        Sing s5;
        
        static{
            s3=new Sing(3,"animal\tstatic code area");
        }
        
        {
            
            s4=new Sing(4,"animal\tnot static code area");
        }
        
        Animal(){
            s5=new Sing(5,"animal\tconstructor");
        }
    }
public class Cat extends Animal {
    Sing s1=new Sing(1,"cat\t\tnot static field");
    static Sing s2=new Sing(2,"cat\t\tstatic field");
    static Sing s3;
    Sing s4;
    Sing s5;
    
    static{
        s3=new Sing(3,"cat\t\tstatic code area");
    }
    
    {
        
        s4=new Sing(4,"cat\t\tnot static code area");
    }
    
    Cat(){
        s5=new Sing(5,"cat\t\tconstructor");
    }
}
public class Sing {
    Sing(int mark,String flag){
        System.out.println(mark+" "+flag);
    }
}
public class Runner {

    public static void main(String[] args) {
        System.out.println("+++++++++++++++++++++first+++++++++++++++++++++++++++++");
        new Cat();
        System.out.println("+++++++++++++++++++++second++++++++++++++++++++++++++++");
        new Cat();
    }
}

三、执行结果

+++++++++++++++++++++first+++++++++++++++++++++++++++++
2 animal    static field
3 animal    static code area
2 cat        static field
3 cat        static code area
1 animal    not static field
4 animal    not static code area
5 animal    constructor
1 cat        not static field
4 cat        not static code area
5 cat        constructor
+++++++++++++++++++++second++++++++++++++++++++++++++++
1 animal    not static field
4 animal    not static code area
5 animal    constructor
1 cat        not static field
4 cat        not static code area
5 cat        constructor

 

四、总结

初始化顺序:父类静态字段-》父类静态代码块-》子类静态字段-》子类静态代码块-》父类非静态字段-》父类非静态代码块-》父类构造-》子类非静态字段-》子类非静态代码块-》子类构造

遵循以下原则:

1、静态>非静态

2、父类>子类

3、字段>代码块>构造函数

4、静态字段、静态代码块在程序生命周期只初始化一次

java 子类、父类中静态代码块、字段,非静态代码块、字段以及构造函数的初始化顺序和次数

标签:

原文地址:http://www.cnblogs.com/zsmart/p/5736015.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!