您的位置:首页 > 其它

类加载过程实例分析

2016-11-20 15:42 211 查看
类加载过程解析:JVM 类加载机制

先加载静态域,并赋值;加载类时先加载父类,如果该类有静态成员,先加载父类和子类静态成员;接着加载父类初始化块、方法,最后加载子类的初始化块、方法。

package com.sinojava;
class Class_A {
static {
System.out.println("In Class_A Static");
}

public Class_A() {
System.out.println("Class_A()");
}
}

class Class_B {
public static String p_StaticField = "父类--静态变量";
public String p_Field = "父类--变量";
static {
System.out.println(p_StaticField);
System.out.println("In Class_B Static");
}
// 初始化块
{
System.out.println(p_Field);
System.out.println("父类--初始化块");
}
// 构造器
public Class_B() {

System.out.println("Class_B()");
}
}

class Class_C extends Class_B {
// 静态变量
public static String s_StaticField = "子类--静态变量";
// 变量
public String s_Field = "子类--变量";
static {
System.out.println(s_StaticField);
System.out.println("In Class_C Static");
}
// 初始化块
{
System.out.println(s_Field);
System.out.println("子类--初始化块");
}
public Class_C() {
super();
System.out.println("Class_C()");
}

}

class MyClass {
static Class_A ca = new Class_A();
Class_C cc = new Class_C();
static {
System.out.println("In Static MyClass");
}

public MyClass() {
System.out.println("MyClass()");
}
public void run(){
System.out.println("kai shi");
}

}
public class testJiaZai{
public static void main(String[] args) {
new MyClass();
}
}


运行结果

In Class_A Static

Class_A()

In Static MyClass

父类–静态变量

In Class_B Static

子类–静态变量

In Class_C Static

父类–变量

父类–初始化块

Class_B()

子类–变量

子类–初始化块

Class_C()

MyClass()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jvm