欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Java中類加載過程全面解析

類文件加載的順序

為錦屏等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及錦屏網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計、網(wǎng)站制作、錦屏網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

1、先加載執(zhí)行父類的靜態(tài)變量及靜態(tài)初始化塊(執(zhí)行先后順序按排列的先后順序)

2、再加載執(zhí)行本類的靜態(tài)變量及靜態(tài)初始化塊

只要類沒有被銷毀,靜態(tài)變量及靜態(tài)初始化塊只會執(zhí)行1次,后續(xù)再對該類進行其他操作也不會再執(zhí)行這兩個步驟。

類實例創(chuàng)建過程

只有在調(diào)用new方法時才會創(chuàng)建類的實例

1、按照上面類文件加載的順序(類已被加載則跳過此步)

2、父類的非靜態(tài)變量及非靜態(tài)初始化塊

3、父類的構(gòu)造方法

4、本類的非靜態(tài)變量及非靜態(tài)初始化塊

5、本類的構(gòu)造方法

4、類實例銷毀時候,首先銷毀子類部分,再銷毀父類部分

靜態(tài)方法和非靜態(tài)方法都是被動調(diào)用

即系統(tǒng)不會自動調(diào)用執(zhí)行。所以用戶沒有調(diào)用時都不執(zhí)行,主要區(qū)別在于靜態(tài)方法可以直接用類名直接調(diào)用(實例化對象也可以),而非靜態(tài)方法只能先實例化對象后才能調(diào)用。

相關(guān)概念

static關(guān)鍵字:

是一個修飾符,用于修飾成員(成員變量和成員函數(shù))

被修飾后的成員具備以下特點:

隨著類的加載而加載(類一加載,靜態(tài)數(shù)據(jù)就立即在內(nèi)存中加載空間)

隨著類的消失而消失,說明它的生命周期最長

優(yōu)先于對象存在(對象消失了,static還在)

靜態(tài)先存在,對象后存在

被所有對象所共享

節(jié)約內(nèi)存空間

當成員被靜態(tài)修飾后,除了可以被對象調(diào)用外,還可以直接被類名調(diào)用

寫法:類名.靜態(tài)成員

使用注意

靜態(tài)方法只能訪問靜態(tài)成員(方法和變量)

非靜態(tài)方法既可以訪問靜態(tài)也可以訪問非靜態(tài)

靜態(tài)方法中不可以寫this,super關(guān)鍵字

因為靜態(tài)優(yōu)先于對象存在,所以靜態(tài)方法中不可以出現(xiàn)this

主函數(shù)是靜態(tài)的

publicstaticvoidmain(String[]args){}

何時使用靜態(tài)?

要從兩方面下手:因為靜態(tài)修飾的內(nèi)容有成員變量和函數(shù)。

何時定義靜態(tài)變量(類變量)

當對象中出現(xiàn)共享數(shù)據(jù)時,該數(shù)據(jù)被靜態(tài)所修飾。對象中的特有數(shù)據(jù)要定義成非靜態(tài)存在于堆內(nèi)存中。

何時定義靜態(tài)函數(shù)

當功能內(nèi)部沒有訪問到非靜態(tài)數(shù)據(jù)(對象特有數(shù)據(jù)),該功能可以定義成靜態(tài)。

靜態(tài)利弊

利:

1、對對象的共享數(shù)據(jù)單獨空間的存儲,節(jié)省空間。沒有必要每個對象都存儲一份。

2、可以直接被類名調(diào)用

弊:

1、生命周期過長

2、訪問出現(xiàn)局限性(只能訪問靜態(tài))

內(nèi)存結(jié)構(gòu)

Java程序在運行時,需要在內(nèi)存中的分配空間。為了提高運算效率,有對空間進行了不同區(qū)域的劃分,因為每一片區(qū)域都有特定的處理數(shù)據(jù)方式和內(nèi)存管理方式。

棧內(nèi)存

用于存儲局部變量當數(shù)據(jù)使用完,所占空間會自動釋放

堆內(nèi)存

數(shù)組和對象(實體),通過new建立的實例都存放在堆內(nèi)存中(成員變量隨著對象的建立而建立,存在于對象所在的堆內(nèi)存中)每一個實體都有內(nèi)存地址值(變量通過地址引用)實體中的變量都有默認初始化值實體不再被使用,會在不確定的時間內(nèi)被垃圾回收器回收(垃圾回收機制)

方法區(qū),本地方法區(qū),寄存器

驗證

