static代码块、父子类加载顺序
package org.xjn.oop;
import org.junit.Test;
public class Bar {
{
System.out.println("Bar Non-static code block");
}
static{
System.out.println("Bar static code block");
}
public Bar() {
System.out.println("Bar Constructor");
}
}
class Xoo extends Bar {
static {
System.out.println("Xoo static code block");
}
Bar bar = new Bar();
public Xoo() {
System.out.println("Xoo Constructor");
}
}
class Yoo {
Xoo x = new Xoo();
public Yoo() {
System.out.println("Yoo Constructor");
}
}
package org.xjn.oop;
public class TestOop {
/**
* @param args
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException {
// TODO Auto-generated method stub
// Class.forName("org.xjn.oop.Xoo");
Yoo yoo = new Yoo();
/*
* Bar static code block
* Xoo static code block
* Bar Non-static code block
* Bar Constructor
* Bar Non-static code block
* Bar Constructor
* Xoo Constructor
* Yoo Constructor
*
* 类装载器把一个类装入JVM中的步骤:
* 1、装载:查找和导入Class文件
* 2、链接:
* a、校验:检查载入Class文件数据的正确性
* b、准备:给类的静态变量分配存储空间(分配空间与创建对象不是同一时间进行的)
* c、解析(可选):将符号引用转成直接引用
* 3、初始化:对类的静态变量、静态代码块执行初始化工作。
*
* ##静态代码块并不是在装载Class文件时就执行
*/
}
}
package org.xjn.oop;
import org.junit.Test;
public class Bar {
{
System.out.println("Bar Non-static code block");
}
static{
System.out.println("Bar static code block");
}
public Bar() {
System.out.println("Bar Constructor");
}
}
class Xoo extends Bar {
static {
System.out.println("Xoo static code block");
}
Bar bar = new Bar();
public Xoo() {
System.out.println("Xoo Constructor");
}
}
class Yoo {
Xoo x = new Xoo();
public Yoo() {
System.out.println("Yoo Constructor");
}
}
package org.xjn.oop;
public class TestOop {
/**
* @param args
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException {
// TODO Auto-generated method stub
// Class.forName("org.xjn.oop.Xoo");
Yoo yoo = new Yoo();
/*
* Bar static code block
* Xoo static code block
* Bar Non-static code block
* Bar Constructor
* Bar Non-static code block
* Bar Constructor
* Xoo Constructor
* Yoo Constructor
*
* 类装载器把一个类装入JVM中的步骤:
* 1、装载:查找和导入Class文件
* 2、链接:
* a、校验:检查载入Class文件数据的正确性
* b、准备:给类的静态变量分配存储空间(分配空间与创建对象不是同一时间进行的)
* c、解析(可选):将符号引用转成直接引用
* 3、初始化:对类的静态变量、静态代码块执行初始化工作。
*
* ##静态代码块并不是在装载Class文件时就执行
*/
}
}