一个研究java迭代类初始化顺序的程序

package base;
abstract class base
{
    
public int age=getNumber(100);
    
static
    
{
        System.out.println(
"base static block");
    }

    
{
        System.out.println(
"base nonstatic block");
    }

    
static int sage=getNumber(50);
    base()
    
{
        System.out.println(age);
        System.out.println(
"base start");
        draw();
//会调用子类覆盖后的方法
        System.out.println("base end");
        
    }

    
static int getNumber(int base)
    
{
        System.out.println(
"base.getNumber int"+base);
        
return base;
    }

    
public  void draw()
    
{
        System.out.println(
"base.draw");
    }

}

public class initializeOrder extends base{
    
public int age=getNumber(1001);
    
private int _radius=getNumber(10);
    
static int sage=getNumber(250);
    
static
    
{
        System.out.println(
"subclass static block");
    }

    
{
        System.out.println(
"subclass nonstatic block");
    }

    initializeOrder(
int radius)
    
{
        _radius
=radius;
        System.out.println(age);
        System.out.println(
"initializeOrder initialized");
    }

    
public void draw()
    
{
        System.out.println(
"initializeOrder.draw "+_radius);
    }

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        new initializeOrder(1000);
    }

    
/*
    总结:
    1、类只有在使用New调用创建的时候才会被JAVA类装载器装入
    2、JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的
       静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同
       先初始化父类的静态代码--->初始化子类的静态代码-->
       初始化父类的非静态代码--->初始化父类构造函数--->
       初始化子类非静态代码--->初始化子类构造函数
    3、创建类实例时,首先按照父子继承关系进行初始化
    4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从
       本类继承的子类的初始化块执行,最后是子类的构造方法
    5、类消除时候,首先消除子类部分,再消除父类部分
    
*/

}

原文地址:https://www.cnblogs.com/Finding2013/p/243132.html