加載順序父類靜態(tài)變量=1父類非靜態(tài)變量=1子類靜態(tài)變量=1子類非靜態(tài)變量=1
【父類調(diào)用父類靜態(tài)方法】Parent.pStaticMethod();   
父類靜態(tài)初始化塊一2   
父類靜態(tài)初始化塊二3   
父類靜態(tài)方法4   
【子類調(diào)用子類靜態(tài)方法】Child.cStaticMethod();   
子類靜態(tài)初始化塊一5 2 
子類靜態(tài)初始化塊二6 3 
子類靜態(tài)方法7 4 
【子類實例化】Child c=new Child();   
父類非靜態(tài)初始化塊一82  
父類非靜態(tài)初始化塊二93  
父類構(gòu)造方法104  
子類非靜態(tài)初始化塊一11552
子類非靜態(tài)初始化塊二12663
子類構(gòu)造方法13774
【父類實例化子類對象】Parent p=new Child();   
父類非靜態(tài)初始化塊一142  
父類非靜態(tài)初始化塊二153  
父類構(gòu)造方法164  
子類非靜態(tài)初始化塊一17582
子類非靜態(tài)初始化塊二18693
子類構(gòu)造方法197104
加載順序父類靜態(tài)變量=1父類非靜態(tài)變量=1子類靜態(tài)變量=1子類非靜態(tài)變量=1
【子類實例化】Child c=new Child();   
父類靜態(tài)初始化塊一2   
父類靜態(tài)初始化塊二3   
子類靜態(tài)初始化塊一4 2 
子類靜態(tài)初始化塊二5 3 
父類非靜態(tài)初始化塊一62  
父類非靜態(tài)初始化塊二73  
父類構(gòu)造方法84  
子類非靜態(tài)初始化塊一9542
子類非靜態(tài)初始化塊二10653
子類構(gòu)造方法11764
【父類實例化子類對象】Parent p=new Child();   
父類非靜態(tài)初始化塊一122  
父類非靜態(tài)初始化塊二133  
父類構(gòu)造方法144  
子類非靜態(tài)初始化塊一15572
子類非靜態(tài)初始化塊二16683
子類構(gòu)造方法17794
【父類調(diào)用父類靜態(tài)方法】Parent.pStaticMethod();   
父類靜態(tài)方法18   
【子類調(diào)用子類靜態(tài)方法】Child.cStaticMethod();   
子類靜態(tài)方法19 10 

public class ClassTest {  
  public static void main (String args[]) {
    System.out.println("【子類實例化】|Child c=new Child();");   
    Child c=new Child();
    System.out.println("【父類實例化子類對象】|Parent p=new Child();");    
    Parent p=new Child();
    System.out.println("【父類調(diào)用父類靜態(tài)方法】|Parent.pStaticMethod();");
    Parent.pStaticMethod();
    System.out.println("【子類調(diào)用子類靜態(tài)方法】|Child.cStaticMethod();");
    Child.cStaticMethod();
  }
}
public class ClassTest2 {  
  public static void main (String args[]) {
    System.out.println("【父類調(diào)用父類靜態(tài)方法】|Parent.pStaticMethod();");
    Parent.pStaticMethod();
    System.out.println("【子類調(diào)用子類靜態(tài)方法】|Child.cStaticMethod();");
    Child.cStaticMethod();
    System.out.println("【子類實例化】|Child c=new Child();");   
    Child c=new Child();
    System.out.println("【父類實例化子類對象】|Parent p=new Child();");    
    Parent p=new Child();
  }
}
public class Parent {
  // 父類靜態(tài)變量
  static int m = 1;  
  // 父類非靜態(tài)變量
  int n = 1;
 
  // 靜態(tài)語句塊1
  static {
    m++;
    // j++; 父類非靜態(tài)變量不能在靜態(tài)語句塊中使用
    System.out.println("父類靜態(tài)初始化塊一|" + m);
  }
  // 靜態(tài)語句塊2
  static {
    m++;
    System.out.println("父類靜態(tài)初始化塊二|" + m);
  }
 
  // 構(gòu)造函數(shù)
  public Parent() {
    m++;
    n++;
    System.out.println("父類構(gòu)造方法|" + m + "|" + n);
  }
 
  // 非靜態(tài)語句塊
  {
    m++;
    n++;
    System.out.println("父類非靜態(tài)初始化塊一|" + m + "|" + n);
  }
 
  // 非靜態(tài)語句塊
  {
    m++;
    n++;
    System.out.println("父類非靜態(tài)初始化塊二|" + m + "|" + n);
  }
 
  // 非靜態(tài)方法
  public void pMethod() {
    m++;
    n++;
    System.out.println("父類非靜態(tài)方法|" + m + "|" + n);
    return;
  }
 
  // 靜態(tài)方法
  public static void pStaticMethod() {
    m++;
//   j++; 父類非靜態(tài)變量不能在靜態(tài)方法中使用
    System.out.println("父類靜態(tài)方法|" + m);
    return;
  }
 
