0.先加载父类再加载子类
1.所有静态的(无论其是变量还是块)都按顺序执行.
2.所有的非静态的块都在静态的(无论其是变量还是块)后执行.
3.所有的块(无论是静态的还是非静态的)都在构造之前执行.(非静态语句块在new的时候才被执行,不new的时候不执行)
4.静态块内必需是静态变量,静态块和静态方法都且只执行一次,非静态块是在类实例化时执行,且实例一次非静态块都会执行一次.
5.先销毁子类再销毁父类。
package book.oo.inittorder;
public class Parent {
private int ix=50;
private static int iz= 10000 ;
static{
System.out.println(iz );
}
{
System.out.println("Parent初始化块");
int x= 100;
int y = getNext(150);
}
static{
System.out.println("Parent 的静态初始化块");
int sx =100;
int sy = getNext(200);
}
public Parent(){
System.out.println("Parent 的构造方法被调用");
}
public void display(){
System.out.println("Parent 的display方法被调用");
System.out.println("ix=" +this.ix);
System.out.println("iz=" +this.iz);
dispA();
}
public static void dispA(){
System.out.println("Parent 的dispA被调用");
}
public static int getNext(int base){
System.out.println("Parent 的 getNext(int base )被调用"+base);
return ++base;
}
public void finalize(){
System.out.println("Parent 的销毁方法被调用");
}
}
package book.oo.inittorder;
public class Child extends Parent{
{
System.out.println("Child 的初始化块");
int x= 100;
}
static{
System.out.println("Child 的静态初始化块");
}
public Child(){
super();
System.out.println("Child 的构造方法被调用");
}
public static void dispB(){
System.out.println("Child 的dispB被调用");
}
public void finalize(){
super.finalize();
System.out.println("Child 的销毁方法被调用");
}
}
package book.oo.inittorder;
public class ClassInitOrderTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("不new对象,访问静态方法时的输出:");
Child.dispB();
System.out.println();
System.out.println("不new对象,访问静态方法时的输出:");
new Child().display();
System.gc();
}
}
1.所有静态的(无论其是变量还是块)都按顺序执行.
2.所有的非静态的块都在静态的(无论其是变量还是块)后执行.
3.所有的块(无论是静态的还是非静态的)都在构造之前执行.(非静态语句块在new的时候才被执行,不new的时候不执行)
4.静态块内必需是静态变量,静态块和静态方法都且只执行一次,非静态块是在类实例化时执行,且实例一次非静态块都会执行一次.
5.先销毁子类再销毁父类。
package book.oo.inittorder;
public class Parent {
private int ix=50;
private static int iz= 10000 ;
static{
System.out.println(iz );
}
{
System.out.println("Parent初始化块");
int x= 100;
int y = getNext(150);
}
static{
System.out.println("Parent 的静态初始化块");
int sx =100;
int sy = getNext(200);
}
public Parent(){
System.out.println("Parent 的构造方法被调用");
}
public void display(){
System.out.println("Parent 的display方法被调用");
System.out.println("ix=" +this.ix);
System.out.println("iz=" +this.iz);
dispA();
}
public static void dispA(){
System.out.println("Parent 的dispA被调用");
}
public static int getNext(int base){
System.out.println("Parent 的 getNext(int base )被调用"+base);
return ++base;
}
public void finalize(){
System.out.println("Parent 的销毁方法被调用");
}
}
package book.oo.inittorder;
public class Child extends Parent{
{
System.out.println("Child 的初始化块");
int x= 100;
}
static{
System.out.println("Child 的静态初始化块");
}
public Child(){
super();
System.out.println("Child 的构造方法被调用");
}
public static void dispB(){
System.out.println("Child 的dispB被调用");
}
public void finalize(){
super.finalize();
System.out.println("Child 的销毁方法被调用");
}
}
package book.oo.inittorder;
public class ClassInitOrderTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("不new对象,访问静态方法时的输出:");
Child.dispB();
System.out.println();
System.out.println("不new对象,访问静态方法时的输出:");
new Child().display();
System.gc();
}
}