class文件詳解
能夠被JVM識別,加載并執行的文件格式
1.通過IDE自動幫我們build。
2.手動通過javac去生成class文件。
記錄一個類文件的所有信息。
1.一種8位字節的二進制流文件
2.各個數據按順序緊密地排列,無間隙 (這樣做的好處可以減少class文件的體積,jvm加載我們class文件的時候更加快速)
3.每個類、接口和枚舉都單獨占據一個class文件(這樣做的好處是每個累接口等都可以獨自管理自己內部的內容而無需相互交叉)
整體文件格式:
格式詳解:
1.magic
無符號4字節,用來表示class文件的開頭,加密段,給虛擬機用來判斷當前的 class文件是否被串改過。
2.minor_version
class文件最小可以被哪個版本的jdk所加載,也就是最小適配的jdk
3.major_version
表示我們當前class文件是由哪個版本的jdk生成的。
4.constant_pool_count
class文件中常量池的數量,通常只有一個常量池。
5.constant_pool
代表常量池,類型為cp_info(結構體類型)。
常量池中主要包含的內容:
首先列舉三個比較簡單的
CONSTANT_Integer_info:存儲class文件中的int類型。
CONSTANT_Long_info:存儲class文件中的long類型。
CONSTANT_String_info:存儲class文件中的string類型。
它們分別存儲字節碼中的int、long、string類型,當然還有CONSTANT_Short_info、CONSTANT_Float_info等。
下面列舉幾個稍微復雜的
CONSTANT_Class_info:記錄類中相關的信息、不僅記錄了當前類的信息,還記錄了引用到的一些類的信息。
CONSTANT_Fieldref_info:記錄類中Field相關的信息。
CONSTANT_Methodref_info:記錄類中Method相關的信息。
這三個里面存儲的并不是真正的內容,都是一些索引,這些索引指向的又是CONSTANT_String_info等。
6.access_flags
表示class文件的作用域標志,比如:public 、public final
取值范圍:
7.this_class
this_class是指向constant pool的索引值,該值必須是CONSTANT_Class_info類型,指定當前字節碼定義的類或接口。
8.super_class
super_class是指向constant pool的索引值,該值必須是CONSTANT_Class_info類型,指定當前字節碼定義的類或接口的直接父類。只有Object類才沒有直接父類,此時該索引值為0。并且父類不能是final類型。接口的父類都是Object類。
9.interfaces_count
當前class文件直接實現的接口數量。
10.interfaces
當前class文件直接實現的接口,只記錄直接實現的,不會記錄間接實現的。
11.fields_count
class文件中成員變量的數量。
12.fields
class文件中所有的成員變量,field_info類型的結構體,該結構體中主要包含了每個成員變量的name、所屬的類以及類型。
13.methods_count
記錄class文件中方法的數量。
14.methods
記錄class文件中所有的方法,類型為method_info結構體類型,主要包含了方法的名字、類型、access_flags等信息。
15.attribute_count
記錄了class文件屬性的數量。
16.attributes
記錄class文件的一些屬性,除去上面的一些信息剩下的都包含在attributes中,比如 說注解。
1.內存占用大,不適合移動端。
2.堆棧的加載模式,加載速度慢。
3.文件IO操作多,類查找慢。
.class是什么文件啊?
class文件全名稱為Java class文件,主要在平臺無關性和網絡移動性方面使Java更適合網絡。它在平臺無關性方面的任務是:為Java程序提供獨立于底層主機平臺的二進制形式的服務。
該文件打破了C或者C++等語言所遵循的傳統,使用這些傳統語言寫的程序通常首先被編譯,然后被連接成單獨的、專門支持特定硬件平臺和操作系統的二進制文件。
擴展資料:
class文件徑打破了C或者C++等語言所遵循的傳統,使用這些傳統語言寫的程序通常首先被編譯,然后被連接成單獨的、專門支持特定硬件平臺和操作系統的二進制文件。
通常情況下,一個平臺上的二進制可執行文件不能在其他平臺上工作。而Java class文件是可以運行在任何支持Java虛擬機的硬件平臺和操作系統上的二進制文件。
JAVA中.class文件是什么意思?有什么用嗎?
JAVA中.class文件是什么意思,有什么用嗎,解決辦法:
JAVA中*.java這樣的文件是用java語言編寫的源文件。
經過編譯會變成相應的 *.class 文件 *.class 文件。
有一處編譯到處運行的特點(即windows生成的class 可以在 linux系統中運行)。
注:這個*.class 不是類似于 *.exe這樣的可執行文件只能被java虛擬機執行。
class文件怎么打開
先知道打開class文件有兩種方法《1》第一種方法是筆記本打開《2》第二種方法使用eclip軟件打開
2.
第一種方法==》筆記本打開右鍵鍵---選擇打開或者打開方式----選擇筆記本打開即可
3.
第二種方法就是使用eclip軟件打開
4.
1,先是在搜狗搜索中下載eclip軟件軟件一個
5.
2,然后,就是安裝eclip軟件,基本都是下一步,下一步的。
6.
3,最后,就是使用eclip軟件打開class文件即可
.class文件為java類文件,用DJ Java Decompiler可以打開。
java類文件,裝了java虛擬機可以直接執行
可以使用反編譯工具進行反匯編,可以獲得.class文件的.java源代碼文件.反編譯工具有如下:
DJ Java Decompiler V3.9.9.91
DJ Java Decompiler 是個反編譯的工具,可以將編譯過的CLASS文件編譯還原成為Java原始文件,并且不需要額外安裝JVM(Java Virtual Machine)或是Java SDK的工具模組即可使用。不單如此,DJJava Decompiler也兼具有Java程序編輯工具的角色,提供一些輔助功能便于程序撰寫與修改。
軟件名稱: DJ Java Decompiler
軟件版本: 3.12.12.96
軟件大小: 358KB
軟件授權: 免費
適用平臺: WinNT Win9X Win2000
下載地址: //dl.pconline.com.cn/html_2/1/79/id=2595&pn=0.html
.class 和 .java 區別
區別在于:
.java文件是源文件,通過javac命令編譯后生成.class文件;.class文件是字碼結文件,即.java文
件編譯后的代碼。
2. .class文件全名稱為Java class文件,主要在平臺無關性和網絡移動性方面使Java更適合網絡。
它在平臺無關性的任務是為Java程序提供獨立于底層主機平臺的二進制形式的服務。
擴展資料:
源文件:一般指用匯編語言或高級語言寫出來的代碼保存為文件后的結果,源文件是相對目標文件和可執行文件而言的。源文件就是用匯編語言或高級語言寫出來的代碼保存為文件后的結果。
Java:是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。
Java之父“高司令”:他是比爾蓋茨的噩夢,他用他的大胡子讓蓋茨的微笑變得十分勉強,他是技術的先驅,他技術成果覆蓋了100億臺設備,除了蘋果,沒有什么手機不用向他致敬;他就是高斯林,Java的締造者。作為Java編程語言的共同創始人之一,中國的程序員們在膜拜這位公認的Java之父同時,親昵的用中文諧音“高司令”來表達出對他的多重敬意。
參考資料:
百度百科-源文件
百度百科-Java
百度百科-Java之父“高司令”
class文件是什么意思
java源文件通過編譯產生的類文件。Java程序(class文件)并不是本地的可執行程序。當運行Java程序時,首先運行JVM(Java虛擬機),然后再把Java
class加載到JVM里頭運行,負責加載Java
class的這部分就叫做Class
Loader。因為你寫的源文件計算機是看不懂,必須翻譯成計算機能看懂的形式。