  @Override
  protected void finalize() throws Throwable {
    super.finalize();
    System.out.println("銷毀父類|");
  }
}
public class Child extends Parent {
  // 靜態(tài)變量
  static int i = 1;
  // 非靜態(tài)變量
  int j = 1;
 
  // 靜態(tài)語句塊1
  static {
    m++;
    i++;
    // j++; 非靜態(tài)變量不能在靜態(tài)語句塊中使用
    System.out.println("子類靜態(tài)初始化塊一 " + "|" + m + "||" + i);
  }
  // 靜態(tài)語句塊2
  static {
    m++;
    i++;
    System.out.println("子類靜態(tài)初始化塊二 " + "|" + m + "||" + i);
  }
 
  // 構(gòu)造函數(shù)
  public Child() {
    m++;
    n++;
    i++;
    j++;
    System.out.println("子類構(gòu)造方法 " + "|" + m + "|" + n + "|" + i + "|" + j);
  }
 
  // 非靜態(tài)語句塊
  {
    m++;
    n++;
    i++;
    j++;
    System.out.println("子類非靜態(tài)初始化塊一" + "|" + m + "|" + n + "|" + i + "|" + j);
  }
  // 非靜態(tài)語句塊
  {
    m++;
    n++;
    i++;
    j++;
    System.out.println("子類非靜態(tài)初始化塊二" + "|" + m + "|" + n + "|" + i + "|" + j);
  }
 
  // 非靜態(tài)方法
  public void pMethod() {
    m++;
    n++;
    i++;
    j++;
    System.out.println("子類繼承非靜態(tài)方法" + "|" + m + "|" + n + "|" + i + "|" + j);
    return;
  }
 
  // 靜態(tài)方法
  public static void pStaticMethod() {// 靜態(tài)方法不能被繼承
    m++;
    i++;
    // j++; 非靜態(tài)變量不能在靜態(tài)方法中使用
    return;
  }
 
  // 非靜態(tài)方法
  public void cMethod() {
    m++;
    n++;
    i++;
    j++;
    System.out.println("子類非靜態(tài)方法" + "|" + m + "|" + n + "|" + i + "|" + j);
    return;
  }
 
  // 靜態(tài)方法
  public static void cStaticMethod() {
    m++;
    i++;
    // j++; 非靜態(tài)變量不能在靜態(tài)方法中使用
    System.out.println("子類靜態(tài)方法 " + "|" + m + "||" + i);
    return;
  }
 
  @Override
  protected void finalize() throws Throwable {
    super.finalize();
    System.out.println("銷毀子類|");
  }
}

總結(jié)

以上就是本文關(guān)于Java中類加載過程全面解析的全部內(nèi)容,希望對大家有所幫助。如有問題可以隨時留言,小編會及時回復(fù)大家的。期待您的寶貴意見。

當前標題:Java中類加載過程全面解析
文章地址:http://aaarwkj.com/article30/gjoepo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、微信公眾號、移動網(wǎng)站建設(shè)、定制網(wǎng)站、關(guān)鍵詞優(yōu)化、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
久久亚洲精品中文字幕馆| 成人av在线天堂一区二区三区| 日韩精品中文字幕欧美激情| 一区二区三区熟妇人妻视频 | 久久国产精品一区二区三区| 日本国产一区二区三区在线| 一区二区三区日本在线观看| 日韩电影在线一本二本三本| 国产真实老熟女无套内| 日韩精品国产亚洲欧美| 欧美另类精品一区二区三区| 禁止未满十八在线观看| 亚洲精品成人久久av| 熟妇激情欧美在线播放视频| 欧美成人夫妻性生活视频| 亚洲日本va午夜中文字幕一区| 免费一区二区三区精品| 亚洲国产综合六月深深爱| 成人又黄又爽大片在线观看| 91狠狠综合久久精品| 五月婷婷六月丁香综合激情| 亚洲青涩精品一区二区三区| 蜜臀视频在线观看免费| 久久免费国产精品电影| 91人妻精品一区二区| 久久综激情丁香开心婷婷| 免费女性啪啪无遮挡网站| 亚洲国产免费一区二区| 国产又黄又爽不卡的视频| 草草影院最新地址在线观看| 日韩日美日韩av影视| 国产探花猛操性感美女| 国产精品99久久久久久| 中文国产人精品久久蜜桃| 邻居少妇扒开腿让我爽了一夜| 少妇欧美日韩精品在线观看| 日韩精品激情视频在线| 欧美日韩亚洲综合在线| 午夜少妇久久久久久久久| 成人黄网站色大片免费观看| 国产精品亚洲在钱视频|