Java 徹底貫徹面向對象,甚至程序本身也是對象。核心三步:定義類 → 創建對象 → 發送消息。
引用如遙控器,對象如電視。聲明引用不創建對象:
String s; // 僅引用,指向 null
String s = new String("asdf"); // new 創建對象並賦值給引用
class DataOnly {
int i;
float f;
boolean b;
}
DataOnly d = new DataOnly();
d.i = 47; d.f = 1.1f; d.b = false; // 通過點號訪問成員
默認初始化:類成員(字段)為基本類型時,Java 保證默認值(0、false、null);但局部變量無默認值,使用前必須顯式初始化,否則編譯報錯(C++ 僅警告)。
import java.util.ArrayList; // 具體導入
import java.util.*; // 通配符導入,便利但稍增編譯時間
static 成員屬於類,無需對象即可調用:
class StaticTest { static int i = 47; }
StaticTest st = new StaticTest();
st.i == StaticTest.i; // 同一內存區域
class StaticFun { static void incr() { StaticTest.i++; } }
StaticFun sf = new StaticFun();
sf.incr() == StaticFun.incr(); // 效果相同
Java 數組保證初始化(引用數組元素默認 null),運行時邊界檢查,杜絕越界訪問(C/C++ 數組僅是內存塊,極易出錯)。
C/C++ 允許內層作用域遮蔽外層同名變量;Java 禁止,認為易導致混淆:
{ int x = 1; { int x = 2; } } // Java 編譯錯誤
無需手動銷毀對象。GC 監控所有 new 創建的對象,無引用指向時自動回收內存,徹底解決內存洩漏與釋放時機難題。
採用反轉域名作為包前綴(如 com.bruceeckel.utility),映射到目錄結構,構建全局唯一命名空間,徹底解決名稱衝突(C++ 需 namespace 輔助)。