Java 是語言規範;JDK (J2SDK) 是 Sun 官方開發工具包,含編譯器、運行時、類庫;版本號如 1.3、1.4.2 表示 JDK 迭代版本(後統一為 Java 5/6/7...)。
JRE 只含運行環境(JVM+核心類庫),適合最終用戶;JDK 含 JRE + 開發工具,開發者必裝。切勿用 IE 自帶 VM 運行 Applet。
階段 1:JDK + 文本編輯器(記事本/EditPlus/Notepad++),強制理解 path、classpath、package、javac/java 命令。
階段 2:Eclipse(免費、強大、生態豐富),熟練後再用 IDEA。
首推《Thinking in Java》(Java 編程思想),第一章講透 OO 思想。O'Reilly、Wrox 出版社書籍質量高。必須適應英文文檔:API、官方教程、技術博客多為英文。
錯誤提問。正確問:哪個更適合我的項目? 需跨平台、分佈式、開發效率優先 → Java;極致性能、底層控制、單平台 → C++。
J2SE = 標準版(桌面/服務端基礎);J2EE = 企業版規範(Servlet、EJB、JMS 等,針對應用服務器);J2ME = 微型版(嵌入式/手機,獨立 SDK)。
源碼 → javac Hello.java → 生成 Hello.class → java Hello 運行。
報 javac 不是內部命令 → 配置 JAVA_HOME 指向 JDK 目錄,Path 加入 %JAVA_HOME%\bin,重開 CMD。
類加載路徑。未設置 classpath 時默認當前目錄;若設置了須包含 .(當前目錄)。包機制下,類文件必須按包路徑存放(如 package1/Class1.class),在根目錄編譯運行。
單文件單 public 類,類名=文件名;public static void main(String[] args) 簽名固定。
包用於唯一標識類(全名如 java.lang.String)和邏輯分組。源碼首行聲明 package pkg;,目錄結構對應包層級。import 可用 pkg.Class 或 pkg.*。無包聲明屬默認包。
JDK 只產出跨平台字節碼 .class。第三方工具可打包 exe 但喪失跨平台性。純 Windows 场景建議直接用 C#/C++。
標記過時但保留兼容,未來可能移除。查 API 文檔替換為新方法。
main(String[] args) 接收參數。運行 java Class -arg1 -arg2,args 即為 ["-arg1", "-arg2"]。
// 輸入
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String s = in.readLine();
int n = Integer.parseInt(s);
// 輸出
PrintWriter out = new PrintWriter(System.out);
out.println("Hello");
out.flush();
System.in/out 是字節流,處理中文等雙字節字符會亂碼。需包裝為字符流(Reader/Writer)。
文件讀寫同理,換成 FileReader/FileWriter。隨機訪問用 RandomAccessFile。read() 返回 -1 表示流結束。
Java 無宏(類型不安全),常量用 static final。const 是保留字。
結構化編程足矣。多層循環跳出用標籤:outer: while(...) { inner: for(...) { break outer; } }。goto 為保留字。
僅 String 的 + 為內置重載。自定義類通過方法實現(如 add())。
對象創建後無需手動銷毀,JVM 垃圾收集器自動管理內存,杜絕指針錯誤。
public:JVM 外部調用入口;static:無需實例化類即可調用,屬於類而非對象。static 成員被所有實例共享。