JAVA第一次上課筆記_第1頁
JAVA第一次上課筆記_第2頁
JAVA第一次上課筆記_第3頁
JAVA第一次上課筆記_第4頁
JAVA第一次上課筆記_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1991年Sun公司為實現(xiàn)“物聯(lián)網”成立了“綠色小組”,James Gosling于該年6月份開發(fā)一種新的語言并命名為OAK(橡樹),一種精巧而安全的網絡語言,適用于多線程編程,后發(fā)現(xiàn)OAK已是另一個公司的注冊商標,改名為Java(太平洋上一個盛產咖啡的島嶼名字)。一、Java虛擬機(Java Virtual Machine)是軟件模擬的計算機,可以在任何處理器上安全并且兼容地執(zhí)行保存在class文件中的字節(jié)碼。工作原理如下圖:二、.Java編譯程序將Java源程序翻譯為JVM可執(zhí)行的字節(jié)碼,字節(jié)碼其實就是二進制編碼,也叫偽代碼。(Java.class可在其他操作系統(tǒng)中使用JVM直接運行,但C

2、/C+編譯后的obj文件不可運行,需重新編譯)。三、.字節(jié)碼的執(zhí)行需要三個步驟:1.由類裝載器(CLASS LOADER)負責把類文件(CLASS文件)加載到JAVA虛擬機中(此過程需要檢查該類文件是否符合類文件規(guī)范)2.字節(jié)碼校驗器(BYTECODE VERIFIER)檢查該類文件的代碼中是否存在著某些非法操作。3.由JAVA解釋器把該類文件解釋成為機器碼執(zhí)行。四、Java的“沙箱”運行模式:“沙箱”的四個組件:·類裝載器··class文件檢驗器·Java虛擬機內置的安全特性·安全管理器1. 類裝載器:通過命名空間隔離類,使不同命名空間的類不

3、會互相訪問(顯示指定了訪問方式的例外),解決了類的訪問范圍問題。類的裝載順序問題和防止惡意加載的方法上圖中的網絡類裝載器理解為用戶自定義的裝載器,啟動類裝載器是Java的頂級類裝載器和標準擴展類裝載器理解為系統(tǒng)自帶的類裝載器。例,當需要加載類A的時候,會先從父裝載器開始尋找是否已經存在類A,如果沒有,迭代尋找父裝載器,直到啟動類裝載器返回結果,如果找到了,就由父裝載器加載,如果都沒有,則由自己加載。類裝載器加載類有一些保護規(guī)則,如下:1. 2. 3. 增加黑名單。類裝載器可以指定禁止加載的類列表,如果發(fā)現(xiàn)企圖加載,則立即拋出異常。2. class文件檢驗器安全性開始進入到了類的內部了。Java

4、虛擬機對class文件有4次檢查:1. class文件的結構檢查。在類被加載時進行。文件格式檢查,檢查包頭、版本、文件長度等。2. 類型數(shù)據(jù)的語義檢查。在連接過程中進行。class文件檢驗器在運行時檢查了一些Java語言在編譯時應該遵守的強制規(guī)則。3. 字節(jié)碼驗證。在連接過程中進行。我的理解就是檢查方法,對方法(操作碼、操作數(shù))進行檢查,確保能夠正確訪問。由于“停機問題”的緣故,檢查的規(guī)則是一個特定的規(guī)則集合,而不是所有可能的情況。4. 符號引用的驗證。這個是在動態(tài)連接的過程中,對外部調用的檢查。例,NoClassDefFoundError并不是在預加載過程彈出的,而是直 到這個不存在的類首次

5、被程序使用的時候才彈出。順便提一下,動態(tài)連接時,查找被引用的類(如果需要就加載該類),把符號引用轉換為直接引用(指針、偏移 量)。二進制兼容問題,為什么要在動態(tài)連接時進行檢查(上面第四條),一個原因是防止原有的class發(fā)生了變化,有專門的二進制兼容規(guī)則描述哪些情況是 可以兼容的。例如,在被調用的類中新添加方法是可以的,但是給老方法改名是不可以的。我個人的理解就是:以符號引用的方法進行動態(tài)連接,只要符號不變,就 OK,符號變了就不行。3. Java虛擬機內置的安全特性·類型安全的引用轉換(強制顯示類型轉換)·結構化內存訪問(無指針)·自動垃圾回收·數(shù)組邊

6、界檢查·空引用檢查·不指明運行時數(shù)據(jù)空間分布。Java棧(每個線程一個)、方法區(qū)、垃圾收集堆的數(shù)據(jù)都不預先指明內存地址,只在運行時由Java虛擬機分配。·本地方法不受Java虛擬機安全性的限制。只要開始運行本地方法,就跳出了Java虛擬機的沙箱了。比較安全的做法,是不要直接調用本地方法,通過Java API進行調用,這樣可以利用Java API本身的安全性來控制。·線程死亡不影響其它線程。4. 安全管理器關于代碼源(CodeSource)、簽名和保護域,只用下圖來稍作解釋: CodeSource由唯一的代碼URL和簽名0N組成,上圖中是文件系統(tǒng)中的fri

7、end.jar和friend簽名組成,簽名可以沒有。 文件的權限是權限的一種,一個權限(Permission)表示為類型、屬性和動作。如FilePermission、“question.txt”、“read”表示對question.txt的文件權限為讀。 多個權限組成PermissionCollection,圖中表示為Permissions。 保護域(ProtectionDomain)就是將CodeSource與多個權限關聯(lián)起來。Policy對象有一個getPermission的方法,通過傳入一個CodeSource,可以獲得其對應的Permissions。五、Java不僅是一種語言,還是一個

8、開發(fā)平臺,為開發(fā)者提供了編譯器、解釋器、文檔生成器和文件打包工具等。Java還是一個程序發(fā)布平臺,主要有兩種形式:Java應用程序Java小程序(Java小程序需嵌入到網站當中依賴瀏覽器運行,且兩種形式均需JRE支持)六、Java體系分為三個平臺:1.J2SE(JavaSE)Java標準版,主要針對于圖像編輯。5. J2ME(JavaME)Java嵌入式開發(fā),開發(fā)Java小程序。6. J2EE(JavaEE)Java企業(yè)版,應用于服務器(網站構建)。七、Java提供了三大類API(Application Programming Interface):1. Java Core API:由Sun制定的基本API,任何Java平臺必須提供。2. Java Standard Extension API(Javax):由Sun制定的擴充API,Java平臺可以選擇性地提供或加裝。3. 廠商或組織提供的API:由各家公司或組織所提供。八、Java平臺包括:1. JDK(Java Developmen

溫馨提示

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

評論

0/150

提交評論