Java基礎(chǔ)知識(shí).doc_第1頁(yè)
Java基礎(chǔ)知識(shí).doc_第2頁(yè)
Java基礎(chǔ)知識(shí).doc_第3頁(yè)
Java基礎(chǔ)知識(shí).doc_第4頁(yè)
Java基礎(chǔ)知識(shí).doc_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1.概念以及提綱2.語(yǔ)言基礎(chǔ)3.數(shù)據(jù)類(lèi)型一部分4.操作符5.控制流程6.關(guān)鍵字清單1.概念以及提綱Java技術(shù)是一種高級(jí)的面向?qū)ο蟮木幊陶Z(yǔ)言,也是一個(gè)平臺(tái),Java技術(shù)是基于Java虛擬機(jī)(Java Virtual Machine,JVM)的概念這是語(yǔ)言和底層軟件和硬件之間的一種轉(zhuǎn)換器,Java語(yǔ)言的所有實(shí)現(xiàn)都是基于JVM的,從而使Java程序可以在有JVM的任何系統(tǒng)上運(yùn)行。i.JVM詳細(xì)介紹:1)JVM執(zhí)行原理JVM可以稱(chēng)為軟件模擬的計(jì)算機(jī),它可以在任何處理器安全地兼容并且執(zhí)行.class字節(jié)碼。其實(shí)JVM兼容的二進(jìn)制字節(jié)碼和操作系統(tǒng)的本地機(jī)器碼有一定的區(qū)別,只是針對(duì)JVM上層的調(diào)用程序而言,執(zhí)行過(guò)程效果一樣,所以我們一般理解就是說(shuō)直接用JVM來(lái)執(zhí)行二進(jìn)制碼,實(shí)際上二者本質(zhì)有一定的差異,但是這一點(diǎn)可以理解JVM具有跨平臺(tái)性。一般情況下,編程人員都是直接編寫(xiě).java的源文件,然后用Java編譯器(javac命令)對(duì)源文件進(jìn)行編譯,生成.class文件,生成的.class文件就是我們平時(shí)所說(shuō)的包含了“機(jī)器碼”的文件,實(shí)際上JVM在編譯和運(yùn)行過(guò)程做了兩件事,先是直接將源文件編譯成二進(jìn)制字節(jié)碼.class文件,然后進(jìn)行第二次處理:解釋器負(fù)責(zé)將這些二進(jìn)制字節(jié)碼根據(jù)本地操作系統(tǒng)宿主環(huán)境生成相應(yīng)的本地機(jī)器碼解釋執(zhí)行。所以可以理解的一點(diǎn)是為什么Java語(yǔ)言具有跨平臺(tái)性,因?yàn)镴VM提供了Java運(yùn)行的一個(gè)中間層,使得操作系統(tǒng)和上層應(yīng)用相互之間是依靠JVM中間層進(jìn)行通信的,也就是說(shuō)Java編寫(xiě)的程序是運(yùn)行在JVM上的;再者盡管Java確實(shí)可以做到“一次編譯,多處運(yùn)行”,但是在不同結(jié)構(gòu)的操作系統(tǒng)平臺(tái)生成的.class文件真正在執(zhí)行的時(shí)候是存在一定差異的,只是JVM本身會(huì)根據(jù)安裝的不同版本進(jìn)行不同的操作系統(tǒng)平臺(tái)下本地機(jī)器碼的生成及運(yùn)行,所以雖然我們?cè)赟un公司官方網(wǎng)站可以下載到很多不同操作系統(tǒng)版本的JDK,但是執(zhí)行效果一樣。而且還有一點(diǎn),這一步操作針對(duì)開(kāi)發(fā)人員是透明的,所以真正在開(kāi)發(fā)過(guò)程可以放心的是不需要去擔(dān)心這種問(wèn)題,只要下載的版本是和符合我們運(yùn)行的操作系統(tǒng)的,只管進(jìn)行普通編程的編譯、解釋運(yùn)行操作就可以了。Java語(yǔ)言既是編譯型語(yǔ)言,也是解釋型語(yǔ)言,在.class文件生成之前,JVM通過(guò)javac命令對(duì)源代碼進(jìn)行編譯操作,然后用JVM根據(jù)包含了二進(jìn)制碼的.class生成機(jī)器碼并且解釋執(zhí)行。所以Java程序的跨平臺(tái)特性主要是指字節(jié)碼文件可以在任何具有Java虛擬機(jī)的計(jì)算機(jī)或者電子設(shè)備上運(yùn)行,Java虛擬機(jī)中的Java解釋器負(fù)責(zé)將字節(jié)碼文件解釋成為特定的機(jī)器碼進(jìn)行運(yùn)行。Java虛擬機(jī)的建立需要針對(duì)不同的軟硬件平臺(tái)來(lái)實(shí)現(xiàn),既要考慮處理器的型號(hào),也要考慮操作系統(tǒng)的種類(lèi)。由此在SPARC結(jié)構(gòu)、X86結(jié)構(gòu)、MIPS和PPC等嵌入式處理芯片上,在UNIX、Linux、Windows和部分實(shí)時(shí)操作系統(tǒng)上都可實(shí)現(xiàn)Java虛擬機(jī),這也是為了在運(yùn)行過(guò)程生成本地機(jī)器碼而考慮的,使得JVM可以兼容不同的軟硬件平臺(tái)。2)JVM的安全檢查機(jī)制【參考鏈接:/blog/225615】JVM在執(zhí)行字節(jié)碼的時(shí)候需要經(jīng)過(guò)下邊的步驟: 由類(lèi)加載器(Class Loader)負(fù)責(zé)把類(lèi)文件加載到Java虛擬機(jī)中(.class),在這個(gè)過(guò)程需要校驗(yàn)該類(lèi)文件是否符合類(lèi)文件規(guī)范 字節(jié)碼校驗(yàn)器(Bytecode Verifier)檢查該類(lèi)文件的代碼中是否存在著某些非法操作 如果字節(jié)碼校驗(yàn)器校驗(yàn)通過(guò),就由Java解釋器負(fù)責(zé)把該類(lèi)文件解釋成機(jī)器碼進(jìn)行執(zhí)行 JVM在上邊操作過(guò)程使用了“沙箱”模型,即把Java程序的代碼和數(shù)據(jù)都限制起來(lái)放在一定的內(nèi)存空間執(zhí)行,不允許程序訪問(wèn)該內(nèi)存空間以外的內(nèi)存。這種訪問(wèn)過(guò)程不僅僅是本地的,也可以是遠(yuǎn)程的,最明顯的體驗(yàn)是使用RMI的時(shí)候。$Java的“沙箱”詳解1步驟一:“雙親委派類(lèi)加載模型”:雙親委派方式,指的是優(yōu)先從頂層啟動(dòng)類(lèi)加載器,自定向下的方式加載類(lèi)模型,這種方式在“沙箱”安全模型里面做了第一道安全保障;而且這樣的方式使得底層的類(lèi)加載器加載的類(lèi)和頂層的類(lèi)加載器的類(lèi)不能相互調(diào)用,哪怕兩種類(lèi)加載器加載的是同一個(gè)包里面的類(lèi),只要加載的時(shí)候不屬于同一個(gè)類(lèi)加載器,就是相互隔絕的,這樣的操作稱(chēng)為JVM的“安全隔離”。2步驟二:字節(jié)碼校驗(yàn):字節(jié)碼校驗(yàn)過(guò)程需要經(jīng)過(guò)四個(gè)步驟: 檢查class文件的內(nèi)部結(jié)構(gòu)是否正確,主要是檢查該文件是否以某個(gè)內(nèi)存地址打頭一般為0xCAFEBABE,但是可能32bit和64bit存在一定的差異,通過(guò)這樣的檢查可以使得被損壞的class文件或者偽裝的class文件不能夠被加載,可以標(biāo)記為不安全的。第一趟掃描的主要目的是保證這個(gè)字節(jié)序列正確的定義了一個(gè)類(lèi)型,它必須遵從java class文件的固定格式,這樣它才能被編譯成在方法區(qū)中的(基于實(shí)現(xiàn)的)內(nèi)部數(shù)據(jù)結(jié)構(gòu)。 檢查是否符合JVM語(yǔ)言特性里面的編譯規(guī)則,因?yàn)镴ava里面所有的Class都是從Object類(lèi)繼承過(guò)來(lái)的,一旦發(fā)現(xiàn)這種不安全的類(lèi)存在,就直接拋異常。這次檢查,class文件檢驗(yàn)器不需要查看字節(jié)碼,也不需要查看和裝載任何其他類(lèi)型。在這趟掃描中,檢驗(yàn)器查看每個(gè)組成部分,確認(rèn)它們是否是其所屬類(lèi)型的實(shí)例,它們結(jié)構(gòu)是否正確。比如,方法描述符(它的返回類(lèi)型,以及參數(shù)的類(lèi)型和個(gè)數(shù))在class文件中被存儲(chǔ)為一個(gè)字符串,這個(gè)字符串必須符合特定的上下文無(wú)關(guān)文法。另外,還會(huì)檢查這個(gè)類(lèi)本身是否符合特定的條件,它們是由java編程語(yǔ)言規(guī)定的。比如,除Object外,所有類(lèi)都必須要有一個(gè)超類(lèi),final的類(lèi)不能被子類(lèi)化,final方法也沒(méi)有被覆蓋,檢查常量池中的條目是合法的,而且常量池的所有索引必須指向正確類(lèi)型的常量池條目。 檢查字節(jié)碼是否導(dǎo)致JVM崩潰掉,這里存在一個(gè)JVM中斷的問(wèn)題,編程過(guò)程無(wú)法捕捉Error,同樣的沒(méi)有辦法判斷程序是否因?yàn)閳?zhí)行的class字節(jié)碼中斷或者崩潰。字節(jié)碼流代表了java的方法,它是由被稱(chēng)為操作碼的單字節(jié)指令組成的序列,每一個(gè)操作碼后都跟著一個(gè)或多個(gè)操作數(shù)。執(zhí)行字節(jié)碼時(shí),依次執(zhí)行操作碼,這就在java虛擬機(jī)內(nèi)構(gòu)成了執(zhí)行的線程,每一個(gè)線程被授予自己的java棧,這個(gè)棧是由不同的棧幀構(gòu)成的,每一個(gè)方法調(diào)用將獲得一個(gè)自己的棧幀棧幀其實(shí)就是一個(gè)內(nèi)存片段,其中存儲(chǔ)著局部變量和計(jì)算的中間結(jié)果,用于存儲(chǔ)中間結(jié)果的部分被稱(chēng)為操作數(shù)棧。字節(jié)碼檢驗(yàn)器要進(jìn)行大量的檢查,以確保采用任何路徑在字節(jié)碼流中都得到一個(gè)確定的操作碼,確保操作數(shù)??偸前_的數(shù)值以及正確的類(lèi)型。它必須保證局部變量在賦予合適的值以前不能被訪問(wèn),而且類(lèi)的字段中必須總是被賦予正確類(lèi)型的值,類(lèi)的方法被調(diào)用時(shí)總是傳遞正確數(shù)值和類(lèi)型的參數(shù)。字節(jié)碼檢驗(yàn)器還必須保證每個(gè)操作碼都是合法的,即都有合法的操作數(shù),以及對(duì)每一個(gè)操作碼,合適類(lèi)型的數(shù)值位于局部變量中或是在操作數(shù)棧中。這些僅僅是字節(jié)碼檢驗(yàn)器所做的大量檢驗(yàn)工作中的一小部分,在整個(gè)檢驗(yàn)過(guò)程通過(guò)后,它就能保證這個(gè)字節(jié)碼流可以被java虛擬機(jī)安全的執(zhí)行。 檢查符號(hào)引用驗(yàn)證,一個(gè)類(lèi)文件,它會(huì)包含它引用的其他類(lèi)的全名和描述符,并跟他們建立符號(hào)引用(一種虛擬的,非物理連接的方式)。當(dāng)程序第一次執(zhí)行到需要符號(hào)引用的位置時(shí),JVM會(huì)檢查這個(gè)符號(hào)鏈接的正確性,然后建立真正的物理引用(直接引用)。java虛擬機(jī)將追蹤那些引用從被驗(yàn)證的class文件到被引用的class文件,以確保這個(gè)引用是正確的。這次掃描可能要裝載新的類(lèi)??紤]到虛擬機(jī)實(shí)現(xiàn)上的差別,第四趟掃描可能緊隨第三趟掃描發(fā)生,也有可能在第三趟掃描之后很久,當(dāng)字節(jié)碼被執(zhí)行時(shí)才執(zhí)行。動(dòng)態(tài)連接是一個(gè)將符號(hào)引用解析為直接引用的過(guò)程。當(dāng)java虛擬機(jī)執(zhí)行字節(jié)碼時(shí),如果它遇到一個(gè)操作碼,這個(gè)操作碼第一次使用一個(gè)指向另一個(gè)類(lèi)的符號(hào)引用,那么虛擬機(jī)就必須解析這個(gè)符號(hào)引用。在解析時(shí),虛擬機(jī)執(zhí)行兩個(gè)基本任務(wù): 查找被引用的類(lèi)(如果必要的話就裝載它)將符號(hào)引用替換為直接引用,例如指向一個(gè)類(lèi)、字段或方法的指針或偏移量虛擬機(jī)必須記住這個(gè)直接引用,這樣當(dāng)它以后再次遇到同樣的引用時(shí),就可以直接使用,而不需要重新解析該符號(hào)引用了。3步驟三:內(nèi)置于JVM的安全特性:在執(zhí)行期,除了符號(hào)引用驗(yàn)證,JVM還會(huì)對(duì)一些內(nèi)建的安全特性進(jìn)行檢查 類(lèi)型安全的引用轉(zhuǎn)化 結(jié)構(gòu)化的內(nèi)存訪問(wèn)(非指針?biāo)惴ǎ?GC 數(shù)組邊界檢查 空引用檢查(NullPointer) 強(qiáng)制內(nèi)存的結(jié)構(gòu)話訪問(wèn),避免了惡意用戶在了解內(nèi)存分布的情況下通過(guò)指針對(duì)JVM的內(nèi)部結(jié)構(gòu)進(jìn)行破外。當(dāng)然要了解JVM的內(nèi)存分布也不是易事。JVM對(duì)運(yùn)行時(shí)數(shù)據(jù)空間的分配是一個(gè)黑盒過(guò)程,完全由JVM自己決定如何分配,在class中沒(méi)有任何相關(guān)的信息。字節(jié)碼檢查的局限就是對(duì)于那些不經(jīng)過(guò)字節(jié)碼檢查的方法(如本地方法:native method)無(wú)法驗(yàn)證其安全性,所以這里采用的是對(duì)動(dòng)態(tài)鏈接庫(kù)的訪問(wèn)控制,對(duì)于那些足有足夠可信度的代碼才被允許訪問(wèn)本地方法。具體的實(shí)現(xiàn)是,由安全管理器來(lái)決定代碼是否有調(diào)用動(dòng)態(tài)鏈接庫(kù)的權(quán)限,因?yàn)檎{(diào)用本地方法必須調(diào)用動(dòng)態(tài)鏈接庫(kù)。這樣一來(lái),不可信的代碼將無(wú)法通過(guò)調(diào)用本地方法來(lái)繞過(guò)字節(jié)碼檢查。4步驟四:安全管理器SecurityManager:這一步是編程中最接近程序的一個(gè)環(huán)節(jié),SecurityManager存在于JavaAPI里面,是可以通過(guò)編程來(lái)完成安全策略管理的,默認(rèn)情況下,Java應(yīng)用是不設(shè)置SecurityManager實(shí)例的,但是這個(gè)實(shí)例卻需要我們?cè)趩?dòng)的時(shí)候通過(guò)System.setSecurityManager來(lái)進(jìn)行設(shè)置。一般情況下,調(diào)用了SecurityManager.checkPermission(Permission perm)來(lái)完成的,外部程序可以創(chuàng)建一個(gè)權(quán)限實(shí)例Permission來(lái)進(jìn)行Check操作。主要應(yīng)用為: 默認(rèn)安全管理器:java.lang.SecurityManager 代碼簽名和認(rèn)證 策略:java.security.Policy 權(quán)限:java.security.Permission 策略文件 保護(hù)域:CodeSource,PersimissionCollection,ProtectionDomain 訪問(wèn)控制器:java.security.AccessController 【這一步內(nèi)容比較多,這里不詳細(xì)講解,帶過(guò)】5步驟五:Java簽名/證書(shū)機(jī)制:Java簽名機(jī)制使得使用者可以安全調(diào)用外部提供的jar文件,簽名必須是基于jar包的,也就是如果要使用安全模型必須要將提供的class文件打包成jar,然后使用JDK工具(jarsigner)對(duì)jar進(jìn)行簽名。新安全平臺(tái)中對(duì)足夠信任度的代碼放寬了限制,要獲得充分信任須通過(guò)代碼簽名來(lái)實(shí)現(xiàn),若我們對(duì)某一簽名團(tuán)體足夠信任,比如SUN,那么具有該團(tuán)體簽名的代碼將被給予充分信任。一個(gè)基本的思路大致為,代碼發(fā)布者創(chuàng)建私鑰/公鑰對(duì),然后利用私鑰對(duì)發(fā)布代碼進(jìn)行簽名,代碼使用方在獲得代碼發(fā)布者提供的公鑰后對(duì)代碼進(jìn)行驗(yàn)證,確認(rèn)代碼確為該提供者提供以及在發(fā)布后未經(jīng)非法修改。這其中存在一些潛在的危險(xiǎn),既是公鑰是否是該代碼發(fā)布者提供的,惡意用戶可能替換掉合法的公鑰,這會(huì)導(dǎo)致用戶將給與惡意用戶發(fā)布的代碼以充分信任,目前的常見(jiàn)做法是通過(guò)一些權(quán)威的證書(shū)機(jī)構(gòu)來(lái)發(fā)布證書(shū)而不是公鑰,代碼發(fā)布者被證書(shū)發(fā)布機(jī)構(gòu)認(rèn)證合格后,可以將自己的公鑰交付證書(shū)發(fā)布機(jī)構(gòu),證書(shū)發(fā)布機(jī)構(gòu)再通過(guò)私鑰加密該公鑰,從而生成證書(shū)序列。這樣替換公鑰的可能性就變得微乎其微。不過(guò)世上無(wú)絕對(duì)安全之事,通過(guò)證書(shū)機(jī)構(gòu)發(fā)布的證書(shū)也不是絕對(duì)安全的途徑。證書(shū)是在簽名基礎(chǔ)上,對(duì)簽名值,再進(jìn)一步做一次加密。而這次加密使用的私鑰和公鑰都是證書(shū)機(jī)構(gòu)提供的。這種方式,是為了防止,有些惡意用戶,在公鑰發(fā)到你手上前,就對(duì)其做了手腳,然后再發(fā)一個(gè)動(dòng)過(guò)手腳的jar給你,用動(dòng)過(guò)手腳的公鑰解動(dòng)過(guò)手腳的jar包,是可以解開(kāi)的。而使用證書(shū)后,它會(huì)對(duì)已經(jīng)加密的簽名值,再做一層加密,這樣,到你手里,你只需要通過(guò)證書(shū)機(jī)構(gòu)的公鑰進(jìn)行解密,然后再用jar包發(fā)布者的公鑰解密就行了。(只能在一定程度上,提供一些安全性)3)JVM的內(nèi)部結(jié)構(gòu):JVM是Java平臺(tái)的核心,為了讓編譯產(chǎn)生的字節(jié)碼能夠更好的解釋和執(zhí)行,JVM主要分為6個(gè)部分【這里只是帶過(guò),想要了解JVM整體執(zhí)行原理的讀者可以去參考Inside JVM】: JVM解釋器:即這個(gè)虛擬機(jī)處理字段碼的CPU。 JVM指令系統(tǒng):該系統(tǒng)與計(jì)算機(jī)很相似,一條指令由操作碼和操作數(shù)兩部分組成。操作碼為8位二進(jìn)制數(shù),主要是為了說(shuō)明一條指令的功能,操作數(shù)可以根據(jù)需要而定,JVM有多達(dá)256種不同的操作指令。 寄存器:JVM有自己的虛擬寄存器,這樣就可以快速地與JVM的解釋器進(jìn)行數(shù)據(jù)交換。為了功能的需要,JVM設(shè)置了4個(gè)常用的32位寄存器:pc(程序計(jì)數(shù)器)、optop(操作數(shù)棧頂指針)、frame(當(dāng)前執(zhí)行環(huán)境指針)和vars(指向當(dāng)前執(zhí)行環(huán)境中第一個(gè)局部變量的指針)。 JVM棧:指令執(zhí)行時(shí)數(shù)據(jù)和信息存儲(chǔ)的場(chǎng)所和控制中心,它提供給JVM解釋器運(yùn)算所需要的信息。 存儲(chǔ)區(qū):JVM存儲(chǔ)區(qū)用于存儲(chǔ)編譯過(guò)后的字節(jié)碼等信息。 碎片回收區(qū):JVM碎片回收是指將使用過(guò)的Java類(lèi)的具體實(shí)例從內(nèi)存進(jìn)行回收,這就使得開(kāi)發(fā)人員免去了自己編程控制內(nèi)存的麻煩和危險(xiǎn)。隨著JVM的不斷升級(jí),其碎片回收的技術(shù)和算法也更加合理。JVM 1.4.1版后產(chǎn)生了一種叫分代收集技術(shù),簡(jiǎn)單來(lái)說(shuō)就是利用對(duì)象在程序中生存的時(shí)間劃分成代,以此為標(biāo)準(zhǔn)進(jìn)行碎片回收。 ii.Java平臺(tái)介紹:Java平臺(tái)(Java Platform)是一種純軟件平臺(tái),它可以在各種基于硬件的平臺(tái)運(yùn)行,它有三個(gè)版本(JavaSE,JavaME,JavaEE),它由Java應(yīng)用程序接口(Java Application Programming Interface,API)和JVM組成,Java API是一個(gè)現(xiàn)成的軟件組件集合,可以簡(jiǎn)化Applet和應(yīng)用程序的開(kāi)發(fā)部署,包括健壯、安全且可互操作的企業(yè)應(yīng)用程序。它涵蓋了從基本對(duì)象到連網(wǎng)和安全性,再到XML生成和Web服務(wù)的所有東西,Java API組織成相關(guān)類(lèi)和接口的庫(kù),庫(kù)也可以成為包。每個(gè)包實(shí)現(xiàn)包括: 用來(lái)編譯、運(yùn)行、監(jiān)視、調(diào)試應(yīng)用程序以及簡(jiǎn)歷應(yīng)用程序文檔的開(kāi)發(fā)工具 用來(lái)部署應(yīng)用程序的標(biāo)準(zhǔn)機(jī)制 用來(lái)創(chuàng)建復(fù)雜的圖形用戶界面(GUI)的用戶界面工具包 用來(lái)啟用數(shù)據(jù)庫(kù)訪問(wèn)和操作遠(yuǎn)程對(duì)象的集成庫(kù) 1)Java平臺(tái)的版本:Java平臺(tái)有三個(gè)版本,使得軟件開(kāi)發(fā)人員、服務(wù)提供商和設(shè)備生產(chǎn)商可以針對(duì)特定的市場(chǎng)進(jìn)行開(kāi)發(fā):1Java SE(Java Platform,Standard Edition):Java SE 以前稱(chēng)為 J2SE。它允許開(kāi)發(fā)和部署在桌面、服務(wù)器、嵌入式環(huán)境和實(shí)時(shí)環(huán)境中使用的 Java 應(yīng)用程序。Java SE 包含了支持 Java Web 服務(wù)開(kāi)發(fā)的類(lèi),并為 Java Platform,Enterprise Edition(Java EE)提供基礎(chǔ)。大多數(shù) Java 開(kāi)發(fā)人員使用 Java SE 5,也稱(chēng)為 Java 5.0 或 “Tiger”(2006 年 6 月,Java SE 6 或 “Mustang” 發(fā)布了 beta 版。)2Java EE(Java Platform,Enterprise Edition):這個(gè)版本以前稱(chēng)為 J2EE。企業(yè)版本幫助開(kāi)發(fā)和部署可移植、健壯、可伸縮且安全的服務(wù)器端 Java 應(yīng)用程序。Java EE 是在 Java SE 的基礎(chǔ)上構(gòu)建的,它提供 Web 服務(wù)、組件模型、管理和通信 API,可以用來(lái)實(shí)現(xiàn)企業(yè)級(jí)的面向服務(wù)體系結(jié)構(gòu)(service-oriented architecture,SOA)和 Web 2.0 應(yīng)用程序。3Java ME(Java Platform,Micro Edition):這個(gè)版本以前稱(chēng)為 J2ME。Java ME 為在移動(dòng)設(shè)備和嵌入式設(shè)備(比如手機(jī)、PDA、電視機(jī)頂盒和打印機(jī))上運(yùn)行的應(yīng)用程序提供一個(gè)健壯且靈活的環(huán)境。Java ME 包括靈活的用戶界面、健壯的安全模型、許多內(nèi)置的網(wǎng)絡(luò)協(xié)議以及對(duì)可以動(dòng)態(tài)下載的連網(wǎng)和離線應(yīng)用程序的豐富支持?;?Java ME 規(guī)范的應(yīng)用程序只需編寫(xiě)一次,就可以用于許多設(shè)備,而且可以利用每個(gè)設(shè)備的本機(jī)功能。2)Java組件技術(shù)提綱:【寫(xiě)此提綱的目的是防止學(xué)習(xí)過(guò)程術(shù)語(yǔ)混亂,這里提供的分類(lèi)不標(biāo)準(zhǔn),但是覆蓋了Java里面大部分我們開(kāi)發(fā)過(guò)程會(huì)碰到的規(guī)范和術(shù)語(yǔ)】 Java SE中的規(guī)范:JavaBeans Component Architecture【JavaBeans】:一個(gè)為Java平臺(tái)定義可重用軟件組件的框架,可以在圖形化構(gòu)建工具中對(duì)這些組件進(jìn)行設(shè)計(jì)Java Foundation Classes(Swing)【JFC】:一套Java的類(lèi)庫(kù),支持為基于Java的客戶端應(yīng)用程序構(gòu)建GUI和圖形化功能JavaHelp:一個(gè)獨(dú)立于平臺(tái)的可擴(kuò)展幫助系統(tǒng),開(kāi)發(fā)人員和做著可以使用它將在線幫助集成到Applet、組件、應(yīng)用程序、操作系統(tǒng)和設(shè)備中,還可以提供Web的在線文檔Java Native Interface【JNI】:使JVM中運(yùn)行的Java代碼可以與用其他編程語(yǔ)言編寫(xiě)的應(yīng)用程序和庫(kù)進(jìn)行互操作,很多時(shí)候?qū)崿F(xiàn)部分用C來(lái)寫(xiě),有興趣的讀者可以寫(xiě)一個(gè)簡(jiǎn)單的Java版任務(wù)管理器,嘿嘿,寫(xiě)這個(gè)可以收獲很多哦!Java Platform Debugger Architecture【JPDA】:用于Java SE的調(diào)試支持的基礎(chǔ)結(jié)構(gòu)Java 2D API【Java 2D】:是一套用于高級(jí)2D圖形和圖像的類(lèi)、一套提供了精確控制顏色空間定義和轉(zhuǎn)換的類(lèi)以及一套面向顯示圖像的操作符Java Web Start:允許用戶通過(guò)一次點(diǎn)擊下載并啟動(dòng)特性完整的網(wǎng)絡(luò)應(yīng)用程序,而不需要安裝,從而簡(jiǎn)化了Java的部署工作Certification Path API:提供了一套用于創(chuàng)建、構(gòu)建和檢驗(yàn)認(rèn)證路徑(也稱(chēng)為 “認(rèn)證鏈”)的 API,可以安全地建立公共密鑰到主體的映射。Java Advanced Imaging【JAI】:提供一套面向?qū)ο蟮慕涌?,這些接口支持一個(gè)簡(jiǎn)單的高級(jí)編程模型,使開(kāi)發(fā)人員能夠輕松地操作圖像。Java Cryptography Extension【JCE】:提供用于加密、密鑰生成和協(xié)商以及 Message Authentication Code(MAC)算法的框架和實(shí)現(xiàn),它提供對(duì)對(duì)稱(chēng)、不對(duì)稱(chēng)、塊和流密碼的加密支持,它還支持安全流和密封的對(duì)象。Java Data Objects【JDO】:是一種基于標(biāo)準(zhǔn)接口的持久化 Java 模型抽象,使程序員能夠?qū)?Java 領(lǐng)域模型實(shí)例直接存儲(chǔ)進(jìn)持久化存儲(chǔ)(數(shù)據(jù)庫(kù))中,這可以替代直接文件 I/O、串行化、JDBC 以及EJB Bean Managed Persistence(BMP)或Container Managed Persistence(CMP)實(shí)體 bean 等方法。Java Management Extensions【JMX】提供了用于構(gòu)建分布式、基于 Web、模塊化且動(dòng)態(tài)的應(yīng)用程序的工具,這些應(yīng)用程序可以用來(lái)管理和監(jiān)視設(shè)備、應(yīng)用程序和服務(wù)驅(qū)動(dòng)的網(wǎng)絡(luò)。Java Media Framework【JMF】:可以將音頻、視頻和其他基于時(shí)間的媒體添加到 Java 應(yīng)用程序和 applet 中。Java Secure Socket Extensions【JSSE】:支持安全的互聯(lián)網(wǎng)通信,實(shí)現(xiàn)了SSL(Secure Sockets Layer)和 TLS(Transport Layer Security)的 Java 版本,包含數(shù)據(jù)加密、服務(wù)器身份驗(yàn)證、消息完整性和可選的客戶機(jī)身份驗(yàn)證等功能。Java Speech API【JSAPI】:包含 Grammar Format【JSGF】和 Markup Language【JSML】規(guī)范,使 Java 應(yīng)用程序能夠?qū)⒄Z(yǔ)音技術(shù)集成到用戶界面中。JSAPI 定義一個(gè)跨平臺(tái)的 API,支持命令和控制識(shí)別器、聽(tīng)寫(xiě)系統(tǒng)和語(yǔ)音識(shí)別器。Java 3D API【Java 3D】:它提供一套面向?qū)ο蟮慕涌?,這些接口支持一個(gè)簡(jiǎn)單的高級(jí)編程模型,開(kāi)發(fā)人員可以使用這個(gè) API 輕松地將可伸縮的獨(dú)立于平臺(tái)的3D 圖形集成到 Java 應(yīng)用程序中。Metadata Facility【JMI】:允許給類(lèi)、接口、字段和方法標(biāo)上特定的屬性,從而使開(kāi)發(fā)工具、部署工具和運(yùn)行時(shí)庫(kù)能夠以特殊方式處理它們,Java元數(shù)據(jù)接口(使用Annotation實(shí)現(xiàn))Java Content Repository API:用于訪問(wèn) Java SE 中獨(dú)立于實(shí)現(xiàn)的內(nèi)容存儲(chǔ)庫(kù)的 API。內(nèi)容存儲(chǔ)庫(kù)是一個(gè)高級(jí)信息管理系統(tǒng),它是傳統(tǒng)數(shù)據(jù)存儲(chǔ)庫(kù)的超集。Concurrency Utilities:一套中級(jí)實(shí)用程序,提供了并發(fā)程序中常用的功能。Juxtapose【JXTA】:一個(gè)用來(lái)解決P2P計(jì)算的開(kāi)放的網(wǎng)絡(luò)計(jì)算平臺(tái)。JXTA P2P平臺(tái)使開(kāi)發(fā)者在其上建立PtoP的應(yīng)用。 Java EE中的規(guī)范:Java Database Connectivity【JDBC】:使用戶能夠從 Java 代碼中訪問(wèn)大多數(shù)表格式數(shù)據(jù)源,提供了對(duì)許多SQL 數(shù)據(jù)庫(kù)的跨 DBMS 連接能力,并可以訪問(wèn)其他表格式數(shù)據(jù)源,比如電子表格或平面文件。Java Naming and Directory Interface【JNDI】:為 Java 應(yīng)用程序提供一個(gè)連接到企業(yè)中的多個(gè)命名和目錄服務(wù)的統(tǒng)一接口,可以無(wú)縫地連接結(jié)構(gòu)不同的企業(yè)命名和目錄服務(wù)。Enterprise JavaBeans【EJB】:J2EE技術(shù)之所以贏得某體廣泛重視的原因之一就是EJB。它們提供了一個(gè)框架來(lái)開(kāi)發(fā)和實(shí)施分布式商務(wù)邏輯,由此很顯著地簡(jiǎn)化了具有可伸縮性和高度復(fù)雜的企業(yè)級(jí)應(yīng)用的開(kāi)發(fā)。EJB規(guī)范定義了EJB組件在何時(shí)如何與它們的容器進(jìn)行交互作用。容器負(fù)責(zé)提供公用的服務(wù),例如目錄服務(wù)、事務(wù)管理、安全性、資源緩沖池以及容錯(cuò)性。但這里值得注意的是,EJB并不是實(shí)現(xiàn)J2EE的唯一途徑。正是由于J2EE的開(kāi)放性,使得有的廠商能夠以一種和EJB平行的方式來(lái)達(dá)到同樣的目的。Remote Method Invoke【RMI】:正如其名字所表示的那樣,RMI協(xié)議調(diào)用遠(yuǎn)程對(duì)象上方法。它使用了序列化方式在客戶端和服務(wù)器端傳遞數(shù)據(jù)。RMI是一種被EJB使用的更底層的協(xié)議。Java IDL/CORBA:在Java IDL的支持下,開(kāi)發(fā)人員可以將Java和CORBA集成在一起。 他們可以創(chuàng)建Java對(duì)象并使之可在CORBA ORB中展開(kāi), 或者他們還可以創(chuàng)建Java類(lèi)并作為和其它ORB一起展開(kāi)的CORBA對(duì)象的客戶。后一種方法提供了另外一種途徑,通過(guò)它Java可以被用于將你的新的應(yīng)用和舊的系統(tǒng)相集成。Portlet Specification:定義了一套用于 Java門(mén)戶計(jì)算的 API,可以解決聚合、個(gè)人化、表示和安全性方面的問(wèn)題。JavaMail:提供了一套對(duì)郵件系統(tǒng)進(jìn)行建模的抽象類(lèi)。Java Message Service【JMS】:為所有與 JMS 技術(shù)兼容的消息傳遞系統(tǒng)定義一套通用的消息概念和編程策略,從而支持開(kāi)發(fā)可移植的基于消息的 Java 應(yīng)用程序。JavaServer Faces【JSF】:提供一個(gè)編程模型,幫助開(kāi)發(fā)人員將可重用 UI 組件組合在頁(yè)面中,將這些組件連接到應(yīng)用程序數(shù)據(jù)源,將客戶機(jī)生成的事件連接到服務(wù)器端事件處理程序,從而輕松地組建 Web 應(yīng)用程序。JavaServer Pages【JSP】:允許 Web 開(kāi)發(fā)人員快速地開(kāi)發(fā)和輕松地維護(hù)動(dòng)態(tài)的獨(dú)立于平臺(tái)的 Web 頁(yè)面,并將用戶界面和內(nèi)容生成隔離開(kāi),這樣設(shè)計(jì)人員就能夠修改頁(yè)面布局而不必修改動(dòng)態(tài)內(nèi)容。這種技術(shù)使用類(lèi)似 XML 的標(biāo)記來(lái)封裝為頁(yè)面生成內(nèi)容的邏輯。Java Servlets:提供一種基于組件的獨(dú)立于平臺(tái)的方法,可以構(gòu)建基于 Web 的應(yīng)用程序,同時(shí)避免 CGI 程序的性能限制,從而擴(kuò)展并增強(qiáng) Web 服務(wù)器的功能。J2EE Connector Architecture【JCA】:為將 J2EE 平臺(tái)連接到各種結(jié)構(gòu)的Enterprise Information Systems(EIS)定義了一個(gè)標(biāo)準(zhǔn)的體系結(jié)構(gòu),它定義了一套可伸縮的安全的事務(wù)性機(jī)制,使 EIS 廠商能夠提供標(biāo)準(zhǔn)的資源適配器,可以將這些資源適配器插入應(yīng)用服務(wù)器中。J2EE Management Specification【JMX】:為 J2EE 平臺(tái)定義了一個(gè)信息管理模型。根據(jù)其設(shè)計(jì),J2EE Management Model 可與多種管理系統(tǒng)和協(xié)議進(jìn)行互操作;包含模型到Common Information Model(CIM)的標(biāo)準(zhǔn)映射,CIM 是一個(gè)SNMP Management Information Base(MIB);還可以通過(guò)一個(gè)駐留在服務(wù)器上的 EJB 組件 J2EE Management EJB Component【MEJB】 映射到 Java 對(duì)象模型。Java Transaction API【JTA】:是一個(gè)獨(dú)立于實(shí)現(xiàn)和協(xié)議的高級(jí) API,它使應(yīng)用程序和應(yīng)用服務(wù)器可以訪問(wèn)事務(wù)。Java Transaction Service【JTS】:JTS是CORBA OTS事務(wù)監(jiān)控的基本的實(shí)現(xiàn)。JTS規(guī)定了事務(wù)管理器的實(shí)現(xiàn)方式。該事務(wù)管理器是在高層支持Java Transaction API (JTA)規(guī)范,并且在較底層實(shí)現(xiàn)OMG OTS specification的Java映像。JTS事務(wù)管理器為應(yīng)用服務(wù)器、資源管理器、獨(dú)立的應(yīng)用以及通信資源管理器提供了事務(wù)服務(wù)Java Authentication and Authorization Service【JAAS】:實(shí)現(xiàn)了標(biāo)準(zhǔn)的Pluggable Authentication Module(PAM)框架的 Java 版本并支持基于用戶的授權(quán),使服務(wù)能夠?qū)τ脩暨M(jìn)行身份驗(yàn)證和訪問(wèn)控制。JavaBeans Activation Framework【JAF】:JavaMail利用JAF來(lái)處理MIME編碼的郵件附件。MIME的字節(jié)流可以被轉(zhuǎn)換成Java對(duì)象,或者轉(zhuǎn)換自Java對(duì)象。大多數(shù)應(yīng)用都可以不需要直接使用JAF。Java API for XML Web Service【JAX-WS】:一組XML web services的JAVA API。JAX-WS允許開(kāi)發(fā)者可以選擇RPC-oriented或者message-oriented來(lái)實(shí)現(xiàn)自己的web services。Java API for XML Processing【JAXP】:允許 Java 應(yīng)用程序獨(dú)立于特定的 XML 處理實(shí)現(xiàn)對(duì) XML 文檔進(jìn)行解析和轉(zhuǎn)換,允許靈活地在 XML 處理程序之間進(jìn)行切換,而不需要修改應(yīng)用程序代碼。Java API for XML Binding【JAXB】:允許在 XML 文檔和 Java 對(duì)象之間進(jìn)行自動(dòng)的映射。SOAP with Attachments API for Java【SAAJ】:使開(kāi)發(fā)人員能夠按照 SOAP 1.1 規(guī)范和 SOAP with Attachments note 生成和消費(fèi)消息。Streaming API for XML【StAX】:就提供了兩種方法來(lái)處理 XML:文檔對(duì)象模型(DOM)方法是用標(biāo)準(zhǔn)的對(duì)象模型表示 XML 文檔;Simple API for XML (SAX) 方法使用應(yīng)用程序提供的事件處理程序來(lái)處理 XML。JSR-173 提出了一種面向流的新方法:Streaming API for XML (StAX)。其最終版本于 2004 年 3 月發(fā)布,并成為了 JAXP 1.4(將包含在即將發(fā)布的 Java 6 中)的一部分。Java API for XML Registries【JAXR】:提供了一種統(tǒng)一和標(biāo)準(zhǔn)的Java API,用于訪問(wèn)不同類(lèi)型的基于XML的元數(shù)據(jù)注冊(cè)中心。JAXR目前實(shí)現(xiàn)支持ebXML Registry2.0版和UDDI2.0版。未來(lái)可以支持更多的類(lèi)似的注冊(cè)中心。JAXR為客戶端提供了API,與XML注冊(cè)中心進(jìn)行交互,同時(shí)為服務(wù)中心提供者提供了服務(wù)提供者接口(SPI),這樣,注冊(cè)中心的實(shí)現(xiàn)是可插拔的。JAXR API將應(yīng)用代碼與下層的注冊(cè)中心機(jī)制相隔離。當(dāng)編寫(xiě)基于JAXR的客戶端瀏覽和操作注冊(cè)中心時(shí),當(dāng)注冊(cè)中心更換時(shí),比如從UDDI更換為ebXML,代碼不需要進(jìn)行修改。Java Persistence API【JPA】:通過(guò)JDK 5.0注解或XML描述對(duì)象關(guān)系表的映射關(guān)系,并將運(yùn)行期的實(shí)體對(duì)象持久化到數(shù)據(jù)庫(kù)中,一個(gè)標(biāo)準(zhǔn)的ORM框架。Java Authorization Service Provider Contract for Containers【JACC】:在J2EE應(yīng)用服務(wù)器和特定的授權(quán)認(rèn)證服務(wù)器之間定義了一個(gè)連接的協(xié)約,以便將各種授權(quán)認(rèn)證服務(wù)器插入到J2EE產(chǎn)品中去。Java API for RESTful Web Services【JAX-RS】:定義一個(gè)統(tǒng)一的規(guī)范,使得 Java 程序員可以使用一套固定的接口來(lái)開(kāi)發(fā) REST 應(yīng)用,避免了依賴(lài)于第三方框架。同時(shí),JAX-RS 使用 POJO 編程模型和基于標(biāo)注的配置,并集成了 JAXB,從而可以有效縮短 REST 應(yīng)用的開(kāi)發(fā)周期。 Java ME中的規(guī)范:Connected Limited Device Configuration【CLDC】:是組成資源有限的移動(dòng)信息設(shè)備的 Java 運(yùn)行時(shí)環(huán)境的兩種配置之一。CLDC 描述最基本的庫(kù)和虛擬機(jī)特性,所有包含K 虛擬機(jī)(K virtual machine,KVM)的 J2ME 環(huán)境實(shí)現(xiàn)中都必須提供這些庫(kù)和特性。Mobile Information Device Profile【MIDP】:是組成資源有限的移動(dòng)信息設(shè)備的 Java 運(yùn)行時(shí)環(huán)境的兩種配置之一。MIDP 提供核心應(yīng)用程序功能,包括用戶界面、網(wǎng)絡(luò)連接、本地?cái)?shù)據(jù)存儲(chǔ)和應(yīng)用程序生命周期管理。Connected Device Configuration【CDC】:是一個(gè)基于標(biāo)準(zhǔn)的框架,用來(lái)構(gòu)建和交付可以跨許多連接網(wǎng)絡(luò)的消費(fèi)類(lèi)設(shè)備和嵌入式設(shè)備共享的應(yīng)用程序。Mobile 3D Graphics API for J2ME【M3G】:是一種輕量的交互式 3D 圖形 API,它作為可選的包與J2ME 和 MIDP 結(jié)合使用?!?:上邊這份清單基本上涵蓋了Java平臺(tái)所有的術(shù)語(yǔ)以及相關(guān)介紹,因?yàn)閃ebBeans是Java EE 6的新規(guī)范,而且JBI和SCA具體是為ESB開(kāi)發(fā)存在的,這三個(gè)規(guī)范我沒(méi)有歸納進(jìn)來(lái),有興趣的讀者可以自己去查閱一下,還有一點(diǎn)需要說(shuō)明JXTA以前不屬于Java規(guī)范里面的,也是因?yàn)樵摻M件用起來(lái)比較方便貌似現(xiàn)在納入JSR規(guī)范了,具體情況如何我沒(méi)有查證,見(jiàn)諒,若有遺漏掉的規(guī)范提綱,也請(qǐng)有心的讀者來(lái)Email告知,謝謝:。這套教程我在書(shū)寫(xiě)的時(shí)候我只會(huì)寫(xiě)一部分與我自己開(kāi)發(fā)相關(guān)的使用過(guò)的組件技術(shù),其他我不熟悉的可能不會(huì)涉及到。而且需要提醒一下讀者的是:SSH(Struts+Spring+Hibernate)框架雖然很流行,但是不屬于Sun公司Java EE里面的官方標(biāo)準(zhǔn)規(guī)范,這三個(gè)框架是三個(gè)開(kāi)源框架,所以:JavaEE的規(guī)范定義里面并不包含SSH!】2.語(yǔ)言基礎(chǔ)【*:本教材不會(huì)講JDK的環(huán)境配置,環(huán)境配置以后一必要我在BLOG的配置分類(lèi)里面單獨(dú)講解】i.開(kāi)發(fā)第一個(gè)Java程序:步驟一:書(shū)寫(xiě).java源代碼步驟二:使用javac命令編譯.java源代碼,將該代碼編譯成.class字節(jié)碼步驟三:使用java命令運(yùn)行.class字節(jié)碼接著按照步驟,書(shū)寫(xiě)第一個(gè)Java程序:/*我的第一個(gè)Java程序*/classHellopublic classHelloJava public static voidmain(String args) System.out.println(Hello Java); 將上邊的代碼保存成HelloJava.java文件名,放于D盤(pán)根目錄。【*:這里的放置位置根據(jù)讀者愛(ài)好自己決定】第二步:使用命令行工具:javac HelloJava.java第三步:運(yùn)行.class文件java HelloJava輸出應(yīng)該為:Hello Java針對(duì)這樣一個(gè)過(guò)程有幾點(diǎn)需要說(shuō)明:1關(guān)于Java源文件:Java的源文件是以.java結(jié)尾的,每一個(gè)源文件里面可以定義很多class,但是只能定義一個(gè)public的class,如果不定義public的class,文件名必須和其中至少一個(gè)class的名稱(chēng)一致;若定義了一個(gè)public的class,文件名必須和定義的public的class的類(lèi)名一致?!?:這點(diǎn)是Java的語(yǔ)言規(guī)范,但是從語(yǔ)言設(shè)計(jì)上來(lái)講這是沒(méi)有必要的,實(shí)際上編譯器不應(yīng)該把文件名和類(lèi)名關(guān)聯(lián),但是Java語(yǔ)言是一個(gè)特殊,學(xué)過(guò)Scala和C#的讀者應(yīng)該就明白這一點(diǎn),所以這一點(diǎn)在Java使用的時(shí)候需要特別小心?!?關(guān)于函數(shù)入口:一個(gè)Java程序可能由一個(gè)或者多個(gè)class構(gòu)成,上邊使用了javac過(guò)后,同一個(gè)目錄下可以生成兩個(gè).class文件,分別是Hello.class和HelloJava.class,不論怎樣必須在運(yùn)行的類(lèi)里面(使用java命令的時(shí)候后邊跟的類(lèi)名的類(lèi))定義一個(gè)Java應(yīng)用程序的入口:public static voidmain(Stringargs),在這里,該定義成為Java語(yǔ)言的主函數(shù)入口,也是程序運(yùn)行的起點(diǎn),上邊的程序的入口就在HelloJava類(lèi)里面。main()方法的簽名是不可以更改的,因此下邊的函數(shù)入口的寫(xiě)法都是不對(duì)的:static voidmain(Stringargs)public voidmain(Stringargs)public static voidmain(Stringargs)使用上邊三種入口函數(shù)的定義都會(huì)使得JVM沒(méi)有辦法找到主函數(shù)入口,后兩種定義會(huì)拋出下邊的異常,第一種情況比較特殊,JVM會(huì)提示:Main method not public,也就是說(shuō)第一種情況JVM能夠找到主函數(shù),但是該主函數(shù)不符合Java應(yīng)用程序的運(yùn)行規(guī)范。Exception in thread Main Thread java.lang.NoSuchMethodError: main3在上邊的程序里面,HelloJava的類(lèi)可以不是public的時(shí)候,這里需要說(shuō)明的是,不是說(shuō)因?yàn)槟硞€(gè)類(lèi)是public主函數(shù)入口就必須放在該類(lèi)里面,讀者可以試試下邊的代碼段:classHelloTester public static voidmain(String args) System.out.println(Hello World); public classMainTester 當(dāng)我們使用javac MainTester.java的時(shí)候,編譯是可以通過(guò)的,而且會(huì)生成兩個(gè)類(lèi)文件:HelloTester.class和MainTester.class。注意這里的代碼結(jié)構(gòu),按照第一點(diǎn)提到的,這個(gè).java文件只能保存為MainTester.java,如果這段代碼保存為HelloTester.java文件,編譯的時(shí)候會(huì)拋出下邊的異常:HelloTester.java:8:class MainTester is public,should be declared in a file named MainTester.java也就是說(shuō)一旦在一個(gè).java源文件里面定義了一個(gè)類(lèi)為public,那么這個(gè)源文件的名稱(chēng)就被限制了必須和public的類(lèi)保持一致。上邊的代碼經(jīng)過(guò)編譯過(guò)后使用下邊的命令讀者可以測(cè)試以下:java HelloTester【這種做法會(huì)輸出:Hello World,因?yàn)樵谶@個(gè)類(lèi)里面找到了主函數(shù)的入口】java MainTester【這種做法不會(huì)成功,因?yàn)樵趫?zhí)行類(lèi)MainTester里面,JVM找不到主函數(shù)的入口】4main函數(shù)的參數(shù):對(duì)于java里面的主函數(shù)入口方法main,JVM有一定的限制,首先是不可以有返回值,因此返回值為void,而且必須有一個(gè)參數(shù),類(lèi)型為String的,這也是Java語(yǔ)言里面的規(guī)范,這個(gè)參數(shù)會(huì)匹配命令行里面的參數(shù),至于參數(shù)名是里面唯一可以更改的,所以上邊的定義可以為:public static voidmain(String myInputValue)一般情況下,約定使用args的名稱(chēng),而這里的args代表了命令行的輸入?yún)?shù),這一點(diǎn)可以提供一個(gè)帶命令行參數(shù)的例子:public classMainTester public static voidmain(Stringargs) System.out.println(args0); System.out.println(args1); 把上邊的代碼保存為MainTester.java,然后使用javac命令編譯,這一步之前所有的的內(nèi)容都不用擔(dān)心,和前邊一樣,但是運(yùn)行的時(shí)候可能需要下邊這種格式:java MainTester hello1 hello2上邊這段代碼會(huì)輸出為:hello1hello2也就是說(shuō),該參數(shù)讀取的是在java ClassName之后的參數(shù),按照空白為分隔符,然后輸入的內(nèi)容就為參數(shù)的值,這些值構(gòu)成了一個(gè)String的參數(shù)列表,上邊代碼里面args.length的值為2,第一個(gè)參數(shù)為hello1,第二個(gè)參數(shù)為hello2,這就是主函數(shù)參數(shù)列表里面的參數(shù)的使用小節(jié)一下上邊幾點(diǎn): 使用javac命令的時(shí)候:如果.java里面沒(méi)有public的class,直接針對(duì)class的定義進(jìn)行編譯操作,這種情況下,.java源文件的文件名只要和里面的任何一個(gè)類(lèi)的類(lèi)名一致就可以了;如果.java里面定義了一個(gè)類(lèi)是public的,這種情況下,.java源文件的名稱(chēng)只能和這個(gè)類(lèi)的類(lèi)名保持一致,否則編譯不會(huì)通過(guò)。 使用java命令的時(shí)候:在使用java命令的時(shí)候,后邊敲入命令不需要填寫(xiě)文件全名【不需要java ClassName.class格式】,只是需要填寫(xiě)類(lèi)名就可以了,這種情況下,JVM會(huì)在ClassName對(duì)應(yīng)的類(lèi)定義里面去尋找主函數(shù)入口,如果找不到就會(huì)拋出異常,找到過(guò)后就可以執(zhí)行,也可以這樣講,包含主函數(shù)的類(lèi)不一定在一個(gè)public的類(lèi)里面可以是非public的。 Java應(yīng)用程序在執(zhí)行的時(shí)候,必須有一個(gè)主函數(shù)的入口【*:這里不包括Applet的運(yùn)行,因?yàn)锳pplet里面有特殊的入口以及特殊的運(yùn)行機(jī)制】,而且該主函數(shù)的入口必須定義為:public static voidmain(Stringargs) 這里還有一點(diǎn)需要說(shuō)明:main函數(shù)是可以拋異常的,JVM在檢查方法簽名的時(shí)候,不會(huì)檢查main后邊帶的異常定義,比如下邊這種方式也是定義函數(shù)入口的正確方式,也就是說(shuō)帶異常拋出的時(shí)候僅僅檢測(cè)方法簽名就可以了:public static voidmain(Stringargs)throwsException 注意主函數(shù)傳入?yún)?shù)的使用,args參數(shù)實(shí)際上就是在使用java命令的時(shí)候傳入的參數(shù)的值的使用,這些使用可以通過(guò)寫(xiě)幾個(gè)簡(jiǎn)單的程序來(lái)實(shí)現(xiàn),在參數(shù)使用的過(guò)程里面,一般情況下在編寫(xiě)程序的時(shí)候針對(duì)參數(shù)進(jìn)行一定的檢測(cè),上邊使用參數(shù)的代碼實(shí)際上是會(huì)拋異常的,因?yàn)闀?huì)存在數(shù)組越界的問(wèn)題,為了保證數(shù)據(jù)不會(huì)越界,一般可以通過(guò)代碼if( args.length 0 )來(lái)對(duì)傳入的參數(shù)進(jìn)行判斷,而且把使用參數(shù)的代碼放在try-catch塊里面進(jìn)行數(shù)組越界異常的捕捉。 ii.Java的注釋?zhuān)涸贘ava里面主要有三種注釋?zhuān)盒凶⑨尅⒍温渥⑨?、文檔注釋1)行注釋?zhuān)盒凶⑨屢渤蔀閱涡凶⑨專(zhuān)凶⑨屖褂谩?注釋文字”的格式來(lái)對(duì)某一行的代碼進(jìn)行注釋或者加以說(shuō)明public classLineComment/這是單行注釋的范例 public static voidmain(Stringargs) /這只是一個(gè)單行注釋的例子 System.out.println(Single Line Comment); 上邊代碼里面/后邊的文字就是行注釋的一個(gè)例子2)段注釋?zhuān)憾巫⑨屢渤蔀槎嘈凶⑨專(zhuān)ǔJ钱?dāng)說(shuō)明文字比較長(zhǎng)的時(shí)候的注釋方法public classMultiCommont /* *這是段注釋的一個(gè)簡(jiǎn)單的例子 *這里是函數(shù)入口main方法 */ public static voidmain(Stringargs) System.out.println(Multi Lines Comments); 3)文檔注釋?zhuān)何臋n注釋是Java里面的一個(gè)比較厲害的功能,它可以用于注釋類(lèi)、屬性、方法等說(shuō)明,而且通過(guò)JDK工具javadoc直接生成相關(guān)文檔,文檔注釋的基本格式為“/*.*/”,不僅僅如此,文檔注釋本身還存在語(yǔ)法1文檔和文檔注釋

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論