java jvm 加载类的顺序_java JVM-类加载静态初始化块调用顺序
測試類加載的全過程
public class Have {
static {
System.out.println("加載Have");//先加載Have再調用main方法
}
public static void main(String[] args) throws Exception {
System.out.println("main方法"); //先調main方法
A a=new A(); //先初始化父類,再初始化子類
System.out.println(A.width);
A a2=new A(); //第二次只會調用構造器,不會調用靜態方法,類的加載和初始化只有一次
System.out.println(A.common); //調用類里的常量時,并不會初始化該類,常量被放在常量池里
//Class.forName("cn.sxt.in.A"); //反射調用類,也會加載靜態方法
//A[] a=new A[10]; //創建類的數組,不會初始化類
System.out.println(B.common); //子類調用父類的常量,不會初始化本身和父類
System.out.println(B.width); //子類調用父類非常量,則只會初始化父類
}
}
class A extends A_father{
public static int width=100;
public static final int common=10;
//創建對象時,會首先運行賦值動作和static塊內的內容
static {
System.out.println("靜態初始化類");
width=300;
}
public A(){
System.out.println("AAA");
}
}
class A_father{
static {
System.out.println("靜態初始化A的父類");
}
}
class B extends A{
static {
System.out.println("靜態初始化B");
}
}
總結
以上是生活随笔為你收集整理的java jvm 加载类的顺序_java JVM-类加载静态初始化块调用顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql乱码问题_mysql乱码问题
- 下一篇: 吃下去的东西老是往上翻上来_食管裂孔疝的