一、走進(jìn)Java
Java是一個完整的平臺,有一個龐大的庫,其中包含了很多可重用的代碼和一個提供諸如安全性、跨操作系統(tǒng)的可移植性以及自動垃圾收集等服務(wù)的執(zhí)行環(huán)境。它是功能完善的通用程序設(shè)計語言,可以用來開發(fā)健壯的任務(wù)關(guān)鍵的應(yīng)用程序。現(xiàn)在,它不僅用于Web程序設(shè)計,而且用于在服務(wù)器、臺式計算機和移動設(shè)備上開發(fā)跨平臺的獨立應(yīng)用程序。
二、Java"白皮書"的關(guān)鍵術(shù)語
1) 簡單性
Java語法是C++語法的一個“純凈”版本。這里沒有頭文件、指針運算(甚至指針語法)、結(jié)構(gòu)、聯(lián)合、操作符重載、虛基類等。其剔除了C++中許多很少使用、難以理解、易混淆的特性。目前看來,這些特性帶來的麻煩遠(yuǎn)遠(yuǎn)多于其帶來的好處。
2) 面向?qū)ο?/h4>
簡單地講,面向?qū)ο笤O(shè)計是一種程序設(shè)計技術(shù)。傳統(tǒng)結(jié)構(gòu)化程序設(shè)計主要通過設(shè)計一系列的過程(即算法)來解決問題,即算法+數(shù)據(jù)結(jié)構(gòu)=程序,先要確定如何操作數(shù)據(jù),再決定如何組織數(shù)據(jù)使之便于操作。而面向?qū)ο蟪绦蛟O(shè)計將數(shù)據(jù)域(屬性)和對數(shù)據(jù)的操作(方法)綁定在一個對象中,將數(shù)據(jù)放在第一位,然后再考慮操作數(shù)據(jù)的算法。
3) 分布式
Java有一個豐富的例程庫,用于處理像HTTP和FTP之類的TCP/IP協(xié)議。Java應(yīng)用程序能通過URL打開和訪問網(wǎng)絡(luò)上的對象,其便捷程度就好像訪問本地文件一樣。
4) 健壯性
Java的設(shè)計目標(biāo)之一在于使得Java編寫的程序具有多方面的可靠性。Java投入了大量的精力進(jìn)行早期的問題檢測(編譯時檢測),后期動態(tài)的檢測(運行時檢測),并消除了容易出錯的情況。
5) 安全性
Java適用于網(wǎng)絡(luò)/分布式環(huán)境。為了達(dá)到這個目標(biāo),在安全方面投入了很大精力。使用Java可以構(gòu)建防病毒、防篡改的系統(tǒng)。
6) 體系結(jié)構(gòu)中立
Java源文件經(jīng)過編譯生成中間字節(jié)碼文件(.class),這是一種體系結(jié)構(gòu)中立的文件格式,精心設(shè)計的字節(jié)碼不僅可以很容易地在任何帶Java虛擬機(JVM)的平臺上運行,而且還可以動態(tài)地翻譯成本地機器代碼,即Java程序可以"一次編譯,處處運行"。當(dāng)然,解釋虛擬機指令肯定會比全速運行機器指令慢很多。虛擬機有一個選項,可以將執(zhí)行最頻繁的字節(jié)碼序列翻譯成機器碼,這一過程稱為即時編譯。
7) 可移植性
與C和C++不同,Java規(guī)范中沒有"依賴具體實現(xiàn)"的地方?;緮?shù)據(jù)類型的大小以及有關(guān)運算都做了明確的說明。例如,Java中的int永遠(yuǎn)是32位的整數(shù),而在C/C++中,int可能是16位整數(shù)、32位整數(shù),也可能是編譯器提供商指定的其他大小。唯一的限制只是int類型的大小不能低于short int,并且不能高于long int。在Java中,數(shù)據(jù)類型具有固定的大小,這消除了代碼移植時令人頭痛的主要問題。二進(jìn)制數(shù)據(jù)以固定的格式進(jìn)行存儲和傳輸,消除了字節(jié)順序的困擾。字符串是用標(biāo)準(zhǔn)的Unicode格式存儲的。
8) 解釋型
Java源程序(.java)在編寫完成后,經(jīng)過編譯生成中間字節(jié)碼文件(.class),字節(jié)碼文件被JVM解釋執(zhí)行,不同于C/C++等編譯型語言,字節(jié)碼被解釋為機器代碼后立即執(zhí)行,不產(chǎn)生中間機器代碼文件。
9) 高性能
盡管對解釋后的字節(jié)碼性能已經(jīng)比較滿意,但有些場合下還需要更加高效的性能。字節(jié)碼可以(在運行時刻)動態(tài)地翻譯成對應(yīng)運行這個應(yīng)用的特定CPU的機器碼。
10) 多線程
多線程可以帶來更好的交互響應(yīng)和實時行為。我們非常關(guān)注并發(fā)性,因為我們不再追求更快的處理器,而是著眼于獲得更多的處理器,而且要讓它們一直保持工作。Java是第一個支持并發(fā)程序設(shè)計的主流語言。
11) 動態(tài)性
Java能夠適應(yīng)不斷發(fā)展的環(huán)境。庫中可以自由地添加新方法和實例變量,而對客戶端卻沒有任何影響。在Java中找出運行時的類型信息十分簡單。
三、名詞釋疑
JDK
即Java開發(fā)工具包(Java Development Kit),是編寫Java程序的程序員使用的軟件,包括開發(fā)和運行Java程序的軟件。
OpenJDK
Java SE的一個免費開源實現(xiàn),不包含瀏覽器集成或JavaFX
SDK
即Software Development Kit,是一個過時的術(shù)語,用于描述1998 ~ 2006年之間的JDK
J2
一個過時的術(shù)語,用于描述1998 ~ 2006年之間的Java版本
JRE
即Java運行時環(huán)境(Java Runtime Environment),是運行Java程序的用戶使用的軟件,它包含Java虛擬機但不包含編譯器,為不需要開發(fā)只需要運行Java程序的用戶提供。
Sever JRE
在服務(wù)器上運行Java程序的軟件。
JVM
即Java虛擬機(Java Virtual Machine),用于解釋執(zhí)行中間字節(jié)碼文件。
API
即應(yīng)用程序接口(Application Program Interface),也稱為庫,包括為開發(fā)Java程序而預(yù)定義的類和接口。
IDE
即集成開發(fā)環(huán)境(Integrated Development Environment),是為了快速開發(fā)程序而提供的開發(fā)工具,編輯、編譯、鏈接、調(diào)試和在線幫助都集成在一個圖形用戶界面中。
applet
能在Web瀏覽器中運行的Java程序稱為Java小程序(applet)
Java SE
即Java標(biāo)準(zhǔn)版(Java Standard Edition),可以用來開發(fā)客戶端的應(yīng)用程序。應(yīng)用程序可以獨立運行或作為applet在Web瀏覽器中運行。
Java EE
即Java企業(yè)版(Java Enterprise Edition),可以用來開發(fā)服務(wù)器端的應(yīng)用程序,例如,Java servlet和JavaServer Pages(JSP),以及JavaServer Faces(JSF)。
Java ME
即Java微型版(Java Micro Edition),可以用來開發(fā)移動設(shè)備的應(yīng)用程序,例如手機。
JavaFX
開發(fā)Java GUI程序的框架,在Oracle的Java SE發(fā)布版本中提供。
四、JDK、JRE和JVM三者的關(guān)系
見大牛博客:JDK、JRE、JVM三者間的關(guān)系
五、創(chuàng)建、編譯和執(zhí)行Java程序的過程
Java源程序編寫后被保存為.java文件,通過Java編譯器編譯生成字節(jié)碼.class文件,字節(jié)碼文件和所需的庫代碼被送去JVM解釋執(zhí)行。在執(zhí)行一個Java程序時,JVM首先會用一個稱為類加載器(class loader)的程序?qū)㈩惖淖止?jié)碼加載到內(nèi)存中。如果你的程序中使用其他類,類加載程序會在需要它們之前動態(tài)地加載它們。當(dāng)加載該類后,JVM使用一個字節(jié)碼驗證器(bytecode verifier)的程序來檢驗字節(jié)碼的合法性,確保字節(jié)碼不會違反Java的安全規(guī)范,以確保來自網(wǎng)絡(luò)的Java程序不會篡改和危害你的計算機。

