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

下載本文檔

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

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論