java静态块和构造方法_Java静态代码块和构造方法执行顺序

package com.uno.staticBlock;

import java.lang.reflect.Field;

import java.util.Vector;

/**

* 验证静态代码块和构造代码块执行顺序

*

* 1.加载父类静态代码块

* 2.加载子类静态代码块

* 3.加载父类构造代码块

* 4.父类构造方法

* 5.子类构造代码块

* 6.子类构造方法

* @author uno

*

*/

public class StaticBlock {

//1.加载MyClass时,不一定会执行static代码块

static ClassLoader loader = Thread.currentThread().getContextClassLoader();

public static void main(String[] args) {

printClassesOfClassLoader(loader);

//testClassLoader();

new SON();

printClassesOfClassLoader(loader);

}

/**

* 测试静态代码块是否执行

*

* 2017年11月20日

* author: leipan

*/

public static void testClassLoader(){

//System.out.println("此方法加载class后不会执行static代码块," + MyClass.class + ",但会加载到ClassLoader中。");

}

public static void printClassesOfClassLoader(ClassLoader loader){

try {

Field classesF = ClassLoader.class.getDeclaredField("classes");

classesF.setAccessible(true);

Vector> classes = (Vector>) classesF.get(loader);

for(Class c : classes) {

System.out.println(c);

}

} catch (NoSuchFieldException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

}

}

class Father {

static {

System.out.println("Father static exec。");

}

{

System.out.println("Father unstatic exec。");

}

public Father (){

System.out.println("Father Construction。");

}

}

class SON extends Father{

static {

System.out.println("myClass static exec。");

}

{

System.out.println("myClass unstatic exec。");

}

public SON (){

System.out.println("Son construction。");

}

}

结果:

class com.uno.staticBlock.StaticBlock

Father static exec。

myClass static exec。

Father unstatic exec。

Father Construction。

myClass unstatic exec。

Son construction。

class com.uno.staticBlock.StaticBlock

class com.uno.staticBlock.Father

class com.uno.staticBlock.SON

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值