Java編譯後產生class檔案的命名規則 - 程式人生
文章推薦指數: 80 %
今天剛好有同學問了下Java編譯後產生的.class檔名的問題,雖然一直都在使用Java做開發,但是之前對編譯後產生的.class檔名的規範也基本沒做了解過,也 ...
程式人生>>Java編譯後產生class檔案的命名規則
Java編譯後產生class檔案的命名規則
阿新••發佈:2018-12-31
今天剛好有同學問了下Java編譯後產生的.class檔名的問題,雖然一直都在使用Java做開發,但是之前對編譯後產生的.class檔名的規範也基本沒做了解過,也真的是懺愧啊!今天無論如何都要總結下。
下面是本人今天做的實驗
%26nbsp;
1、建立類ClassA,觀察產生的.class檔案。
目的是測試沒有任何繼承、實現類以及內部類等情況下產生的.class檔案以及命名規則
實驗結果:
從下圖可以看出,只產生了一個.class檔案,檔名為類名.class
%26nbsp;
2、建立類ClassB,觀察產生的.class檔案。
目的是測試有實現介面類情況下產生的.class檔案以及命名規則
實驗結果:
從下圖可以看出,只產生了一個.class檔案,檔名為類名.class
%26nbsp;
3、建立類ClassC,觀察產生的.class檔案。
目的是測試有繼承父類情況下產生的.class檔案以及命名規則
實驗結果:
從下圖可以看出,只產生了一個.class檔案,檔名為類名.class
%26nbsp;
對以上3點做個小結:
從以上3個實驗來看,編譯後產生的.class檔案跟它所實現的介面、繼承的父類都沒有關係,在這些情況下,它都只產生一個.class檔案,而且檔名就是類名.class
4、建立類ClassD,定義了一個普通內部類ClassDd,觀察產生的.class檔案。
目的是測試有內部類情況下產生的.class檔案以及命名規則
實驗結果:
從下圖可以看出,產生了2個.class檔案,ClassD.class和ClassD$ClassDd.class。
這說明產生的.class檔案與內部類有關係。
外部類產生的檔案跟上面的3個實驗結果一樣,都是類名.class,而內部類,則採用了外部類名$內部類名.class,外部類和內部類名使用符號$隔開
注意:這裡的外部類都是相對而言
%26nbsp;
5、建立類ClassD,定義了一個普通內部類ClassDd,再在ClassDd定義它的內部類ClassDdd,觀察產生的.class檔案。
目的是測試有內部類情況下產生的.class檔案以及命名規則
實驗結果:
從下圖可以看出,產生了3個.class檔案,ClassD.class、ClassD$ClassDd.class、ClassD$ClassDd.class$ClassDdd.class。
這個實驗結果跟上面的第四個實驗是一樣的,只是這次的第2層內部類檔案是在第1層內部類的基礎上增加自己的類名。
注意:這裡的外部類都是相對而言
%26nbsp;
%26nbsp;
%26nbsp;
%26nbsp;
對第4和第5個實驗做下小結。
以上這兩點都是驗證有普通內部類情況下產生哪些.class檔案以及命名規則如何。
最後得出結論如下:
類個數:看定義類的個數,包括外部類和普通的內部類
.class檔名的命名規則:外部類名+$+內部類名+.class,即等於當層內部類以及每一層外部類的名字疊加,但是每個類之間使用符號$隔開
%26nbsp;
%26nbsp;
%26nbsp;
6、建立類ClassE,定義了一個匿名內部類,觀察產生的.class檔案。
目的是測試有匿名內部類情況下產生的.class檔案以及命名規則
實驗結果:
從下圖可以看出,產生了2個.class檔案,ClassE.class和ClassE$1.class。
其實這個實驗結果跟第4個實驗的結果相似,不同的是,內部類由於沒有名字,因此採用數字來表示。
這數字按照定義的匿名內部類的順序來一次增加的。
%26nbsp;
%26nbsp;
%26nbsp;
7、建立類ClassF,並在同一個.java檔案中定義另外一個類ClassFf,觀察產生的.class檔案。
目的是同一個.java檔案定義的類所產生的.class檔案情況
實驗結果:
同一個.java檔案定義的類所產生的.class檔案情況,符合上面上面驗證的規範。
%26nbsp;
%26nbsp;
%26nbsp;
%26nbsp;
最後總結:
1、編譯後產生的.class檔案個數:有多少個類,產生多少個.class檔案
%26nbsp;
2、.class檔案命名規則:
%26nbsp;%26nbsp;%26nbsp;2.1普通內部類
%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp;外部類名+$+內部類名%26nbsp;[+%26nbsp;$
+內部類名%26nbsp;+...]+%26nbsp;.class,類名之間使用符號$隔開
%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp;例如:ClassD$ClassDd$ClassDdd.class,這裡ClassDdd是對底層的普通內部類,它的父類ClassDd,而ClassDd的父類也是最外層的外部類ClassD
%26nbsp;%26nbsp;%26nbsp;2.2匿名內部類
%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp;外部類名+$+數字%26nbsp;[+%26nbsp;$
+%26nbsp;數字%26nbsp;+...]+%26nbsp;.class,類名之間使用符號$隔開,數字根據在外部類中定義的順序決定
%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp;例如:ClassE$1$1.class
%26nbsp;
3、同一個.java檔案中定義的其他非public宣告的類,都遵循以上2點規範
%26nbsp;
3、繼承、或者介面實現,不影響編譯產生的.class檔案個數和命名規則
%26nbsp;
美團點評筆試--拼湊錢幣
«上一篇
HttpClient4.5教程-第二章-連線管理下一篇»
相關推薦
Java編譯後產生class檔案的命名規則
今天剛好有同學問了下Java編譯後產生的.class檔名的問題,雖然一直都在使用Java做開發,但是之前對編譯後產生的.class檔名的規範也基本沒做了解過,...
log4j2.0以後版本的配置檔案命名規則
log4j是apache的一個開源專案,目前的版本已經更新到2.6.2,首先需要注意的是,log4j2.0以後...
Web前端開發規範:檔案命名規則
Web前端開發規範
1.檔案命名規則
1.1檔名稱的命名規則
統一用小寫的英文字母,數字和下劃線的...
電子研發公司_檔案命名規則、版本命名規則_建議
檔案命名規則
專案代號_檔案類別名_版本號_完成時間
| | ...
java原始檔編譯後產生bytecode(試題)(自己寫的解釋)
下列說法哪一個是正確的。
( B)
A.Java程式經編譯後會產生machinecodeB.Java程式經編譯後會產生bytecode...
如何減小編譯後可執行檔案的大小
CFLAGS+=-ffunction-sections-fdata-sectionsLDFLAGS+=-Wl,-...
【Java編譯】含package的類檔案編譯
含package的類檔案編譯:
packagecom.zhangxueliang.setdemo;
publicclassDemo1{
...
web專案釋出到tomcat中編譯後沒有classes檔案的原因
通常專案編譯釋出到tomcat中後會在WEB-INF下生成classes檔案,這裡麵包含的是編譯後的Java原始碼檔案!那麼...
Spring中的packagesToScan的方式配置hibernate的class檔案對映規則的理解
Spring中的packagesToScan的方式配置hibernate的class檔案對映規則的理解
 ...
Java程式的組織形式和命名規則
Java程式的組織形式:
Java程式是一個純粹的面向物件的語言,因此Java程式必須以類(class)的形式存在。
類(c...
搜尋
基礎教學
Mysql入門
Sql入門
Android入門
Docker入門
Go語言入門
Ruby程式入門
Python入門
Python進階
Django入門
Python爬蟲入門
最近訪問
延伸文章資訊
- 1查詢Java 程式的class 檔編譯的JVM 版本 - Tony Blog
Java 專案編譯的class 檔使用的版本,必須等於或小於執行環境的JVM 版本, ... more recent version of the Java Runtime (class fil...
- 2Java類檔案- 維基百科,自由的百科全書
Java類別檔案是一個包含Java位元組碼的可由Java虛擬機器執行的檔案(副檔名為.class)。Java類別檔案是由Java編譯器編譯包含Java類別的用Java語言編寫的原始檔(.java...
- 3【左京淳的JAVA學習筆記】第一章JAVA基礎 - iT 邦幫忙
一個java檔裡至少需有一個class(代表一個物件)。 · class名稱通常與檔名一致。 · public static void main(String[] args) {}這個方法稱為m...
- 4[Java] Class1 — Java運作原理&撰寫第一隻java程式
Java運作過程 · 原始碼(Source code / .java) eg: 以java語法了一個java class, 並存成.java檔。 · 編譯器(Compiler) 執行javac程...
- 5java 和.class 之間的區別| D棧
本文討論Java 中.java 和.class 副檔名之間的區別以及簡單的Java 程式如何執行。