Java高級程序設(shè)計全書電子教案完整版課件_第1頁
Java高級程序設(shè)計全書電子教案完整版課件_第2頁
Java高級程序設(shè)計全書電子教案完整版課件_第3頁
Java高級程序設(shè)計全書電子教案完整版課件_第4頁
Java高級程序設(shè)計全書電子教案完整版課件_第5頁
已閱讀5頁,還剩108頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Java高級程序設(shè)計第1章 Java編碼規(guī)范1.1 應(yīng)用場景1.2 相關(guān)知識1.3 任務(wù)實施1.4 拓展知識1.5 拓展訓(xùn)練1.6課后小結(jié)1.1 應(yīng)用場景 一個大型的軟件項目是由一個團隊來完成的,每個程序員在給包、類、 變量、方法取名的時候,如果根本沒有一點約定,只是隨心所欲,可能會帶來一系列問題。 編碼規(guī)范是程序編碼所要遵循的規(guī)則,保證代碼的正確性、穩(wěn)定性、可讀性。規(guī)范編碼有以下作用。一、規(guī)范的代碼可以促進團隊合作二、規(guī)范的代碼可以減少bug處理三、規(guī)范的代碼可以降低維護成本四、規(guī)范的代碼有助于代碼審查五、養(yǎng)成代碼規(guī)范的習(xí)慣,有助于程序員自身的成長1.2 相關(guān)知識1.2.1 文件后綴名1.2

2、.2 源文件樣式約定1.2.3 注釋規(guī)范1.2.4 命名規(guī)范1.2.1 文件后綴名表1-1 Java程序使用的文件后綴名 文件類別文件后綴名Java源文件.javaJava字節(jié)碼文件.class其中兩者最本質(zhì)的區(qū)別在于,.Java文件是供虛擬機運行時執(zhí)行的文件,而.class文件可以讓你在任何一臺安裝了Java虛擬機的機器上運行。1.2.2 源文件樣式約定Java源文件必須按順序由以下3部分組成。1、版權(quán)信息。2、包和引入語句。3、類和接口聲明。1. 版權(quán)信息版權(quán)和版本信息必須在Java文件的開頭,其他不需要出現(xiàn)在javadoc的信息也可以包含在這里。2. 包和引入語句package 行要在i

3、mport行之前,import 中標準的包名要在本地的包名之前,而且按照字母順序排列。如果 import 行中包含了同一個包中的不同子目錄,則應(yīng)該用 * 來處理。3. 類和接口聲明每個Java源文件都包含一個單一的公共類或接口。1.2.3 注釋規(guī)范1.注釋編寫的原則(1)注釋形式統(tǒng)一。在整個應(yīng)用程序中,使用具有一致的標點和結(jié)構(gòu)的樣式來構(gòu)造注釋。如果在其他項目中發(fā)現(xiàn)它們的注釋規(guī)范與這份文檔不同,按照這份規(guī)范寫代碼,不要試圖在既成的規(guī)范系統(tǒng)中引入新的規(guī)范。(2)注釋內(nèi)容準確簡潔。內(nèi)容要簡單、明了、含義準確,防止注釋的多義性,錯誤的注釋不但無益反而有害。2.注釋類型的基本劃分(1)基本注釋必須要添加

4、,包括以下幾種: 1、類(接口)的注釋; 2、構(gòu)造函數(shù)的注釋; 3、方法的注釋; 4、全局變量的注釋; 5、字段/屬性的注釋;簡單的代碼做簡單注釋,注釋內(nèi)容不大于10個字即可,另外,持久化對象或VO對象的getter、setter方法不需加注釋。(2)特殊必加的注釋包括以下幾種:1、典型算法必須有注釋。2、在代碼不明晰處必須有注釋。3、在代碼修改處加上修改標識的注釋。4、在循環(huán)和邏輯分支組成的代碼中加注釋。5、為他人提供的接口必須加詳細注釋。具體的注釋格式自行定義,要求注釋內(nèi)容準確簡潔。3.注釋的格式(1)單行(single-line)注釋格式為“/”。(2)塊(block)注釋格式為“/*/

5、”。(3)文檔注釋格式為“/*/”。(4)Javadoc注釋標簽語法如下:author 對類的說明,標明開發(fā)該類模塊的作者;version 對類的說明,標明該類模塊的版本;see 對類、屬性、方法的說明,參考轉(zhuǎn)向,也就是相關(guān)主題;param 對方法的說明,對方法中某參數(shù)的說明;return 對方法的說明,對方法返回值的說明;exception 對方法的說明,對方法可能拋出的異常進行說明。1.2.4 命名規(guī)范命名指系統(tǒng)中對包名、目錄(類名)、方法、常量、變量等標識符的命名。標識符的命名力求做到統(tǒng)一、達意、簡潔,遵循駝峰法則。統(tǒng)一是指對于同一個概念,在程序中用同一種表示方法。例如對于供應(yīng)商,既可以

6、用supplier,也可以用provider,但是我們只能選定一個使用,至少在一個Java項目中保持統(tǒng)一。達意是指標識符能準確地表達出它所代表的意義,如newSupplier, OrderPaymentGatewayService等;而 supplier1, service2,idtts等則不是好的命名方式。簡潔是指,在統(tǒng)一和達意的前提下,用盡量少的標識符。如果不能達意,寧愿不要太簡潔。例如,theOrderNameOfTheTargetSupplierWhichIsTransfered 太長,transferedTargetSupplierOrderName則較好,但是transTgtSpl

7、OrdNm就不好了。省略元音的縮寫方式不要使用,我們的英語往往還沒有好到看得懂奇怪的縮寫。用駝峰法則是指單詞之間不使用特殊符號分割,而是通過首字母大寫來分割。例如推薦用 SupplierName, addNewContract,而不是supplier_name, add_new_contract。1.3 任務(wù)實施1.3.1 任務(wù)一 計算員工的月工資(1)任務(wù)需求某公司分為多個部門,每個部門有一個經(jīng)理和多個員工,每個員工根據(jù)職稱發(fā)基本工資。員工的工資按基本工資、日加班工資、日缺勤工資等組成。具體需求如下所示(1)員工的基本信息,部門、職務(wù)、職稱以及工資記錄等信息。(2)能記錄員工的每一個職稱信息

