日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JVM_07 Class文件结构

發布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM_07 Class文件结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述(了解)

  • 字節碼文件的跨平臺性(了解)
  • ①. Java語言:跨平臺的語言

    • 當Java源代碼成功編譯為字節碼后,如果想在不同的平臺上運行,則無須再次編譯
    • 這個優勢不再那么吸引人了。Python PHP perl ruby lisp等有強大的解釋器
    • 跨平臺似乎已經快成為一門語言必須的特征

    ②.Java虛擬機:跨語言的平臺:
    (Java虛擬機不和包括java在內的任何語言綁定,它只與class文件這種二進制文件格式所關聯。無論使用何種語言進行軟件開發,只要將源文件編譯為正確的Class文件,那么這種語言就可以在Java虛擬機上執行,可以說,統一而強大的Class文件結構,就是Java虛擬機的基石、橋梁)

    ③. 想要讓一個Java程序正確地運行在JVM中,Java源碼就必須要編譯為符合JVM規范的字節碼

    • 前端編譯器的主要任務就是負責將符合Java語言規范的Java代碼轉換為符合JVM規范的字節碼文件
    • javac是一種能夠將Java源碼編譯為字節碼的前端編譯器
    • javac編譯器在將Java源碼編譯為一個有效的字節碼文件過程中經歷了4個步驟:分別是詞法解析、語法解析、語義解析以及生成字節碼

    二、Java的前端編譯器(了解)

    ①. 前端編譯器 vs 后端編譯器

    ②. 圖解:

    三、透過字節碼指令看代碼細節

    ①. Integer:透過字節碼可以看出,當Integer的范圍在-128 - +127 之間會在數組中直接拿取數值,超過這個范圍會重新new對象

    public class IntegerTest {public static void main(String[] args) {/** 透過字節碼可以看出,當Integer的范圍在-128 - +127 之間會在數組中直接拿取數值* 超過這個范圍會重新new對象* */Integer x = 5;int y = 5;System.out.println(x == y);Integer i1 = 10;Integer i2 = 10;System.out.println(i1 == i2);//trueInteger i3 = 128;Integer i4 = 128;System.out.println(i3 == i4);//false}

    ②. 在父類中調用方法,如果子類有重寫,那么調用的是子類的方法,如代碼中的this.print( )

    /* 成員變量(非靜態的)的賦值過程:① 默認初始化 -② 顯式初始化 /代碼塊中初始化 -③ 構造器中初始化 -④ 有了對象之后,可以“對象.屬性”或"對象.方法"的方式對成員變量進行賦值。*/ class Father {int x = 10;public Father() {this.print();x = 20;}public void print() {System.out.println("Father.x = " + x);} } class Son extends Father {int x = 30; // float x = 30.1F;public Son() {this.print();x = 40;}public void print() {System.out.println("Son.x = " + x);} }public class SonTest {public static void main(String[] args) {Father f = new Son();System.out.println(f.x);} }

    ③. 靜態變量隨著類的加載就加載了,在鏈接(準備階段)會為靜態變量賦予默認的初始化值,在初始化階段會顯示的賦值

    /* 輸出結果:父類的靜態成員屬性父類靜態代碼塊子類的靜態成員屬性子類靜態代碼塊父類構造方法子類構造方法 */ public class People {private final static String parentStaitc = "父類的靜態成員屬性";public static void main(String[] args) {People people = new Child();}public People() {System.out.println("父類構造方法");}static{System.out.println(parentStaitc);System.out.println("父類靜態代碼塊");} }class Child extends People {private final static String childStaitc = "子類的靜態成員屬性";public Child() {System.out.println("子類構造方法");}static{System.out.println(childStaitc);System.out.println("子類靜態代碼塊");} }

    四、class文件結構組織示意圖

    總結

    以上是生活随笔為你收集整理的JVM_07 Class文件结构的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。