六、通過命令行編譯、運行Java程序
在命令行里輸入以下命令編譯Java程序:
javac classname.java
編譯成功后,使用以下語句運行程序:
java classname //注意此處不要加.class后綴
注意:如果提示命令不存在,應(yīng)該先配置環(huán)境變量,在path中用分號和前面的內(nèi)容分隔,然后加入jdk/bin的路徑,因為java.exe,javac.exe文件都在該目錄下。
七、注釋
1) 行注釋
行注釋以//開始,不能跨行
2) 塊注釋
塊注釋以/*開始,以*/結(jié)尾,可以跨行
3) 文檔注釋
文檔注釋以/**開始,以*/結(jié)尾,添加方法是輸入/**后回車即可,可以添加@author、@version等參數(shù),它能使用JDK的javadoc命令提取一個HTML文件(在控制臺輸入javadoc 文件名,然后會在執(zhí)行目錄下生成若干文件,打開index.html即可)。使用javadoc注釋來注釋整個類或整個方法,為了將這些注釋提取出來放在一個javadoc HTML文件中,這些注釋必須放在類或者方法頭前面。要注釋方法中的某一步驟,使用行注釋//
更多文檔注釋內(nèi)容詳見:Java學(xué)習(xí)總結(jié)之對象與類
八、程序設(shè)計錯誤
1) 語法錯誤
在編譯過程中出現(xiàn)的錯誤稱為語法錯誤或編譯錯誤。
2) 運行時錯誤
運行時錯誤是引起程序非正常中斷的錯誤,即程序能通過編譯,但在運行時環(huán)境檢測到一個不可能執(zhí)行的操作,就會出現(xiàn)運行錯誤。
3) 邏輯錯誤
當(dāng)程序沒有按預(yù)期的方式執(zhí)行就會發(fā)生邏輯錯誤。
九、Java標(biāo)識符
Java標(biāo)識符用于命名類、接口、變量、常量、方法等,有如下規(guī)則:
- 標(biāo)識符是由字母、數(shù)字、下劃線(
_)和美元符號($)組成的字符序列 - 必須以字母、下劃線(
_)或美元符號($)開頭,不能以數(shù)字開頭 - 標(biāo)識符不能是關(guān)鍵字(如public)或保留字(如goto)
- 標(biāo)識符不能是true、false或null等字面常量
- 標(biāo)識符可以為任意長度
- 不要用字符
$命名標(biāo)識符,習(xí)慣上$只用于機器自動產(chǎn)生的源代碼中
十、命名規(guī)范
注意:在命名時盡量避免采用縮寫作為標(biāo)識符,用完整的詞匯會更具有描述性,比如numberOfStudents比numStds、numOfStuds或者numOfStudents要好。另外,Java是區(qū)分大小寫的。
1) 類名和接口
使用Pascal命名法,每個單詞的首字母大寫,例如類名ComputeArea和System
2) 變量和方法
使用駝峰命名法,一個單詞都小寫,如有多個單詞則第一個單詞字母小寫,后面每個單詞的首字母大寫,例如變量radius以及方法setRadius
3) 常量
大寫常量的所有字母,如果有多個單詞,單詞之間用下劃線連接,例如,常量PI和常量MAX_VALUE
十一、Java 與 C++ 的區(qū)別
- Java 是純粹的面向?qū)ο笳Z言,所有的對象都繼承自 java.lang.Object,C++ 為了兼容 C 既支持面向?qū)ο笥种С置嫦蜻^程。
- Java 通過虛擬機從而實現(xiàn)跨平臺特性,但是 C++ 依賴于特定的平臺。
- Java 沒有指針,它的引用可以理解為安全指針,而 C++ 具有和 C 一樣的指針。
- Java 支持自動垃圾回收,而 C++ 需要手動回收。
- Java 不支持多重繼承,只能通過實現(xiàn)多個接口來達(dá)到相同目的,而 C++ 支持多重繼承。
- Java 不支持操作符重載,雖然可以對兩個 String 對象執(zhí)行加法運算,但是這是語言內(nèi)置支持的操作,不屬于操作符重載,而 C++ 可以。
- Java 的 goto 是保留字,但是不可用,C++ 可以使用 goto。
- Java 不支持條件編譯,C++ 通過 #ifdef #ifndef 等預(yù)處理命令從而實現(xiàn)條件編譯。