測試類加載的全過程
創(chuàng)新互聯(lián)建站專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、五大連池網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、成都h5網(wǎng)站建設、商城系統(tǒng)網(wǎng)站開發(fā)、集團公司官網(wǎng)建設、外貿(mào)網(wǎng)站建設、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為五大連池等各大城市提供網(wǎng)站開發(fā)制作服務。
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(); //第二次只會調(diào)用構(gòu)造器,不會調(diào)用靜態(tài)方法,類的加載和初始化只有一次
System.out.println(A.common); //調(diào)用類里的常量時,并不會初始化該類,常量被放在常量池里
Class.forName("cn.sxt.in.A"); //反射調(diào)用類,也會加載靜態(tài)方法
A[] a=new A[10]; //創(chuàng)建類的數(shù)組,不會初始化類
System.out.println(B.common); //子類調(diào)用父類的常量,不會初始化本身和父類
System.out.println(B.width); //子類調(diào)用父類非常量,則只會初始化父類
}
}
class A extends A_father{
public static int width=100;
public static final int common=10;
//創(chuà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");
}
}