最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單了解Java程序運行整體流程

 更新時間:2020年07月03日 16:03:41   作者:Tim_Bergling  
這篇文章主要介紹了簡單了解Java程序運行整體流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

概述

Java程序從創(chuàng)建源文件到程序運行要經(jīng)歷兩個主要步驟:

  • 源文件 編譯器編譯> 字節(jié)碼文件(ByteCode)。
  • 字節(jié)碼文件 JVM解釋運行> 在內存中運行

Java程序從編譯到運行

示例程序:

public class ClassA{
  public static void main(String[] args){
    ClassB b = new ClassB("b");
    b.method();
  }
}

class ClassB{
  private String name;
  public ClassB(String name){
    this.name = name;
  }
  
  public void method(){
    System.out.println("ClassB method()");
  }

}

編譯

  • 源文件被編譯成.class文件。
  • 若一個類所依賴的類還沒有編譯,則先編譯被依賴的類,然后引用。
  • 若已編譯,則直接引用。
  • 若找不到指定類的文件,則拋出cannot find symbol錯誤。
  • 編譯后生成的字節(jié)碼文件由兩部分組成:
    • 常量池:代碼中的所有token(類名,成員變量名)和符號引用(方法引用,成員變量引用)
    • 方法字節(jié)碼:類中各個方法的字節(jié)碼。

運行

Java類的運行過程:

  • 類的加載
  • 類的執(zhí)行

注:

JVM在程序第一次主動使用類的時候才加載類,而不是一開始將所有的類都加載到內存中,只加載一次。

詳細步驟:

  • 系統(tǒng)啟動一個JVM進程,JVM從classpath路徑中查找對應的字節(jié)碼文件,將對應的類信息加載到運行時數(shù)據(jù)區(qū)的方法區(qū)內(類的加載)。
  • JVM找到類的主函數(shù)入口,執(zhí)行main函數(shù)。
  • 若需創(chuàng)建對象,而方法區(qū)沒有該類的信息,則加載對應的類,并把類信息放入方法區(qū)。
  • 加載所需的類后,JVM在堆區(qū)中為實例對象分配內存,并調用構造函數(shù)初始化實例。(該實例有指向方法區(qū)對應類的類信息的引用)
  • 當調用實例的方法時,JVM由對象引用找到堆中的對象,再由對象持有的引用定位到方法區(qū)中類的類型信息的方法表,從而獲得待調用函數(shù)的字節(jié)碼的地址。
  • 開始執(zhí)行調用的函數(shù)。

注:

  • public和protected的實例方法采用動態(tài)綁定機制:要用到方法表。
  • private,static,構造器和初始化方法采用靜態(tài)綁定機制:不需要方法表。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java中ArrayList和LinkedList之間的區(qū)別_動力節(jié)點Java學院整理

    Java中ArrayList和LinkedList之間的區(qū)別_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了Java中ArrayList和LinkedList之間的區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Mybatis-plus動態(tài)條件查詢QueryWrapper的使用案例

    Mybatis-plus動態(tài)條件查詢QueryWrapper的使用案例

    mybatis-plus框架功能很強大,把很多功能都集成了,下面這篇文章主要給大家介紹了關于Mybatis-plus動態(tài)條件查詢QueryWrapper的使用教程,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • Springboot Druid 自定義加密數(shù)據(jù)庫密碼的幾種方案

    Springboot Druid 自定義加密數(shù)據(jù)庫密碼的幾種方案

    這篇文章主要介紹了Springboot Druid 自定義加密數(shù)據(jù)庫密碼的步驟,幫助大家更好的理解和使用springboot,感興趣的朋友可以了解下
    2020-12-12
  • Spring容器刷新prepareRefresh第一步

    Spring容器刷新prepareRefresh第一步

    這篇文章主要為大家介紹了Spring容器刷新prepareRefresh第一步示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Struts2的輸入校驗實例代碼

    Struts2的輸入校驗實例代碼

    這篇文章主要介紹了Struts2的輸入校驗實例代碼,非常不錯,具有參考借鑒價值, 需要的朋友可以參考下
    2017-03-03
  • 如何避免在Java項目里大批量使用if-else?

    如何避免在Java項目里大批量使用if-else?

    想起剛開始接觸JAVA時,若遇到大量流程判斷語句,幾乎滿屏都是if-else語句,多得讓自己都忘了哪里是頭,哪里是尾,但是,縱然滿屏是if-else,但彼時也沒有覺得多別扭.等到編程能力漸漸提升之后,再回過頭去看曾經(jīng)寫過的滿屏if-else時,感覺全都是翔.....,需要的朋友可以參考下
    2021-06-06
  • Java之SpringBoot集成ActiveMQ消息中間件案例講解

    Java之SpringBoot集成ActiveMQ消息中間件案例講解

    這篇文章主要介紹了Java之SpringBoot集成ActiveMQ消息中間件案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • Servlet簡單實現(xiàn)登錄功能

    Servlet簡單實現(xiàn)登錄功能

    這篇文章主要為大家詳細介紹了Servlet簡單實現(xiàn)登錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • MyBatis?詳細講解動態(tài)?SQL的使用

    MyBatis?詳細講解動態(tài)?SQL的使用

    動態(tài)?SQL?是?MyBatis?的強大特性之一。如果你使用過?JDBC?或其它類似的框架,你應該能理解根據(jù)不同條件拼接?SQL?語句有多痛苦,例如拼接時要確保不能忘記添加必要的空格,還要注意去掉列表最后一個列名的逗號。利用動態(tài)?SQL,可以徹底擺脫這種痛苦
    2022-04-04
  • Springmvc國際化自動配置代碼實現(xiàn)

    Springmvc國際化自動配置代碼實現(xiàn)

    這篇文章主要介紹了Springmvc國際化自動配置代碼實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04

最新評論

华池县| 阜平县| 祁阳县| 咸丰县| 淮阳县| 伊宁县| 崇仁县| 仪征市| 鲁山县| 鲁山县| 河东区| 陇西县| 横峰县| 西青区| 增城市| 文化| 南汇区| 宣城市| 甘谷县| 咸阳市| 乐都县| 沂南县| 文成县| 温泉县| 宜都市| 西和县| 如皋市| 宁明县| 大化| 顺昌县| 鄂伦春自治旗| 睢宁县| 浦东新区| 晋宁县| 边坝县| 台南市| 建平县| 南召县| 湛江市| 乐东| 青神县|