今天閱讀《Java程式思想(第4版中文版)》,剛複習到類別中成員的初始化這一知識點。為了加深印象和給其他人一點參考,參考書中範例並加以修改得到以下程式碼:
檔名:HelloWorld.java
套件名稱:main
package main; class Bowl { Bowl(int marker){ System.out.println("Bowl("+marker+")"); } void f1(int marker){ System.out.println("f1("+marker+")"); } } class Table{ static Bowl bowl1 = new Bowl(1); public Table() { System.out.println("Table()"); bowl2.f1(1); } void f2 (int marker){ System.out.println("f2("+marker+")"); } static Bowl bowl2 = new Bowl(2); } class Cupboard{ { System.out.println("Cupboard类普通代码块执行"); } Bowl bowl3 = new Bowl(3); // 注意,此处不是静态成员 static Bowl bowl4 = new Bowl(4); static{ System.out.println("Cupboard类静态代码块执行"); } public Cupboard() { // TODO Auto-generated constructor stub System.out.println("Cupboard()"); bowl4.f1(2); } void f3(int marker){ System.out.println("f3("+marker+")"); } static Bowl bowl5 = new Bowl(5); } public class HelloWorld { public static void main(String args[]){ System.out.println("Creating new Cupboard() in main"); new Cupboard(); table.f2(1); cupboard.f3(1); } static Table table = new Table(); static Cupboard cupboard = new Cupboard(); }
下面讓我們來分析一下該程式的運行。
1. 首先java虛擬機器要執行main方法,必須先載入類別HelloWorld
2. 發現類別HelloWorld中含有靜態資料(只有靜態成員),開始初始化靜態成員
首先
【1】 static Table table = new Table(); 所以需要載入Table類別。發現該類別含有靜態成員,根據定義的先後順序執行初始化操作
【2】static Bowl bowl1 = new Bowl(1); 輸出:Bowl(1)
【3】 static Bowl bowl2 = new Bowl( 2); 輸出:Bowl(2)
【4】建構子Table(),輸出:Table()和f1(1)
其次
【1】 static Cupboard cupboard = new Cupboard(); 所以需要載入Cupboard類別。發現該類別含有靜態資料(包括靜態成員和靜態程式碼區塊),根據二者定義的先後順序執行初始化操作
【2】 static Bowl bowl4 = new Bowl(4); 輸出:Bowl(4)
【3】
static{
System.out.println("Cupboard類別靜態程式碼區塊執行");
}
ic輸出:Cupboard類別執行程式碼區塊執行程式碼區塊執行Bowl bowl5 = new Bowl(5); 輸出:Bowl(5)
靜態成員初始化後,透過new產生
物件。發現類別中含有成員定義時賦值與普通程式碼區塊,根據二者定義的先後順序執行初始化操作【1】
{
System.out.println("Cupboard類別普通程式碼區塊執行" );
}
輸出:Cupboard類別普通程式碼區塊執行
【2】 Bowl bowl3 = new Bowl(3); 輸出:Bowl(3)
【3】 建構子Cupboard(),建構子 程式碼輸出:Cupboard()和f1(2)
【1】 System.out.println("Creating new Cupboard() in main"); 輸出:Creating new Cupboard( ) in main
【2】 new Cupboard(); 發現Cupboard類別中含有成員定義時賦值和普通程式碼區塊,根據二者定義的先後順序執行初始化操作,輸出:Cupboard類別普通程式碼區塊執行和Bowl( 3)
【3】建構子Cupboard(),輸出:Cupboard()和f1(2)
【4】 table.f2(1); 輸出:f2(1)
【5】 cupboard .f3(1); 輸出:f3(1)
綜上所述,程式的輸出結果為:
Bowl(1)
Bowl(2)
Table()
f1 (1)
Bowl(4)
Cupboard類別靜態程式碼區塊執行
Bowl(5)
Cupboard類別普通程式碼區塊執行
Bowl(3)
Cupboard()
f1(2)
Creating new Cupboard() in main
Cupboard類別普通程式碼區塊執行
Bowl(3)
Cupboard()
f1(2)
f2(1 )
f3(1)
建構方法初始化#
以上是Java類別的靜態成員、靜態程式碼區塊、普通成員、普通程式碼區塊、建構方法初始化執行的順序詳細說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JVMmanagesgarbagecollectionacrossplatformseffectivelybyusingagenerationalapproachandadaptingtoOSandhardwaredifferences.ItemploysvariouscollectorslikeSerial,Parallel,CMS,andG1,eachsuitedfordifferentscenarios.Performancecanbetunedwithflagslike-XX:NewRa

Java代碼可以在不同操作系統上無需修改即可運行,這是因為Java的“一次編寫,到處運行”哲學,由Java虛擬機(JVM)實現。 JVM作為編譯後的Java字節碼與操作系統之間的中介,將字節碼翻譯成特定機器指令,確保程序在任何安裝了JVM的平台上都能獨立運行。

Java程序的編譯和執行通過字節碼和JVM實現平台獨立性。 1)編寫Java源碼並編譯成字節碼。 2)使用JVM在任何平台上執行字節碼,確保代碼的跨平台運行。

Java性能与硬件架构密切相关,理解这种关系可以显著提升编程能力。1)JVM通过JIT编译将Java字节码转换为机器指令,受CPU架构影响。2)内存管理和垃圾回收受RAM和内存总线速度影响。3)缓存和分支预测优化Java代码执行。4)多线程和并行处理在多核系统上提升性能。

使用原生庫會破壞Java的平台獨立性,因為這些庫需要為每個操作系統單獨編譯。 1)原生庫通過JNI與Java交互,提供Java無法直接實現的功能。 2)使用原生庫增加了項目複雜性,需要為不同平台管理庫文件。 3)雖然原生庫能提高性能,但應謹慎使用並進行跨平台測試。

JVM通過JavaNativeInterface(JNI)和Java標準庫處理操作系統API差異:1.JNI允許Java代碼調用本地代碼,直接與操作系統API交互。 2.Java標準庫提供統一API,內部映射到不同操作系統API,確保代碼跨平台運行。

modularitydoesnotdirectlyaffectJava'splatformindependence.Java'splatformindependenceismaintainedbytheJVM,butmodularityinfluencesapplicationstructureandmanagement,indirectlyimpactingplatformindependence.1)Deploymentanddistributionbecomemoreefficientwi

BytecodeinJavaistheintermediaterepresentationthatenablesplatformindependence.1)Javacodeiscompiledintobytecodestoredin.classfiles.2)TheJVMinterpretsorcompilesthisbytecodeintomachinecodeatruntime,allowingthesamebytecodetorunonanydevicewithaJVM,thusfulf


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver CS6
視覺化網頁開發工具