这个例子中的静态代码块会在类加载时打印出一条消息。 普通成员变量:然后,非静态成员变量会被初始化。这些变量的初始化顺序与它们在类中出现的顺序一致。如果一个非静态变量是一个常量(final),则其初始值必须是编译时常量。否则,非静态变量的值会在实例化对象的时候由JVM计算。示例代码: public class MyClass { ...
Java类的初始化 1)创建类的实例,也就是new一个对象 2)访问某个类或接口的静态变量,或者对该静态变量赋值 3)调用类的静态方法 4)反射(Class.forName("com.lyj.load")) 5)初始化一个类的子类(会首先初始化子类的父类) 6)JVM启动时标明的启动类,即文件名和类名相同的那个类 只有这6中情况才会导致类的类...
类会在首次被“主动使用”时运行初始化。为类(静态)变量赋予正确的初始值。在Java代码中,一个正确的初始值是通过类变量初始化语句或者静态初始化块给出的。而我们这里所说的主动使用 包含: 1. 创建类的实例 2. 调用类的静态方法 3. 使用类的非常量静态字段 4. 调用Java API中的某些反射方法 5. 初始化某个...
指一个class文件从加载到卸载的全过程,类的完整生命周期包括7个部分:加载——验证——准备——解析——初始化——使用——卸载,如下图所示 其中,验证——准备——解析 称为连接阶段,除了解析外,其他阶段是顺序发生的,而解析可以与这些阶段交叉进行,因为Java支持动态绑定(晚期绑定),需要运行时才能确定具体类型;在使...
Java类及其类成员的初始化(一)—类的初始化 1、类初始化的时机 首次通过下面6种方式使用某个类或者接口时,系统会初始化该类或接口。 创建类的实例(创建实例方式包括:使用new操作符创建实例,通过反射创建实例,通过反序列化创建实例)。 调用某个类的类方法。
("父类--初始化块"); } // 构造器 public Parent() { System.out.println("父类--构造器"); } } public class SubClass extends Parent { // 静态变量 public static String s_StaticField = "子类--静态变量"; // 变量 public String s_Field = "子类--变量"; // 静态初始化块 static { ...
对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是: (静态变量、静态初始化块)>(变量、初始化块)>构造器。 单个类 结果: 1 静态变量 2 静态初始化块 3 变量 4 初始化块 5 构造器 存在继承的情况 输出 父类--静态变量 ...
本文主要演示Java类的初始化顺序,分为有继承和没有继承两种情况。如有错误,劳烦指正,不胜感谢! 没有继承情况 直接上代码,工具类: /** * 工具类Log */publicclassLog{publicstaticStringbaseFieldInit(){System.out.println("父类普通成员变量");return"";}publicstaticStringbaseStaticFieldInit(){System.out.prin...
1、类的主动引用(一定会发生类的初始化) 当虚拟机启动,先初始化main方法所在的类; new一个类的对象; 调用类的静态成员(除了final常量)和静态方法; 使用java.lang.reflect包的方法对类进行反射调用; 当初始化一个类,如果其父类没有被初始化,则先会初始化它的父类; ...
我们可以看到以红色突出显示的差异。A.class仅在使用时加载。总而言之,将加载一个类:· 当执行新的字节码时。例如,SomeClass f = new SomeClass();· 当字节码静态引用一个类时。例如,System.out。Java类何时以及如何初始化?首次使用类中的符号时,将初始化该类。加载类时,不会对其进行初始化。JVM将...