Java的初始化顺序

原创 2016年08月31日 00:00:04

当一个类被加载,class.forname或者使用静态方法时,总是先初始化父类的static部分,再初始化子类的static部分,非静态成员一律不初始化。任何一个类的静态部分只被初始化一次

public class Test{          
    public static void main(String[] args) {
        System.out.println("MAIN");
        Test0.Fun1();
    }   
}



class Test0 extends Test1{  
    static{
        System.out.println("Static area in TEST0");
    };  
    Test3 t3;                   
    public static void Fun1(){
    }   
}
class Test1{
    static{
        System.out.println("Static area in father class");
    };
    Test1(){
        System.out.println("constructor in father class");
    }
}

上述代码输出
MAIN
Static area in father class
Static area in TEST0

当一个类被实例化时,如果类还没有被加载,则先加载,再实例化。实例化中先运行父类的构造函数,再运行子类的构造函数。如果类中的成员没有被初始化,其值为null,其相当于还没有被加载。

public class Test{          
    public static void main(String[] args) {
        System.out.println("MAIN");
        Test0 t0 = new Test0();
        System.out.println(t0.t3);
    }   
}



class Test0 extends Test1{


    static{
        System.out.println("Static area in TEST0");
    };

    Test3 t3;       

    public static void Fun1(){

    }
    Test0(){
        System.out.println("constructor in TEST0");
    }



}
class Test1{
    static{
        System.out.println("Static area in father class");
    };
    Test1(){
        System.out.println("constructor in father class");
    }
}

class Test3{
    static{
        System.out.println("Static area in member class");
    };
    Test3(){
        System.out.println("constructor in menber class");
    }
}

上面程序输出为
MAIN
Static area in father class
Static area in TEST0
constructor in father class
constructor in TEST0
null

java最开始处理main函数时,相当于如上静态加载main类。Java会线执行Main类父类的静态块,然后是Main类的静态块。

Java基础总结之类与对象的初始化顺序

Java
  • crazyf2015
  • crazyf2015
  • 2015年06月27日 21:51
  • 2174

Java类的变量初始化顺序

大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出到控制台...
  • meegomeego
  • meegomeego
  • 2015年08月05日 12:14
  • 1621

【深入理解JVM】:Java类继承关系中的初始化顺序

Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释。非继承关系中的初始化顺序对于非继承关系,主类Initi...
  • u011080472
  • u011080472
  • 2016年05月06日 11:19
  • 4532

Java中初始块的执行顺序

在Java中除了使用构造器类对单个对象进行初始化操作外,我们还可以通过初始化块来实现。在一个类中可以有多个初始化块,相同类型的初始化块之间有顺序:前面定义的初始化块先执行,后面定义的初始化块后执行。使...
  • u010695218
  • u010695218
  • 2015年03月12日 18:59
  • 963

Java类的加载和初始化顺序分析

不再一一叙述java中的各种定义和规定, 这里就是举了两个例子,详细阐述,java代码运行时,成员变量和构造函数的加载和执行顺序。 package com.gt.world.oa.aaa;...
  • haorengoodman
  • haorengoodman
  • 2014年04月03日 13:58
  • 3133

java继承中初始化的顺序

java中子类继承了父类,其初始化的顺序是: 首先去看父类里面有没有静态代码块,如果有,它先去执行父类里面的静态代码块里面的内容;当父类的静态代码块里面的内容执行完毕后,接着去执行子类里面的静态代码块...
  • long636
  • long636
  • 2015年11月28日 21:18
  • 1055

JAVA中继承时的初始化顺序

我们都知道继承是JAVA面向对象中的一个很重要的特性。那么你有没有思考过当我们使用继承这个特性的时候,程序是如何执行的呢?也就是说,继承的初始化顺序到底是怎么样的。接下来我就要用eclipse来试验一...
  • baidu_28312631
  • baidu_28312631
  • 2015年05月23日 15:23
  • 1130

Java中成员变量的初始化顺序浅析

在Java中,所有的变量在使用之前都得到恰当的初始化,对于方法的局部变量,如果在使用前没有初始化,编译时系统会提示错误而无法继续编译;对于成员变量,系统会提供默认值,对于基本类型,默认置为0,引用类型...
  • abc13526222160
  • abc13526222160
  • 2016年10月06日 15:37
  • 527

Java程序初始化的顺序是怎样的。

在java语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,当所有成员完成初始化后,才会调用对象所在类的构造函数创建对象。 Java程序的初始化一般遵循3个原则(优先级依次递减):(...
  • u013274055
  • u013274055
  • 2016年12月16日 22:56
  • 1036

java中父类和子类初始化顺序

顺序 1. 父类中静态成员变量和静态代码块 2. 子类中静态成员变量和静态代码块 3. 父类中普通成员变量和代码块,父类的构造函数 4. 子类中普通成员变量和代码块,子类的构造函数 其中“和”字两...
  • yuxin6866
  • yuxin6866
  • 2016年11月09日 23:39
  • 1601
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java的初始化顺序
举报原因:
原因补充:

(最多只允许输入30个字)