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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論