Java| Java的类加载顺序

来源:互联网 发布:游族网络大皇帝礼包 编辑:程序博客网 时间:2024/06/11 15:27

Agent.java

/** * 静态块中只能调用在该静态块 之前声明的静态变量 *  * 普通块中只能调用在该普通块 之前声明的普通变量 *  *  * 调用final 修饰的字段是不会加载类的,但是调用final 修饰的方法事会加载 *  * @author Yves He * */public class Agent {    private String genStr = "gen str";    public static String staticStr = "static str";    public static final String FINAL_STR = "final str";    {         // 实例化对象时会执行( new对象时)        System.out.println(genStr);    }    static {        // 静态成员被调用时(记载静态数据时 会执行静态块)        System.out.println(staticStr);    }    public final void showHelloFinal() {        System.out.println("invoke final method.");    }    public static final void showHelloStaticFinal() {        System.out.println("invoke static final method.");    }    static {        showHelloStaticFinal();    }    {        System.out.println("Yves");    }}

Test.java

/** * final 特别的调用static final修饰的变量 ,不会加载类,只有final修饰的方法不能单独调用,要产生实例才能调用,static final修饰的方法,会以加载静态数据的方式加载类. *  * static 调用static修饰的成员(包括变量和方法) 会加载类,并会对的静态的数据初始化(静态变量和静态方法)和执行静态代码块. *  * new   产生对象实例时,会加载类的普通初数据初始化(普通变量和普通方法)和执行普通的代码块 *   *  * @author Yves He * */public class Test {    public static void main(String[] args) {        // 加载final成员 :  只能调用static final的变量和方法,调用变量时,不会加载类,调用方法时,与调用static其他方法一直,会记载类.        String finalStr = Agent.FINAL_STR; // 特别的,不加载类.        Agent.showHelloFinal();//报错, 非static方法,不能调用.        // 加载static数据  : 加载类,初始化静态数据        String aa = Agent.staticStr;        Agent.showHelloStaticFinal();        // 加载实例化对象: 加载类,初始化普通数据        new Agent();    }}
原创粉丝点击