300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > java静态代码块和构造方法_Java静态代码块和构造方法执行顺序

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

时间:2019-01-25 07:25:22

相关推荐

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);

}

/**

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

*

* 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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。