<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      Fork me on GitHub

      一個java文件被執行的歷程

      學習java以來,都是以語法,類庫入手,最基本的也是最基礎的java編譯過程往往被我遺忘,先解釋一下學習java第一課時,都聽到過的一句話,“java是半解釋語言”。什么是半解釋語言。

      Java的編譯過程

      Java程序從源文件創建到程序運行要經過兩大步驟

      1、源文件由編譯器編譯成字節碼(ByteCode)

      2、字節碼由java虛擬機解釋運行。因為java程序既要編譯同時也要經過JVM的解釋運行,所以說Java被稱為半解釋語言( "semi-interpreted" language)。

      一個栗子

      下面我們通過一個簡單的 OneTest.java,來看一下一個java文件從編譯到運行的歷程。

      Public class OneTest{
          public static void main(String[] args){
                Person one = new Person();
                 one.say();
          }
      }
      Public class Person{
          private String name;
      
          public void say(){
             System.out.println("I `m a Person");
         }
      }

      這里是兩個java文件,分別是OneTest.java,Person.java

      第一步

      首先是編譯階段,由JVM編譯器,將OneTest.java文件進行編譯,得到字節碼文件(OneTest.class),這里我們發現,OneTest.java中依賴了Person對象,也就是需要Person.java文件,編譯器便會檢索Persion.java是否被編譯(是否存在Person.class),若不存在,則先編譯Person.java,java編譯一個類時,如果這個類所依賴的類還沒有被編譯,編譯器會自動的先編譯這個所依賴的類,然后引用。

      1、如果java編譯器在指定的目錄下找不到該類所依賴的類的 .class文件或者 .java源文件,就會報 “Cant found sysbol”的異常錯誤。

      2、編譯后的字節碼文件格式主要分為兩部分:常量池和方法字節碼。
      常量池記錄的是代碼出現過的常量、類名、成員變量(Person.java中的類Person名、name成員變量)等以及符號引用(類引用、方法引用(OneTest.java中的person.say),成員變量引用等);方法字節碼中放的是各個方法的字節碼。

      第二步

      然后進行解釋運行階段,這里運行階段分為兩步:類的加載類的執行

      JVM主要在程序第一次主動使用類的時候,才會去加載該類。也就是說,JVM并不是在一開始就把一個程序就所有的類都加載到內存中,而是到不得不用的時候才把它加載進來,而且只加載一次。

      1、OneTest類的加載:在類路徑下找到編譯好的 java 程序中;得到 OneTest.class 字節碼文件后,系統就會啟動一個 JVM 進程,JVM進程從classpath路徑下找到一個名為OneTest.class的二進制文件,將OneTest.class文件中的類信息加載到運行時數據區的方法區中,這一過程叫做類的加載。(只有類信息在方法區中,才能創建對象,使用類中的成員變量)關于類的加載器

       

      2、運行OneTest.java中的main方法:main函數的第一條命令是Persion  person = new Person();就是讓JVM創建一個Person對象,但是這時候方法區中沒有Person類的信息,所以JVM馬上加載Person類,把Person類的類型信息放到方法區中。

      3、加載完Person類之后,Java虛擬機做的第一件事情就是在堆區中為一個新的Person實例分配內存, 然后調用構造函數初始化Person實例,這個Person實例持有著指向方法區的Person類的類型信息(其中包含有方法表,java動態綁定的底層實現)的引用

      4、當使用person.say()的時候,JVM根據person引用找到Person對象,然后根據Person對象持有的引用定位到方法區中Person類的類型信息的方法表,獲得say()函數的字節碼的地址。

      5、執行say方法。

       

       

       

      posted @ 2020-12-17 10:12  糖拌西紅柿  閱讀(939)  評論(5)    收藏  舉報
      主站蜘蛛池模板: 人妻体内射精一区二区三区| 亚洲高清aⅴ日本欧美视频| 精品国产AⅤ无码一区二区| 亚洲一区成人在线视频| 人妻丝袜无码专区视频网站| 欧美成人精品三级在线观看| 日韩人妻无码精品久久| 欧洲中文字幕一区二区| 亚洲欧洲日韩精品在线| 亚洲国产性夜夜综合| 免费现黄频在线观看国产| 97色伦97色伦国产| 国产成年码AV片在线观看| 亚洲日韩亚洲另类激情文学| 国产香蕉尹人在线视频你懂的| 久久亚洲美女精品国产精品 | 人人澡人摸人人添| 国产又色又刺激高潮视频| 国产精品夜夜春夜夜爽久久小说| 少妇无码AV无码专区| 久久久久无码中| 狠狠综合久久综合88亚洲爱文| 麻豆久久天天躁夜夜狠狠躁| 日韩黄色av一区二区三区| 国产精品 视频一区 二区三区| 闽侯县| 九九热精品在线视频观看| 成人做受120秒试看试看视频| 四虎影视4hu4虎成人| 国内精品伊人久久久久影院对白| 国产精品一区二区日韩精品| 久久91精品牛牛| 大香伊蕉在人线国产最新2005| 国产95在线 | 欧美| 国产一卡2卡三卡4卡免费网站| 99久久99久久久精品久久| A三级三级成人网站在线视频| 国产午夜精品福利91| 蜜臀av一区二区三区在线| 亚洲人妻系列中文字幕| 国产线播放免费人成视频播放|