java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
Java 中什么时候类加载, 第一次需要使用类信息时加载类加载的原则: 延迟加载, 能不加载就不加载下面这篇文章主要介绍了 Java 中类的加载顺序, 需要的朋友可以参考借鉴, 下面来一起看看吧
本文介绍的是 Java 中类的加载顺序, 下面来看看详细的介绍:
1 虚拟机在首次加载 Java 类时, 会对静态初始化块静态成员变量静态方法进行一次初始化
2 只有在调用 new 方法时才会创建类的实例
3 类实例创建过程: 按照父子继承关系进行初始化, 首先执行父类的初始化块部分, 然后是父类的构造方法; 再执行本类继承的子类的初始化块, 最后是子类的构造方法
4 类实例销毁时候, 首先销毁子类部分, 再销毁父类部分
示例
- public class Parent
- {
- public static int t = parentStaticMethod2();
- {
- System.out.println("父类非静态初始化块");
- }
- static
- {
- System.out.println("父类静态初始化块");
- }
- public Parent()
- {
- System.out.println("父类的构造方法");
- }
- public static int parentStaticMethod()
- {
- System.out.println("父类类的静态方法");
- return 10;
- }
- public static int parentStaticMethod2()
- {
- System.out.println("父类的静态方法 2");
- return 9;
- }
- @Override
- protected void finalize() throws Throwable
- {
- // TODO Auto-generated method stub
- super.finalize();
- System.out.println("销毁父类");
- }
- }
- public class Child extends Parent
- {
- {
- System.out.println("子类非静态初始化块");
- }
- static
- {
- System.out.println("子类静态初始化块");
- }
- public Child()
- {
- System.out.println("子类的构造方法");
- }
- public static int childStaticMethod()
- {
- System.out.println("子类的静态方法");
- return 1000;
- }
- @Override
- protected void finalize() throws Throwable
- {
- // TODO Auto-generated method stub
- super.finalize();
- System.out.println("销毁子类");
- }
- }
- public class Test
- {
- public static void main(String[] args)
- {
- // TODO Auto-generated method stub
- Parent.parentStaticMethod();
- // Child child = new Child();
- }
- }
输出
父类的静态方法 2
父类静态初始化块
父类类的静态方法
类中 static 方法在第一次调用时加载, 类中 static 成员按在类中出现的顺序加载当调用静态方法 2 时输出
父类的静态方法 2
父类静态初始化块
父类的静态方法 2
注释掉
Parent.parentStaticMethod();
去掉注释
Child child = new Child();
父类的静态方法 2
父类静态初始化块
子类静态初始化块
父类非静态初始化块
父类的构造方法
子类非静态初始化块
子类的构造方法
来源: http://www.phperz.com/article/18/0214/358864.html