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