您的位置:首页 > 其它

class的内容在jvm中的加载顺序

2017-09-25 22:21 211 查看

做个小实验,测试下class中的属性和方法在jvm中的加载顺序如何

package com.java;

/**
* Created by cc on 2017/9/25.
*/
public class DemoClass {

private static DemoClass demoClass = new DemoClass();
private String s1 = print();
private static String s2 = printStatic(1);
private static String s3 = printStatic(2);

{
System.out.println("我是普通代码块");
}

static {
System.out.println("我是静态代码块");
}

DemoClass() {
System.out.println("我是构造方法");
}

public static void main(String[] args) {
new DemoClass();
}

public static class InnerClass{

public int i1 = print();
private static int i2= printStatic();

public int print(){
System.out.println("我是内部类中的成员变量");
return 0;
}

public static int printStatic(){
System.out.println("我是内部中的静态成员变量");
return 0;
}
}

public String print() {
System.out.println("我是成员变量");
return "";
}

public static String printStatic(int i) {
System.out.println("我是第" + i + "个static成员变量");
return "";
}
}


上述代码的运行结果如下:



结论如下:

1.加载顺序:静态>普通>main方法>构造

2.排在前面的同等属性或方法先加载

3.属性优于代码块先加载

4.内部类默认不会被加载

!另外若是在用成员变量初始化当前class对象,则会报java.lang.StackOverflowError异常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jvm 测试 class