java 回调执行的顺序,Java靜態初始化與構造方法的執行順序

import static net.mindview.util.Print.*

class Insect{

private int i=9;

protected int j;

Insect(){

print("i="+i+",j="+j);

j=39;

}

private static int x1=printInit("static Insect.x1

initialized");

static int printInit(String s){

print(s);

return 47;

}

}

public class Beetle extends Insect{

private int k=printInit("Beetle.k initialized");

public Beetle(){

print("k="+k);

print("j="+j);

}

private static int x2=printInit("static Beetle.x2

initialized");

public static void main(String[] args){

print("Beetle constructor");

Beetle b=new Beetle();

}

}

输出结果是:

static Insect.x1 initialized

static Beetle.x2 initialized

Beetle constructor

i=9,j=0

Beetle.k initialized

k=47

j=39

因为是静态方法。

JAVA初始化顺序

1、调用顺序:

JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。

先初始化父类的静态代码--->初始化子类的静态代码-->

(创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数

其他说明:

2 、类只有在使用New调用创建的时候才会被JAVA类装载器装入

3、创建类实例时,首先按照父子继承关系进行初始化

4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法

5、类消除时候,首先消除子类部分,再消除父类部分

class A {

static{

System.out.print("1");

}

public A(){

System.out.print("2");

}

}

class B extends A {

static{

System.out.print("a");

}

public B(){

System.out.print("b");

}

}

public class Hello{

public static void main(String[] arge){

System.out.println(" ");

A ab = new B();

System.out.println(" ");

ab = new B();

}

}

最后输出是1a2b

2b

変一下

class a{

static{

System.out.println("1");

} public a(){

System.out.println("2");

}

}

class b extends a{

static{

System.out.println("a");

} public b(){

System.out.println("b");

}

}

public class d {

public static void main(String[] args) {

// TODO 自动生成方法存根

System.out.println("空格");

a ab=new a();

System.out.println("空格 ");

ab=new b();

}

}

結果為:

空格

1

2

空格

a

2

b

最后為什么會多一個a呢? 因為這里類b并沒初始化!

再來一個例子

class

d

{ static int x=10;

static { x+=5;}

public static void main(String[] args)

{System.out.println("x=" + x);}

static { x/=5;} }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值