JAVA 初始化顺序


//JAVA初始化分两大步
//A、类的加载
//
// 先加载父类,在加载子类
//
// 加载父类后,完成静态动作【静态变量、静态代码块(主动执行仅一次)】(按代码顺序)、【静态方法(被动执行)】
//
// 加载子类后,完成静态动作【静态变量、静态代码块(主动执行仅一次)】(按代码顺序)、【静态方法(被动执行)】
//
//B、类的实例化
//
// 先实例化父类,在实例化子类
//
// 实例化父类,完成实例化【成员变量、初始化块】(按代码顺序)、【父类构造方法】、【成员方法(被动执行)】
//
// 实例化子类,完成实例化【成员变量、初始化块】(按代码顺序)、【子类构造方法】、【成员方法(被动执行)】


//注:类装载步骤(详解A步骤)
// 在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下:
//装载:查找和导入类或接口的二进制数据;
//链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
//校验:检查导入类或接口的二进制数据的正确性;
//准备:给类的静态变量分配并初始化存储空间;
//解析:将符号引用转成直接引用;
//初始化:激活类的静态变量的初始化Java代码和静态Java代码块。
//初始化类中属性是静态代码块的常用用途,但只能使用一次。


package cn.ilex;

public class InitClass2 extends Parent2 {

// 初始化块
{
new PrintStr2("子类--初始化块");
}

// 静态变量
public static PrintStr2 a=new PrintStr2("子类--静态变量");

// 变量
public PrintStr2 b=new PrintStr2("子类--实例变量");
// 静态初始化块
static {
new PrintStr2("子类--静态初始化块(主动执行)");
}

// 构造器
public InitClass2() {
new PrintStr2("子类--构造器");

}

public void callParentStaticMethod(){
Parent2.printString(this.getClass().getName()+"callParentStaticMethod()方法 ");
}

// 程序入口
public static void main(String[] args) {
Parent2.printString(" InitClass类 main() 方法");
new PrintStr2("子类--进入程序入口 (静态方法) InitClass main()");
new PrintStr2("子类--开始实例化 new InitClass()");
new InitClass2().callParentStaticMethod();
}

}
class Parent2 {

// 静态初始化块
static {
new PrintStr2("父类--静态初始化块(主动执行)");
}

public static String str="父类--静态方法被调用前加载完成的静态变量";

// 静态变量
public static PrintStr2 c=new PrintStr2("父类--静态变量");

// 变量
public PrintStr2 d=new PrintStr2("父类--实例变量");

// 初始化块
{
new PrintStr2("父类--初始化块");
}

// 构造器
public Parent2() {
new PrintStr2("父类--构造器");
}

public static void printString(String s){
new PrintStr2("父类--静态方法(被"+s+"调用执行)." );
new PrintStr2( "父类--静态方法调用自己的静态变量:str="+Parent2.str );
}


}


class PrintStr2{

private static int i=0;
static {
Parent2.printString("PrintStr2 类静态块");
}
public static int getCount(){
return i++;
}

public PrintStr2(String s){

System.out.println(PrintStr2.getCount()+"."+s);

}
public String toString(){

return " PrintStr2 类型的";
}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值