栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java类初始化时机测试方法解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java类初始化时机测试方法解析

()方法

Java 类加载的初始化过程中,编译器按语句在源文件中出现的顺序,依次自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并产生方法。 如果类中没有静态语句和静态代码块,那可以不生成() 方法。

并且 () 不需要显式调用父类(接口除外,接口不需要调用父接口的初始化方法,只有使用到父接口中的静态变量时才需要调用)的初始化方法 (),虚拟机会保证在子类的 () 方法执行之前,父类的 () 方法已经执行完毕(所以java.lang.Object 类总是第一个被加载)

准备父类和子类

class Father {

  static int father_a = 1;

  static {
    System.out.println("父类静态代码块执行");
  }

  static class StaticInnerClass {
    static {
      System.out.println("静态内部类静态代码块执行");
    }
  }
}

class Son extends Father {

  static {
    System.out.println("子类静态代码块执行");
    son_a = 300;
  }

  static int son_a = 100;
  static final int M = 1;
}

Main方法:

1:父类没有被引用但是会被先加载

new Son();

2:反射也会产生主动引用:

Class a = Class.forName("clinit.Son");

(运行结果同1)

3:子类使用父类静态变量或方法不会产生类的引用

System.out.println("Father.a = " + Son.father_a);

4:通过类创建数组不会加载类(只是开辟一块空间)

Son[] sons = new Son[8];

5:使用常量不会加载父类和之类(常量在linking阶段就保存在常量池当中了)

System.out.println("Son.ConST = " + Son.CONST);

6:引用静态内部类不会加载外部类(应用于单例模式)

new Father.StaticInnerClass();

代码总结:

public static void main(String[] args) throws Exception {

//    1.父类没有被引用但是会被先加载
//    new Son();
//    2.反射会产生主动引用
//    Class a = Class.forName("clinit.Son");
//    3.子类使用父类静态变量或方法不会产生类的引用
//    System.out.println("Father.a = " + Son.father_a);
//    4.通过类创建数组不会加载类(只是开辟一块空间)
//    Son[] sons = new Son[8];
//    5.使用常量不会加载父类和之类(常量在linking阶段就保存在常量池当中了)
//    System.out.println("Son.ConST = " + Son.CONST);
//    6.引用静态内部类不会加载外部类(应用于单例模式)
//    new Son.StaticInnerClass();
  }
}

PS:由于是按出现的顺序执行的,为了避免不必要的麻烦,应尽量把静态变量写在静态代码块之前

public class Test {
  public static void main(String[] args) {
    System.out.println("a = " + cls.a);
  }
}
class cls {
  static int a = 10;8   static { a = 20; }9 }

如果 调换顺序输出结果将是 a = 10

 class cls {
   static { a = 20; }
   static int a = 10;
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/132640.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号