public class MainTest { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConfigTest.class); System.out.println("###"); context.close(); } } 运行之后结果如图: 根据打印顺序可以看到,首先是构造函数,也就是创建了bean,紧接着...
packagecn.d;publicclassClassInit {publicstaticvoidmain(String[] args) {newB(); System.out.println("---");newB(); } }classA {static{ System.out.println("A的static代码块...");//1} { System.out.println("A的代码块...");//1}publicString s1 = prtString("A的成员变量...");publ...
Class.forName("com.cunchen.practice.init.InitalizationTest");System.out.println("---");InitalizationTest test = new InitalizationTest();System.out.println("---");test.test1();test.test6();System.out.println("---");} 结果如下 ---StaticdeclaredStaticfinal declaredStaticblock --- Initalize...
以GuoClass这个类为例,在access_flags之后的两个字节是this_class,这个u2类型的数据项用十六进制表示为0x0004,它指向常量池中第4个类型为CONSTANT_Class_info的常量,再根据此常量里的索引值找到常量池中第25个位置保存的CONSTANT_Utf8_info类型的字符串,这个字符串就是我们需要找的全限定名“com/examples/test/Guo...
* 因为创建了两个Son对象,因此实例化方法<init>执行两次 * * (9)(3)(2)(9)(8)(7) */ public class Son extends Father{ private int i = test(); private static int j = method(); static{ System.out.print("(6)"); } Son(){ ...
• 执行目的不同:init是对非静态变量解析初始化,而clinit是对静态变量,静态代码块进行初始化。 三、双亲委派机制 在介绍双亲委派机制前,先来看下类加载器的层次关系图,如下: •启动类加载器(Bootstrap ClassLoader),负责加载存放在$JAVA_HOME\jre\lib下,或被-Xbootclasspath参数指定的路径中的,并且能被虚拟...
init是instance实例构造器,对非静态变量解析初始化 clinit是class类构造器对静态变量,静态代码块进行初始化 3 clinit详解 准备阶段,变量已经赋过一次系统要求的初始值 在初始化阶段,则根据程序员通过程序制定的主观计划去初始化类变量和其他资源,或者可以从另外一个角度来表达:初始化阶段是执行类构造器<clinit>方法的过...
执行目的不同:init是对非静态变量解析初始化,而clinit是对静态变量,静态代码块进行初始化。 三、双亲委派机制 在介绍双亲委派机制前,先来看下类加载器的层次关系图,如下: 启动类加载器(Bootstrap ClassLoader),负责加载存放在$JAVA_HOME\jre\lib下,或被-Xbootclasspath参数指定的路径中的,并且能被虚拟机识别的...
<clinit>:在jvm第一次加载class文件时调用,包括静态变量初始化语句和静态块的执行 <init>:在实例创建出来的时候调用,包括调用new操作符;调用Class或java.lang.reflect.Constructor对象的newInstance()方法;调用任何现有对象的clone()方法;通过java.io.ObjectInputStream类的getObject()方法反序列化。impo...
首次创建对象时,类中的静态方法/静态字段首次被访问时,Java 解释器必须先查找类路径,以定位 .class 文件; 然后载入 .class(这将创建一个 Class 对象),有关静态初始化的所有动作都会执行。因此,静态初始化只在 Class 对象首次加载的时候进行一次; 当用new 方法创建对象时,首先再堆上为对象分配足够的存储空间; ...