8、,并授予相應(yīng)的職稱,系統(tǒng)在 計算員工工資的時候選取職稱對應(yīng)的最高職稱津貼。(2)任務(wù)分析問題域中涉及多個類,職員類Staffer,經(jīng)理類Manager,測試類TestEmployee。Staffer類:通過此類封裝定義計算員工基本工資方法Manager類:通過此類封裝定義計算員工基本工資方法TestEmployee類:調(diào)用方法并實現(xiàn)結(jié)果輸出1.4 拓展知識相對于之前所提到的一些基本的編程需要注意的慣例,其他慣例(Miscellaneous Practices)也是非常重要的,下面就列出相對應(yīng)的慣例:1.每次保存的時候,都讓你的代碼是最美的2. 使用log而不是System.out.printl

9、n()3. 每個if while for等語句,都不要省略大括號4. 善用TODO5. 在需要留空的地方放一個空語句或注釋6. 不要再對boolean值做true false判斷7. 減少代碼嵌套層次1.5 拓展訓(xùn)練 良好的編碼習(xí)慣可以大大提高可讀性以及編碼效率。請讀者從一開始就養(yǎng)成一個良好的編碼習(xí)慣。通過以下校驗郵件地址方法模板展示較為規(guī)范的編碼格式:1.6 課后小結(jié)1.規(guī)范需要平時編碼過程中注意,是一個慢慢養(yǎng)成的好習(xí)慣。2.命名規(guī)范。所有的標識符只能用英文字母,數(shù)字,下劃線,并采用駝峰標識。3.注釋規(guī)范。注釋有:單行注釋 “/”, 多行注釋 “/*.*/”, 文檔注釋 “/*/”。4.排版

10、規(guī)范。代碼應(yīng)避免一行長度超過60個字符。5.聲明規(guī)范。一行聲明一個變量,只在代碼塊的開始處聲明變量。6.語句規(guī)范。一條語句占用一行。7.編程規(guī)范。用于設(shè)置的方法前綴必須是set;用于檢索一個布爾類型的方法前綴必須是is,而用于檢索其他方法前綴必須是get。程序中應(yīng)盡可能少使用數(shù)字(或字符),盡可能定義靜態(tài)變量來說明該數(shù)字(或字符)的含義。1.7 課后習(xí)題 1. 相對獨立的程序塊之間、變量說明之后必須加_。2. 類注釋部分,描述部分說明該類或者接口的功能、作用、使用方法和注意事項,每次修改后增加作者、新版本號和當(dāng)天的日期,since _,deprecated 表示_。3. 比較操作符,賦值操作符

11、=、+=,算術(shù)操作符+、%,邏輯操作符&、&,位域操作符、等雙目操作符的前后加_。4. Java中的注釋有三種形式: 文檔注釋 、 多行注釋 和_。5. 方法的文檔中,塊標記param用于說明_的含義,return用于說明_1.下列錯誤使用異常的做法是_。A.在程序中使用異常處理還是使用錯誤返回碼處理,根據(jù)是否有利于程序結(jié)構(gòu)來確定,并且異常和錯誤碼不應(yīng)該混合使用,推薦使用異常。B.一個方法不應(yīng)拋出太多類型的異常。throws/exception子句標明的異常最好不要超過三個。C.異常捕獲盡量不要直接catch(Exceptionex),應(yīng)該把異常細分處理。D.程序內(nèi)拋出的異常本身就可說明異常的

12、類型、拋出條件,可不填寫詳細的描述信息。捕獲異常后用exception.toString()取到詳細信息后保存。2下列說法錯誤的是_。A.段代碼各語句之間有實質(zhì)性關(guān)聯(lián)并且是完成同一件功能的,那么可考慮把此段代碼構(gòu)造成一個新的方法。B.源程序中關(guān)系較為緊密的代碼應(yīng)盡可能相鄰。C.程序中可同時使用錯誤碼和異常進行處理,推薦使用異常。D.方法參數(shù)建議不超過5個。1.8 上機實訓(xùn)實訓(xùn)一、計算幾何圖形的面積、周長。其類圖如1-1所示。Java高級程序設(shè)計第2章 Java集合框架2.1 應(yīng)用場景2.6 課后小結(jié)2.2 相關(guān)知識 2.7 課后習(xí)題2.3 實施過程2.8 上機實訓(xùn)2.4 拓展知識2.5 拓展訓(xùn)

13、練2.1 應(yīng)用場景在Java編程時,常常需要集中存放多個數(shù)據(jù)。當(dāng)然我們可以使用數(shù)組來保存多個對象。但數(shù)組長度不可變化;而且數(shù)組無法保存具有映射關(guān)系的數(shù)據(jù)。為了保存數(shù)量不確定的數(shù)據(jù),以及保存具有映射關(guān)系的數(shù)據(jù)(也被稱為關(guān)聯(lián)數(shù)組),就要使用Java提供的集合類。JDK提供了大量優(yōu)秀的集合實現(xiàn)供開發(fā)者使用,合格的程序員必須要能夠通過功能場景和性能需求選用最合適的集合,這就要求開發(fā)者必須熟悉Java的常用集合框架類。2.2 相關(guān)知識2.2.1 集合框架2.2.2 Java集合框架2.3.3 Java集合框架的使用2.2.1 集合框架在現(xiàn)實生活中,集合被理解為:很多事物湊在一起;在。數(shù)學(xué)中,的集合:為具

14、有共同屬性的事物的總體。通常情況下,我們把具有相同性質(zhì)的一類東西,匯聚成一個整體,就可以稱為集合。通常集合有兩種表示法,一種是列舉法,比如集合A=1,2,3,4,另一種是性質(zhì)描述法,比如集合B=X|0X100且X屬于整數(shù)。集合論的奠基人康托爾在創(chuàng)建集合理論給出了許多公理和性質(zhì),這都成為后來集合在其他領(lǐng)域應(yīng)用的基礎(chǔ)。2.2.2 Java集合框架在Java語言中,Java語言的設(shè)計者對常用的數(shù)據(jù)結(jié)構(gòu)和算法做了一些規(guī)范(接口)和實現(xiàn)(具體實現(xiàn)接口的類)。所有抽象出來的數(shù)據(jù)結(jié)構(gòu)和操作(算法)統(tǒng)稱為Java集合框架(JavaCollectionFramework),。如圖2-1所示。2.2.3 Java

15、集合框架的使用Java程序員在具體應(yīng)用時,不必考慮數(shù)據(jù)結(jié)構(gòu)和算法的實現(xiàn)細節(jié),只需要用這些類創(chuàng)建出來一些對象,然后直接應(yīng)用就可以了,這樣就大大提高了編程效率。2.3 實施過程2.3.1 List的使用2.3.2 Set的使用2.3.3 Map的使用2.3.1 LIST的使用1.List接口List繼承自Collection接口。List是一種有序集合,List中的元素可以根據(jù)索引(順序號:元素在集合中處于的位置信息)進行取得/刪除/插入操作。跟Set集合不同的是,List允許有重復(fù)元素。對于滿足e1.equals(e2)條件的e1與e2對象元素,可以同時存在于List集合中。2.List實現(xiàn)類L

16、ist接口的實現(xiàn)類主要有ArrayList,LinkedList,Vector,Stack等。2.3.2 SET的使用1.Set接口Set 是繼承于Collection的接口。java中的set接口有如下的特點:不允許出現(xiàn)重復(fù)元素;集合中的元素位置無順序;有且只有一個值為null的元素。2.Set接口的實現(xiàn)類實現(xiàn)了Set接口的主要有HashSet、TreeSet、LinkedHashSet。HashSet依賴于HashMap,它實際上是通過HashMap實現(xiàn)的。HashSet中的元素是無序的。TreeSet依賴于TreeMap,它實際上是通過TreeMap實現(xiàn)的。TreeSet中的元素是有序的

17、。2.3.3 MAP的使用1.Map接口Map提供了一種映射關(guān)系,其中的元素是以鍵值對(key-value)的形式存儲的,能夠?qū)崿F(xiàn)根據(jù)key快速查找value;。Map中的鍵值對以Entry類型的對象實例形式存在;。鍵建(key值)不可重復(fù),value值可以重復(fù),一個value值可以和很多key值形成對應(yīng)關(guān)系,每個鍵最多只能映射到一個值。Map支持泛型,形式如:Map。Map中使用put(K key,V value)方法添加。2.已知實現(xiàn)類在java.util包中接口 Map 存儲鍵值對,作為一個元組存入。元組以鍵作為標記,鍵相同時,值覆蓋。類型參數(shù):K - 此映射所維護的鍵的類型;V - 映

18、射值的類型;其已知實現(xiàn)類:為HashMap、TreeMap。2.4 拓展知識1.Vector前面我們已經(jīng)提到,Java設(shè)計者們在對之前的容器類進行重新設(shè)計時保留了一些數(shù)據(jù)結(jié)構(gòu),其中就有Vector。用法上,Vector與ArrayList基本一致,不同之處在于Vector使用了關(guān)鍵字synchronized,將訪問和修改向量的方法都變成同步的了,所以對于不需要同步的應(yīng)用程序來說,類ArrayList比類Vector更高效。2.StackStack,棧類,是Java2之前引入的,繼承自類Vector。3.HashTableHashTable和前面介紹的HashMap很類似,它也是一個散列表,存儲

19、的內(nèi)容是鍵值對映射,不同之處在于,HashTable是繼承自Dictionary的,HashTable中的函數(shù)都是同步的,這意味著它也是線程安全的,另外,HashTable中key和value都不可以為null。上面的三個集合類都是在Java2之前推出的容器類,可以看到,盡管在使用中效率比較低,但是它們都是線程安全的。下面介紹兩個特殊的集合類。4.ConcurrentHashMapConcurrent,并發(fā),從名字就可以看出來ConcurrentHashMap是HashMap的線程安全版。同HashMap相比,ConcurrentHashMap不僅保證了訪問的線程安全性,而且在效率上與Hash

20、Table相比,也有較大的提高。關(guān)于ConcurrentHashMap的設(shè)計,我將會在下一篇關(guān)于并發(fā)編程的博客中介紹,敬請關(guān)注。5.CopyOnWriteArrayListCopyOnWriteArrayList,是一個線程安全的List接口的實現(xiàn),它使用了ReentrantLock鎖來保證在并發(fā)情況下提供高性能的并發(fā)讀取。2.5 拓展訓(xùn)練任務(wù)要求:實現(xiàn)省市兩級聯(lián)動。任務(wù)需求:構(gòu)建信息錄入界面,完成人員基本信息的錄入工作。其中籍貫中涉及的“省、市/縣”能實現(xiàn)聯(lián)動,即:選擇“省”時,“市”會根據(jù)選擇的“省”做相應(yīng)的變換。任務(wù)設(shè)計:省市/縣的信息存放在CityMap類中,InputFrame類為界

21、面類,TestInputFrame為測試類。其類圖如圖2-5-1所示。2.6 課后小結(jié)到這里,對于Java集合框架的總結(jié)就結(jié)束了,還有很多集合類沒有在這里提到,更多的還是需要大家自己去查去用。通過閱讀源碼,查閱資料,收獲很大。Java集合框架主要包括Collection和Map兩種類型。其中Collection又有3種子類型,分別是List、Set、Queue。Map中存儲的主要是鍵值對映射。規(guī)則集Set中存儲的是不重復(fù)的元素,線性表中存儲可以包括重復(fù)的元素,Queue隊列描述的是先進先出的數(shù)據(jù)結(jié)構(gòu),可以用LinkedList來實現(xiàn)隊列。效率上,規(guī)則集比線性表更高效。ArrayList主要是用

22、數(shù)組來存儲元素,LinkedList主要是用鏈表來存儲元素,HashMap的底層實現(xiàn)主要是借助數(shù)組+鏈表+紅黑樹來實現(xiàn)。Vector、HashTable等集合類效率比較低但都是線程安全的。包java.util.concurrent下包含了大量線程安全的集合類,效率上有較大提升。2.7 課后習(xí)題三、簡答題1. Java集合框架是什么?說出一些集合框架的優(yōu)點?2. Java集合框架的基礎(chǔ)接口有哪些?3. Iterator是什么?3. 遍歷一個List有哪些不同的方式?4. 如何決定選用HashMap還是TreeMap?5. ArrayList和LinkedList有何區(qū)別?6. ArrayList

23、和Vector有何異同點?Java高級程序設(shè)計第3章 Java反射機制3.1 應(yīng)用場景3.2 相關(guān)知識3.3 實施過程3.4 拓展知識3.5 拓展訓(xùn)練3.6 課后小結(jié)3.7 課后習(xí)題3.8 上機實訓(xùn)3.1 應(yīng)用場景在一些開源框架里,如Spring,Struts,Hibernate,MyBatis等,應(yīng)用程序會提供一個配置文件如xml文件或者properties,然后在Java類里面解析xml或properties里面的內(nèi)容,得到一個字符串,然后用反射機制,根據(jù)這個字符串獲得某個類的Class實例,這樣就可以動態(tài)配置一些東西,不用每一次都要在代碼里面去new或者做其他的事情,以后要改的話直接改配

24、置文件,代碼維護起來就很方便了,同時有時候要適應(yīng)某些需求,Java類里面不一定能直接調(diào)用另外的方法,這時候也可以通過反射機制來實現(xiàn)。應(yīng)用程序通過讀取配置文件來獲取到指定名稱的類的字節(jié)碼文件并加載其中的內(nèi)容進行調(diào)用,對一個類文件進行解剖,就可以取得任意一個已知名稱的class的內(nèi)部信息,包括其modifiers(諸如public,static等等)、superclass(例如Object)、實現(xiàn)之interfaces(例如Serializable),也包括fields和methods的所有信息,并可于運行時改變fields內(nèi)容或調(diào)用methods。3.2 相關(guān)知識3.2.1 Java反射機制的概

25、念3.2.2 反射機制的功能3.2.3 Java反射機制的相關(guān)API3.2.4 使用反射機制的步驟3.2.5 反射機制的應(yīng)用場景3.2.6 反射機制的優(yōu)缺點3.2.1 Java反射機制的概念Java反射機制在Java運行狀態(tài)中,對于任意一個類,我們都能夠知道這個類的所有屬性和方法;,對于任意一個對象,我們都能夠調(diào)用它的任意一個方法;。這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為Java語言的反射機制。3.2.2 反射機制的功能反射機制的功能如下:在運行時判定任意一個對象所屬的類;在運行時構(gòu)造任意一個類的對象;在運行時判定任意一個類所具有的成員變量和方法;在運行時調(diào)用任意一個對象的方法;生

26、成動態(tài)代理;。3.2.3 Java反射機制的相關(guān)APIjava.lang.reflect包提供了用于獲取類和對象的反射信息的類和接口。反射API允許對程序訪問有關(guān)加載類的字段,方法和構(gòu)造函數(shù)的信息進行編程訪問。它允許在安全限制內(nèi)使用反射的字段,方法和構(gòu)造函數(shù)對其底層對等進行操作。java.lang.Class; /類 java.lang.reflect.Constructor;/構(gòu)造方法 java.lang.reflect.Field; /類的成員變量 java.lang.reflect.Method;/類的方法java.lang.reflect.Modifier;/訪問權(quán)限3.2.4 使用反

27、射機制的步驟導(dǎo)入Jjava.lang.relfect包需遵循以下3三個步驟:第一步是獲得你想操作的類的java.lang.Class對象;第二步是調(diào)用諸如getDeclaredMethods的方法;第三步使用反射API來操作這些信息。3.2.5 反射機制的應(yīng)用場景Java反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法,常見的應(yīng)用如下逆向代碼 ,例如反編譯與注解相結(jié)合的框架 例如Retrofit單純的反射機制應(yīng)用框架 例如EventBus 2.x動態(tài)生成類框架 例如Gson3.2.6 反射機制的優(yōu)缺點可以實現(xiàn)動態(tài)創(chuàng)建對象和編

28、譯,體現(xiàn)出很大的靈活性(特別是在J2EE的開發(fā)中它的靈活性就表現(xiàn)的十分明顯)。通過反射機制我們可以獲得類的各種內(nèi)容,進行了反編譯。對于JAVA這種先編譯再運行的語言來說,反射機制可以使代碼更加靈活,更加容易實現(xiàn)面向?qū)ο?總結(jié)如下。優(yōu)點:運行期類型的判斷,動態(tài)類加載,動態(tài)代理使用反射。缺點:性能是一個問題,反射相當(dāng)于一系列解釋操作,通知jvm要做的事情,性能比直接的Java代碼要慢很多。3.3 實施過程任務(wù)需求:設(shè)有一個類Person,使用反射機制獲取該類的相關(guān)信息。任務(wù)設(shè)計:實體類Person,存放個人的基本信息,測試類TestPerson使用反射機制獲取Person類或其對象的封裝信息。其類

29、圖如圖3-3-11所示。任務(wù)需求:設(shè)有一個類Person,使用反射機制獲取該類的相關(guān)信息。任務(wù)設(shè)計:實體類Person,存放個人的基本信息,測試類TestPerson使用反射機制獲取Person類或其對象的封裝信息。其類圖如圖3-3-11所示。3.4 拓展知識Java的反射機制是Java特性之一,反射機制是構(gòu)建框架技術(shù)的基礎(chǔ)所在。在設(shè)計模式學(xué)習(xí)當(dāng)中,學(xué)習(xí)抽象工廠的時候就用到了反射來更加方便的讀取數(shù)據(jù)庫鏈接字符串等。Java中的配置文件為.properties,稱作屬性文件。通過反射讀取里邊的內(nèi)容。這樣代碼是固定的,但是配置文件的內(nèi)容我們可以改,這樣使我們的代碼靈活了很多!典型的除了Hibern

30、ate之外,還有Spring也用到很多反射機制。靈活掌握Java反射機制,對大家以后學(xué)習(xí)框架技術(shù)有很大的幫助3.5 拓展訓(xùn)練任務(wù)1 Java反射機制在工廠模式中的應(yīng)用先看簡單工廠模式(simple factory)。任務(wù)設(shè)計:接口Car,類Benz,Bmw,Bike。更好的理解工廠設(shè)計模式具體其類圖如圖3-5-3所示。3.6 課后小結(jié)1. 反射機制指的是程序在運行時能夠獲取自身的信息。在Jjava中,只要給定類的名字,那么就可以通過反射機制來獲得類的所有信息。2. 現(xiàn)在很多開框架都用到反射機制,hibernate、struts都是用反射機制實現(xiàn)的。3. 靜態(tài)編譯:在編譯時確定類型,綁定對象,即

31、通過。 動態(tài)編譯:運行時確定類型,綁定對象。動態(tài)編譯最大限度發(fā)揮了Jjava的靈活性,體現(xiàn)了多態(tài)的應(yīng)用,有以降低類之間的藕合性。一句話,反射機制的優(yōu)點就是可以實現(xiàn)動態(tài)創(chuàng)建對象和編譯,體現(xiàn)出很大的靈活性,特別是在J2EE的開發(fā)中它的靈活性就表現(xiàn)的十分明顯。4. 類中有什么信息,反射就可以獲得什么信息,不過前提是得知道類的名字。5. 有了Jjava反射機制,只需要寫一個dao類,四個方法,增刪改查,傳入不同的對象,無需為每一個表都創(chuàng)建dao類,反射機制會自動幫我們完成剩下的事情,反射機制就是專門幫我們做那些重復(fù)的有規(guī)則的事情。3.7 課后習(xí)題三、簡答題1.描述反射機制的作用。舉幾個反射的應(yīng)用。2.

32、簡述Java反射中API的主要類及作用。3.簡述Java反射的步驟。3.8 上機實訓(xùn)實訓(xùn)從配置文件中讀取類,并顯示其構(gòu)造函數(shù)。配置文件pertiesJava高級程序設(shè)計第4章 Java泛型4.1 應(yīng)用場景4.2 相關(guān)知識4.3 實施過程4.4 拓展知識4.5 拓展訓(xùn)練4.6 課后小結(jié)4.7 課后習(xí)題4.8 上機實訓(xùn)4.1 應(yīng)用場景假定我們有這樣一個需求:寫一個排序方法,能夠?qū)φ蛿?shù)組、字符串?dāng)?shù)組甚至其他任何類型的數(shù)組進行排序,該如何實現(xiàn)?答案是可以使用 Java 泛型。使用 Java 泛型的概念,我們可以寫一個泛型方法來對一個對象數(shù)組排序。然后,調(diào)用該泛型方法來對整型數(shù)組、浮點數(shù)數(shù)組、字符串?dāng)?shù)

33、組等進行排序。在使用框架SSH(Struts+Spring+Hibernate)開發(fā)一個應(yīng)用系統(tǒng)中,常使用DAO(Date Access Object)來訪問數(shù)據(jù)庫對象,完成數(shù)據(jù)庫中的數(shù)據(jù)和Java對象里的一種關(guān)聯(lián)關(guān)系的一系列操作CRUD。數(shù)據(jù)庫中的對象有很多,每一個對象都寫一個DAO,顯得很繁瑣,每一個DAO都要寫CRUD操作,這樣代碼的重復(fù)率高,如果使用泛型,代碼的復(fù)用得到了很好的應(yīng)用,提高了代碼的效率。4.2 相關(guān)知識4.2.1 泛型概念4.2.2 泛型的定義4.2.3 相關(guān)概念4.2.4 泛型的好處4.2.5 泛型使用時的注意事項4.2.1 泛型概念所謂“泛型”,就是“寬泛的數(shù)據(jù)類型”

34、,任意的數(shù)據(jù)類型。泛型是Java中一個非常重要的知識點,在Java集合類框架中泛型被廣泛應(yīng)用。使用泛型可以很好的解決“代碼復(fù)用”問題。4.2.2 泛型的定義1.定義泛型類在定義帶類型參數(shù)的類時,在緊跟類命之后的內(nèi),指定一個或多個類型參數(shù)的名字,同時也可以對類型參數(shù)的取值范圍進行限定,多個類型參數(shù)之間用,號分隔。定義完類型參數(shù)后,可以在定義位置之后的類的幾乎任意地方(靜態(tài)塊,靜態(tài)屬性,靜態(tài)方法除外)使用類型參數(shù), 就像使用普通的類型一樣。 注意,父類定義的類型參數(shù)不能被子類繼承。2.泛型方法在定義帶類型參數(shù)的方法時,在緊跟可見范圍修飾(例如public)之后的內(nèi),指定一個或多個類型參數(shù)的名字,

35、同時也可以對類型參數(shù)的取值范圍進行限定,多個類型參數(shù)之間用,號分隔。定義完類型參數(shù)后,可以在定義位置之后的方法的任意地方使用類型參數(shù),就像使用普通的類型一樣。 例如:4.2.3 相關(guān)概念1.通配符類型通配符一般是使用?代替具體的類型參數(shù),對類型參數(shù)賦予不確定值。例如 List 在邏輯上是List,List 等所有List的父類。2.上下邊界如果想限制使用泛型類別時,只能用某個特定類型或者是其子類型才能實例化該類型時,可以在定義類型時,使用extends關(guān)鍵字指定這個類型必須是繼承某個類,或者實現(xiàn)某個接口,也可以是這個類或接口本身。(1)類型通配符上限通過形如List來定義,如此定義就是通配符泛

36、型值接受Number及其下層子類類型。(2)類型通配符下限通過形如 List來定義,表示類型只能接受Number及其三層父類類型,如Objec類型的實例。3.擦除在使用泛型時沒有指明數(shù)據(jù)類型,為了不出現(xiàn)錯誤,編譯器會將所有數(shù)據(jù)向上轉(zhuǎn)型為 Object,即擦除泛型類型。在Java中,泛型是通過類型擦除來實現(xiàn)的,它是Java編譯器的概念,Java虛擬機運行時對泛型基本一無所知,理解這一點是很重要的,它有助于我們理解Java泛型的很多局限性。4.2.4 泛型的好處(1)類型安全。通過知道使用泛型定義的變量的類型限制,編譯器可以更有效地提高Java程序的類型安全。(2)消除強制類型轉(zhuǎn)換。消除源代碼中的

37、許多強制類型轉(zhuǎn)換。這使得代碼更加可讀,并且減少了出錯機會。所有的強制轉(zhuǎn)換都是自動和隱式的。(3)提高性能。4.2.5 泛型使用時的注意事項(1)泛型的類型參數(shù)只能是類類型(包括自定義類),不能是簡單類型。(2)泛型的類型參數(shù)可以有多個。4.3 任務(wù)實施4.2.1 任務(wù)一 泛型類的定義和使用4.2.2 任務(wù)二 泛型方法的定義和使用4.2.3 任務(wù)三 泛型接口的定義和使用4.3.1 任務(wù)一 泛型類的定義和使用1.定義泛型類在定義帶類型參數(shù)的類時,在緊跟類命之后的內(nèi),指定一個或多個類型參數(shù)的名字,同時也可以對類型參數(shù)的取值范圍進行限定,多個類型參數(shù)之間用,號分隔。定義完類型參數(shù)后,可以在定義位置之后

38、的類的幾乎任意地方(靜態(tài)塊,靜態(tài)屬性,靜態(tài)方法除外)使用類型參數(shù), 就像使用普通的類型一樣。 注意,父類定義的類型參數(shù)不能被子類繼承。4.3.2 任務(wù)二 泛型方法的定義和使用 2.泛型方法在定義帶類型參數(shù)的方法時,在緊跟可見范圍修飾(例如public)之后的內(nèi),指定一個或多個類型參數(shù)的名字, 同時也可以對類型參數(shù)的取值范圍進行限定,多個類型參數(shù)之間用,號分隔。 4.3.3 任務(wù)三 泛型接口的定義和使用在定義帶類型參數(shù)的方法時,在緊跟可見范圍修飾(例如public)之后的內(nèi),指定一個3.泛型接口先定義泛型接口:然后定義這個實現(xiàn)類來實現(xiàn)這個接口:4.4 拓展知識在開發(fā)高校圖書管理系統(tǒng)中,涉及多個數(shù)

39、據(jù)庫中的表,如:圖書基本信息表Book,教師信息表Teacher,學(xué)生信息表Student,用戶表User,出版社信息表Publishing,圖書分類信息表Category等。通過DAO(數(shù)據(jù)訪問對象,Date Access Object)實現(xiàn)對數(shù)據(jù)庫中的表進行數(shù)據(jù)操作,就是數(shù)據(jù)庫中的數(shù)據(jù)和Java對象里的一種關(guān)聯(lián)關(guān)系的一系列操作,包括增刪改查(CRUD)操作。這些基本信息表對應(yīng)Java的實體類。每個實體類都包含CRUD操作。這樣使得代碼冗余度較高。那么能否將這多個DAO相同的方法封裝成一個呢?這是可以的,使用泛型類和泛型方法。抽象一個BaseDao,里面封裝了實體類相同的操作,當(dāng)需要操作表的

40、時候,將T換成User或者是Teacher就可以了。4.6 課后小結(jié)1. 泛型的本質(zhì)便是類型參數(shù)化,通俗的說就是用一個變量來表示類型,這個類型可以是String,Integer等等不確定,表明可接受的類型。2. 泛型可以接受多個參數(shù),而Object經(jīng)過強制類型轉(zhuǎn)換可以轉(zhuǎn)換為任何類型,泛型可以把使用Object的錯誤提前到編譯后,而不是運行后,提升安全性。3. 在JAVA的虛擬機中并不存在泛型,泛型只是為了完善java體系,增加程序員編程的便捷性以及安全性而創(chuàng)建的一種機制,在JAVA虛擬機中對應(yīng)泛型的都是確定的類型,在編寫泛型代碼后,java虛擬中會把這些泛型參數(shù)類型都擦除,用相應(yīng)的確定類型來代

41、替,代替的這一動作叫做類型擦除,而用于替代的類型稱為原始類型,在類型擦除過程中,一般使用第一個限定的類型來替換,若無限定則使用Object。4. 泛型限定是通過?(通配符)來實現(xiàn)的,表示可以接受任意類型。5. 泛型的一些基本規(guī)則約束*泛型的類型參數(shù)必須為類的引用,不能用基本類型(int, short, long, byte, float, double, char, boolean)。*泛型是類型的參數(shù)化,在使用時可以用作不同類型(此處在說泛型類時會詳細說明)。*泛型的類型參數(shù)可以有多個。4.7 課后習(xí)題三、簡答題1. Java中的泛型是什么 ? 使用泛型的好處是什么?2. Java的泛型是如

42、何工作的 ? 什么是類型擦除?3. 什么是泛型中的限定通配符和非限定通配符 ?4. 如何編寫一個泛型方法,讓它能接受泛型參數(shù)并返回泛型類型?4.8 上機實訓(xùn)實訓(xùn)一、假如我們現(xiàn)在要定義一個類來表示坐標,要求坐標的數(shù)據(jù)類型可以是整數(shù)、小數(shù)和字符串,例如:x = 10、y = 10 x = 12.88、y = 129.65x = 東京180度、y = 北緯210度定義泛型類Point,其中定義一個打印坐標的泛型方法printPoint()。并定義一個測試類進行測試,以不同的格式輸出給定的坐標值。4.2.2 任務(wù)二 泛型方法的定義和使用4.2.2 任務(wù)二 泛型方法的定義和使用Java高級程序設(shè)計第5章

43、 Java序列化機制5.1 應(yīng)用場景5.2 相關(guān)知識5.3 實施過程5.4 拓展知識5.5 拓展訓(xùn)練5.6 課后小結(jié)5.7 課后習(xí)題5.8 上機實訓(xùn)5.1 應(yīng)用場景在分布式環(huán)境下,當(dāng)進行遠程通信時,彼此可以發(fā)送各種類型的數(shù)據(jù)。無論是何種類型的數(shù)據(jù),都會以二進制序列的形式在網(wǎng)絡(luò)上傳輸。發(fā)送方需要把這個Java對象轉(zhuǎn)換為字節(jié)序列,才能在網(wǎng)絡(luò)上傳送;接收方則需要把字節(jié)序列再恢復(fù)為Java對象。序列化是一種將對象以一連串的字節(jié)描述的過程,用于解決在對對象流進行讀寫操作時所引發(fā)的問題。序列化可以將對象的狀態(tài)寫在流里進行網(wǎng)絡(luò)傳輸,或者保存到文件、數(shù)據(jù)庫等系統(tǒng)中,并在需要時把該流讀取出來重新構(gòu)造一個相同的對

44、象。5.2 相關(guān)知識5.2.1 序列化的概念5.2.2 序列化應(yīng)用5.2.3 序列化的幾種方式5.2.4 對象實現(xiàn)機制5.2.1 序列化的概念將在內(nèi)存中的各種對象的狀態(tài)(也就是實例變量,不是方法)保存在磁盤中或者在網(wǎng)絡(luò)中進行傳輸,并且可以把保存的對象狀態(tài)再讀出來。將一個Java對象寫入IO流;與此對應(yīng)的,則是從IO流中恢復(fù)一個Java對象。Java提供這種保存對象狀態(tài)的機制,就是序列化。對象序列化是Java編程中的必備武器5.2.2 序列化應(yīng)用當(dāng)你想把內(nèi)存中的對象狀態(tài)保存到一個文件中或者數(shù)據(jù)庫中時候;當(dāng)你想用套接字在網(wǎng)絡(luò)上傳送對象的時候;當(dāng)你想通過RMI傳輸對象的時候。5.2.3 序列化的幾種

45、方式在Java中socket傳輸數(shù)據(jù)時,數(shù)據(jù)類型往往比較難選擇。可能要考慮帶寬、跨語言、版本的兼容等問題。比較常見的做法有兩種:一是把對象包裝成JSON字符串傳輸,二是采用Java對象的序列化和反序列化。隨著Google工具protoBuf的開源,protobuf也是個不錯的選擇。*提示:對JSON,Object Serialize,ProtoBuf 做個對比。5.2.4 對象實現(xiàn)機制為了方便開發(fā)人員將Java對象進行序列化及反序列化,Java提供了一套方便的API來支持。其中包括以下接口和類:java.io.Serializablejava.io.ExternalizableObjectOu

46、tputObjectInputObjectOutputStreamObjectInputStream5.2 相關(guān)知識5.2.1 序列化的概念5.2.2 序列化應(yīng)用5.2.3 序列化的幾種方式5.2.4 對象實現(xiàn)機制5.3 實施過程5.3.1 任務(wù)一 使用serializable序列化實體對象5.3.2 任務(wù)二 反序列化將Person對象從磁盤上讀出5.3.1 任務(wù)一 使用serializable序列化實體對象實現(xiàn)Serializable接口非常簡單,只要讓Jjava實現(xiàn)Serializable接口即可,無需實現(xiàn)任何方法。一個類一旦實現(xiàn)了Serializable接口,那么該類的對象就是可序列化的

47、。實現(xiàn)類的對象的序列化可以使用ObjectOutputStream,實現(xiàn)步驟如下:創(chuàng)建ObjectOutputStream對象;調(diào)用ObjectOutputStream的writeObject方法輸出對象。5.3.2 任務(wù)二 反序列化將Person對象從磁盤上讀出任務(wù)需求:反序列化將Employee對象從磁盤上讀出并修改員工信息,然后再寫入到文件中。分析:相應(yīng)的反序列化需要使用的類是ObjectInputStream,反序列化步驟如下:創(chuàng)建ObjectInputStream對象;使用ObjectInputStream的readObject方法取出對象。5.5 拓展訓(xùn)練常見Java序列化方式包括

48、Java原生以流的方法進行的序列化、Json序列化、FastJson序列化、Protobuff序列化。這里主要講解JSON序列化。Json(JavaScript Object Notation ,JavaScript對象表示方法),它是一個輕量級的數(shù)據(jù)交換格式,我們可以很簡單的來讀取和寫它,并且它很容易被計算機轉(zhuǎn)化和生成。Json的表現(xiàn)形式:Json的表現(xiàn)形式一般就三種(對象,數(shù)組,字符串),使用過程中,只是將對象與數(shù)組進行混合了任務(wù): 利用jackson進行json解析和序列化5.6 課后小結(jié)對序列化的理解通過序列化和反序列化實現(xiàn)了對象狀態(tài)的保存、傳輸以及對象的重建。在進行對象序列化時,開發(fā)

49、人員可以根據(jù)自身情況,靈活選擇默認方式或者自定義方式實現(xiàn)對象的序列化和反序列化。序列化機制是Java中對輕量級持久化的支持。序列化的字節(jié)流數(shù)據(jù)在網(wǎng)上傳輸?shù)陌踩珕栴}需要引起大家足夠的注意。序列化破壞了原有類的數(shù)據(jù)的”安全性“,例如private屬性是不起作用的。序列化帶來的問題網(wǎng)絡(luò)傳輸?shù)陌踩詫ο筮M行序列化之后轉(zhuǎn)化成有序的字節(jié)流在網(wǎng)絡(luò)上進行傳輸,如果通過默認的序列化方式, 則代碼都是以明文的方式進行傳輸。這種情況下,部分字段的安全性是不能保障的,特別是像密碼這樣的安全敏感的信息。因此,如果您需要對部分字段信息進行特 殊的處理,那么應(yīng)當(dāng)選擇定制對象的序列化方式,例如對密碼等敏感信息進行加密處理。類

50、自身封裝的安全性對對象進行序列化時,類中所定義的被private、final等 訪問控制符所修飾的字段是直接忽略這些訪問控制符而直接進行序列化的,因此,原本在本地定義的想要一次控制字段的訪問權(quán)限的工作都是不起作用的。對于序列化后的有序字節(jié)流來說一切都是可見的,而且是可重建的。這在一定程度上削弱了字段的安全性。因此,如果您需要特別處理這些信息,您可以選擇相應(yīng)的方式對這 些屬性進行加密或者其他可行的處理,以盡量保持數(shù)據(jù)的安全性。所以并非所有的對象都可以序列化。有很多原因,比如: 1.安全方面的原因,比如一個對象擁有private,public等field,對于一個要傳輸?shù)膶ο?,比如寫到文件,或者進

51、行rmi傳輸 等等,在序列化進行傳輸?shù)倪^程中,這個對象的private等域是不受保護的。2. 資源分配方面的原因,比如socket,thread類,如果可以序列化,進行傳輸或者保存,也無法對他們進行重新的資源分配,而且,也是沒有必要這樣實現(xiàn)。序列化注意事項關(guān)于對象的序列化,總結(jié)下注意事項:對象的類名、Field(包括基本類型、數(shù)組及對其他對象的引用)都會被序列化,對象的static Field,transient Field及方法不會被序列化;實現(xiàn)Serializable接口的類,如不想某個Field被序列化,可以使用transient關(guān)鍵字進行修飾;保證序列化對象的引用類型Filed的類也是

52、可序列化的,如不可序列化,可以使用transient關(guān)鍵字進行修飾,否則會序列化失??;反序列化時必須要有序列化對象的類的class文件;當(dāng)通過文件網(wǎng)絡(luò)讀取序列化對象的時候,必需按寫入的順序來讀取5.7 課后習(xí)題三、簡答題1. 什么是Java序列化,如何實現(xiàn)Java序列化?2. 在什么情況下需要序列化?3.Java中實現(xiàn)序列化有哪幾種方法?5.8 上機實訓(xùn)實訓(xùn)一、序列化的使用1.編寫一個可以序列號的個人賬戶類AccountRecordSerializable具有如下的成員變量:privateintaccount;privateStringfirstName;privateStringlastNa

53、me;privatedoublebalance;具有如下的成員方法:AccountRecordSerializable(intacct,Stringfirst,Stringlast,doublebal)/初始化intgetAccount()doublegetBalance()StringgetFirstName()StringgetLastName()voidsetAccount(intacct)voidsetBalance(doublebal)voidsetFirstName(Stringfirst)voidsetLastName(Stringlast)2.編寫一個類CreateSequen

54、tialFile將上述的AccountRecordSerializable對象寫入到順序文件中。成員方法voidopenFile()/使用Fileoutputstream和Objectoutputstream創(chuàng)建和打開磁盤文件clients.servoidaddRecords()/用戶通過鍵盤依次輸入accountfirstnamelasnamebalance構(gòu)建AccountRecordSerializable類對象,然后序列化到文件中。可以輸入多行信息。用戶按下ctrl+Z結(jié)束輸入。voidcloseFile()/關(guān)閉磁盤文件對象3.編寫測試類TestCreateSequentialFil

55、emain方法中創(chuàng)建CreateSequentialFile類對象,然后調(diào)用openFile()addRecords()closeFile()方法。Java高級程序設(shè)計第6章 Java多線程6.1 應(yīng)用場景6.2 相關(guān)知識6.3 實施過程6.4 拓展知識6.5 拓展訓(xùn)練6.6 課后小結(jié)6.7 課后習(xí)題6.8 上機實訓(xùn)6.1 應(yīng)用場景計算機可以同時完成多項任務(wù),稱為并發(fā)。并發(fā)完成的每個任務(wù)就是一個獨立線程。在網(wǎng)絡(luò)分布式、高并發(fā)應(yīng)用程序的情況下,Java多線程編程技術(shù)在很多開發(fā)工作中得到非常廣泛的應(yīng)用。經(jīng)典的多線程問題:1.火車票預(yù)訂問題。假定火車票有10000張,現(xiàn)有10個售票點。每個售票窗口就

56、像一個線程,它們各自運行,共同訪問相同的數(shù)據(jù)火車票的數(shù)量。由于多個線程并發(fā)地執(zhí)行,訪問共享同一數(shù)據(jù),會出現(xiàn)數(shù)據(jù)不一致的現(xiàn)象,所有必須要用同步鎖synchronized,保證某一時刻只能有一個線程執(zhí)行售票功能。2.經(jīng)典生產(chǎn)者與消費者問題。生產(chǎn)者不斷的往倉庫中存放產(chǎn)品,消費者從倉庫中消費產(chǎn)品。其中生產(chǎn)者和消費者都可以有若干個。在這里,生產(chǎn)者是一個線程,消費者是一個線程。倉庫容量有限,只有庫滿時生產(chǎn)者不能存放,庫空時消費者不能取產(chǎn)品,這就是線程的同步。3.客戶機/服務(wù)器通信問題。假如Server只能接受一個Client請求,當(dāng)?shù)谝粋€Client連接后就占據(jù)了這個位置,后續(xù)Client不能再繼續(xù)連接。

57、采用多線程機制,當(dāng)Server每接受到一個Client連接請求之后,都把處理流程放到一個獨立的線程里去運行,然后等待下一個Client連接請求,這樣就不會阻塞Server端接收請求了。6.2 相關(guān)知識6.2.1 相關(guān)概念6.2.2 線程的創(chuàng)建和啟動6.2.3 線程的生命周期6.2.4 線程的管理6.2.1 相關(guān)概念進程是指運行中的應(yīng)用程序,每個進程都有自己獨立的內(nèi)存空間。一個應(yīng)用程序可以同時啟動多個線程。幾乎所有的操作系統(tǒng)都支持同時運行多個任務(wù),一個任務(wù)通常就是一個程序,每個運行中的程序就是一個進程。當(dāng)一個程序運行時,內(nèi)部可能包含了多個順序執(zhí)行流,每個順序執(zhí)行流就是一個線程。一個進程可以由多個

58、線程組成,即在一個進程中可以同時運行多少不同的線程,他們分別執(zhí)行不同的任務(wù)。當(dāng)進程內(nèi)的多個線程同時運行時,這種運行方式被稱為并發(fā)運行。進程(Process):是計算機中的程序關(guān)于某數(shù)據(jù)集合上的一次運行活動,是系統(tǒng)進行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。在早期面向進程設(shè)計的計算機結(jié)構(gòu)中,進程是程序的基本執(zhí)行實體;在當(dāng)代面向線程設(shè)計的計算機結(jié)構(gòu)中,進程是線程的容器。程序是指令、數(shù)據(jù)及其組織形式的描述,進程是程序的實體。進程的特征特征動態(tài)性:進程的實質(zhì)是程序在多道程序系統(tǒng)中的一次執(zhí)行過程,進程是動態(tài)產(chǎn)生,動態(tài)消亡的。并發(fā)性:任何進程都可以同其他進程一起并發(fā)執(zhí)行獨立性:進程是一個能獨立運行

59、的基本單位,同時也是系統(tǒng)分配資源和調(diào)度的獨立單位;異步性:由于進程間的相互制約,使進程具有執(zhí)行的間斷性,即進程按各自獨立的、不可預(yù)知的速度向前推進結(jié)構(gòu)特征:進程由程序、數(shù)據(jù)和進程控制塊三部分組成。多個不同的進程可以包含相同的程序:一個程序在不同的數(shù)據(jù)集里就構(gòu)成不同的進程,能得到不同的結(jié)果;但是執(zhí)行過程中,程序不能發(fā)生改變。線程(Thread):有時被稱為輕量級進程(Lightweight Process,LWP),是程序執(zhí)行流的最小單元。一個標準的線程由線程ID,當(dāng)前指令指針(PC),寄存器集合和堆棧組成。另外,線程是進程中的一個實體,是被系統(tǒng)獨立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,

60、只擁有一點兒在運行中必不可少的資源,但它可與同屬一個進程的其他線程共享進程所擁有的全部資源。一個線程可以創(chuàng)建和撤消另一個線程,同一進程中的多個線程之間可以并發(fā)執(zhí)行。由于線程之間的相互制約,致使線程在運行中呈現(xiàn)出間斷性。線程也有就緒、阻塞和運行三種基本狀態(tài)。就緒狀態(tài)是指線程具備運行的所有條件,邏輯上可以運行,在等待處理機;運行狀態(tài)是指線程占有處理機正在運行;阻塞狀態(tài)是指線程在等待一個事件(如某個信號量),邏輯上不可執(zhí)行。每一個程序都至少有一個線程,若程序只有一個線程,那就是程序本身。線程是程序中一個單一的順序控制流程。進程內(nèi)一個相對獨立的、可調(diào)度的執(zhí)行單元,是系統(tǒng)獨立調(diào)度和分派CPU的基本單位指

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論