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

来源:互联网 发布:linux双系统引导修复 编辑:程序博客网 时间:2024/06/06 09:54

做个小实验,测试下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异常。