




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1. 在一個獨立的原始程序中,只能有一個public類,卻可以有許多non-public類。2.在一個Java程序中有且只能有一個main()方法由于Java程序是由類所組成,所以在完整的Java程序里,必須且至少有一個類。3.public static void main(String args) / main() method,主程序開始 public代表main()公有的method;static表示main()在沒有創(chuàng)建類對象的情況下,仍然可以被運行;void則表示main()方法沒有返回值。Main后的括號()中的參數(shù)String args表示運行該程序時所需要的參數(shù)4.·
2、單行注釋 / ·多行注釋 /* */ ·文檔注釋 /*用這種方法注釋的內(nèi)容會被解釋成程序的正式文檔,并能包含進如javadoc之類的工具生成的文檔里,用以說明該程序的層次結(jié)構(gòu)及其方法。*/ 5.標識符:可由任意順序的大小寫字母、數(shù)字、下劃線(_)和美元符號($)組成,但標識符不能以數(shù)字開頭,不能是Java中的保留關(guān)鍵字。6.變量的設置有以下三種方法:在聲明的時候設置、聲明后再設置、在程序中的任何位置聲明并設置。7基本數(shù)據(jù)類型 字節(jié) long(長整數(shù)) 8 int(整數(shù)) 4 short(短整數(shù)) 2 byte(位) 1 char() 1 boolean() 1 float(
3、) 4 double() 8 當最大值加上1時,結(jié)果反而變成表示范圍中最小的值;當最大值加上2時,結(jié)果變成表示范圍中次小的值,這就是數(shù)據(jù)類型的溢出。8. 使用浮點型數(shù)值時,默認的類型是double,在數(shù)值后面可加上D或是d,作為double類型的標識。在Java中,D或d是可有可無的。在數(shù)據(jù)后面加上F或是f,則作為float類型的識別。若是沒有加上,Java就會將該數(shù)據(jù)視為double類型,而在編譯時就會發(fā)生錯誤,錯誤提示會告訴設計者可能會失去精確度。9.自動類型轉(zhuǎn)換【擴大轉(zhuǎn)換】條件:放大精度1)轉(zhuǎn)換前的數(shù)據(jù)類型與轉(zhuǎn)換后的類型兼容。 【當兩個數(shù)中有一個為浮點數(shù)時,其運算的結(jié)果會直接轉(zhuǎn)換為浮點數(shù)
4、。當表達式中變量的類型不同時,Java會自動以較小的表示范圍轉(zhuǎn)換成較大的表示范圍后,再作運算。也就是說,假設有一個整數(shù)和雙精度浮點數(shù)作運算時,Java會把整數(shù)轉(zhuǎn)換成雙精度浮點數(shù)后再作運算,運算結(jié)果也會變成雙精度浮點數(shù)?!?)轉(zhuǎn)換后的數(shù)據(jù)類型的表示范圍比轉(zhuǎn)換前的類型大。強制類型轉(zhuǎn)換【縮小轉(zhuǎn)換】:失去精度10.一元運算符: a a的補碼-a a取反11. a+會先執(zhí)行整個語句后再將a的值加1;+b則先把b的值加1后,再執(zhí)行整個語句。12.運算符的優(yōu)先級a /= b- / 相當于計算 a = a / b 之后,再計算b- 13.表達式的類型轉(zhuǎn)換當Java發(fā)現(xiàn)程序的表達式中有類型不相符的情況時,會依據(jù)
5、下列的規(guī)則來處理類型的轉(zhuǎn)換。1)占用字節(jié)較少的類型轉(zhuǎn)換成占用字節(jié)較多的類型。 2)字符類型會轉(zhuǎn)換成int類型。 3)int類型會轉(zhuǎn)換成float類型。 4)表達式中若某個操作數(shù)的類型為double,則另一個操作數(shù)字也會轉(zhuǎn)換成double類型。5)布爾類型不能轉(zhuǎn)換成其它類型。 14. 一般來說程序的結(jié)構(gòu)包含有下面三種: 1)順序結(jié)構(gòu) 2)選擇結(jié)構(gòu) :switch (表達式) /switch語句里的選擇值只能是字符或是常量case 選擇值1:語句主體 1 ; break ; /break是跳出語句case 選擇值2 : 語句主體 2 ; break ; . case 選擇值n : 語句主體 n ;
6、 break ; default: 語句主體;/若是沒有定義default該執(zhí)行的語句,則什么也不會執(zhí)行,直接離開switch語句。 3)循環(huán)結(jié)構(gòu) 15. break語句可以強迫程序跳離循環(huán),當程序執(zhí)行到break語句時,即會離開循環(huán), 繼續(xù)執(zhí)行循環(huán)外的下一個語句,如果break語句出現(xiàn)在嵌套循環(huán)中的內(nèi)層循環(huán),則break 語句只會跳離當前層的循環(huán)。以下圖的for循環(huán)為例,在循環(huán)主體中有break語句時,當程序執(zhí)行到break,即會離開循環(huán)主體,而繼續(xù)執(zhí)行循環(huán)外層的語句。continue語句可以強迫程序跳到循環(huán)的起始處,當程序運行到continue語句時,即會停止運行剩余的循環(huán)主體,而是回到循
7、環(huán)的開始處繼續(xù)運行。以下圖的for循環(huán)為例,在循環(huán)主體中有continue語句,當程序執(zhí)行到continue,即會回到循環(huán)的起點,繼續(xù)執(zhí)行循環(huán)主體的部分語句。當判斷條件成立時,break語句與continue語句會有不同的執(zhí)行方式。Break語句不管情況如何,先離開循環(huán)再說;而continue語句則不再執(zhí)行此次循環(huán)的剩余語句,直接回到循環(huán)的起始處。16. 在循環(huán)里也可以聲明變量,但所聲明的變量只是局部變量,只要跳出循環(huán),這個變量便不能再使用。17.一維數(shù)組 兩個步驟:(1)聲明數(shù)組;(2)分配內(nèi)存給該數(shù)組。例:int score;/聲明score =new int3;/分配空間System.o
8、ut.println("n數(shù)組長度是: "+score.length); /輸出數(shù)組長度二維數(shù)組int score = new int43 ; / 聲明整型數(shù)組score,同時為其開辟一塊內(nèi)存空間在二維數(shù)組中,若是想取得整個數(shù)組的行數(shù),或者是某行元素的個數(shù)時,可利用“.length”來獲取num.length; / 計算數(shù)組num的行數(shù),其值為3num0.length / 計算數(shù)組num的第1行元素的個數(shù),其值為4Java允許二維數(shù)組中每行的元素個數(shù)均不相同。18. 面向?qū)ο蟮某绦蛟O計有三個主要特征,如下: 1.封裝性 2.繼承性 3.多態(tài)性1) 封裝性:a. 把對象的屬性
9、和行為看成一個密不可分的整體,將這兩者封裝在一個不可分割的獨立單位(即對象)中。b.把不需要讓外界知道的信息隱藏起來,有些對象的屬性及行為允許外界用戶知道或使用,但不允許更改,而另一些屬性或行為,則不允許外界知曉;或只允許使用對象的功能,而盡可能隱蔽對象的功能實現(xiàn)細節(jié)。 2)繼承性 3)多態(tài)性允許程序中出現(xiàn)重名現(xiàn)象 a. 方法重載:在一個類中,允許多個方法使用同一個名字,但方法的參數(shù)不同,完成的功能也不同。 b. 成員覆蓋:子類與父類允許具有相同的變量名稱,但數(shù)據(jù)類型不同,允許具有相同的方法名稱,但完成的功能不同。19. 聲明類Person時,類名中單詞的首字母最好是大寫的。 創(chuàng)建類: Per
10、son p; P=new person();或者Person p=new Person();/對象只有在實例化之后才能被使用,而實例化對象的關(guān)鍵字就是new。20. 訪問屬性:對象名稱.屬性名 訪問方法:對象名稱.方法名()例:Person p;=“張三”;page=25;ptalk();21. 【封裝類中的屬性或方法】“封裝”(encapsulation):是把屬性和方法包裝在一個類內(nèi)以限定成員的訪問,以起到保護數(shù)據(jù)的作用。 封裝屬性:private 屬性類型 屬性名 私有成員(private member)可限定類中的屬性,被限制成私有的屬性僅能供同一類內(nèi)的方法所訪問。封裝方法
11、:private 方法返回類型 方法名稱(參數(shù))在類的外部不能用對象去調(diào)用private聲明的屬性或方法。類的外部可訪問到類內(nèi)部的公有成員(public member)。在類內(nèi)部調(diào)用:在一個java程序中是可以通過對象去調(diào)用類中的方法的,當然類的內(nèi)部也能互相調(diào)用各自的方法垃圾對象:就是指程序中不再使用的對象引用匿名對象:只使用一次的對象,即沒有任何一個具體的對象名稱引用它例:new Person("張三",25) ;22.構(gòu)造方法:構(gòu)造方法可視為一種特殊的方法,它的主要作用是為所創(chuàng)建的對象賦初值。1)它具有與類名相同的名稱 【構(gòu)造方法的名稱必須與其所屬的類的類名稱相同,且不
12、能有返回值?!?)它沒有返回值構(gòu)造方法則是在創(chuàng)建對象時,便自動調(diào)用,并執(zhí)行構(gòu)造方法的內(nèi)容。因此,構(gòu)造方法無需在程序中直接調(diào)用,而是在對象產(chǎn)生時自動執(zhí)行。如果在程序中沒有明確聲明一構(gòu)造方法的話,系統(tǒng)會自動為類加入一個無參的且什么都不做的構(gòu)造方法。類似于下面代碼: public Person() 所以,之前所使用的程序雖然沒有明確的聲明構(gòu)造方法,也是可以正常運行的。23.構(gòu)造方法的重載:只要構(gòu)造方法的參數(shù)個數(shù)不同,或是類型不同,便可定義多個名稱相同的構(gòu)造方法。在java程序中只要明確的聲明了構(gòu)造方法,則默認的構(gòu)造方法將不會被自動生成。24.對象的比較:“= =”運算符與equals()方法a. 用
13、的“=”比較,比較的是內(nèi)存地址值b. “equals”是比較內(nèi)容的 String str1 = new String("java") ; String str2 = new String("java") ; (str1.equals(str2) => str1 equals str225.兩種String對象的聲明方式的不同在哪? String str1 = new String("java"); String str2 = "java"String對象的內(nèi)容一旦聲明則不能輕易改變。如果想改變一個String
14、對象的值,則第一步要做的是先將原有的String引用斷開,之后再開辟新的內(nèi)存空間,而且如果用new關(guān)鍵字開辟String對象的內(nèi)存空間的話,則實際上就開辟了兩個內(nèi)存空間26.this關(guān)鍵字1)this表示當前對象: = name ;2)如果在程序中想用某一構(gòu)造方法調(diào)用另一構(gòu)造方法,可以用this來實現(xiàn),具體的調(diào)用形式如下: this() 構(gòu)造方法是在實例化一對象時被自動調(diào)用的,也就是說在類中的所有方法里,只有構(gòu)造方法是被優(yōu)先調(diào)用的,所以使用this調(diào)用構(gòu)造方法必須也只能放在構(gòu)造方法的第一行.27.static 關(guān)鍵字靜態(tài)變量:聲明的屬性是所有對象共享的。靜態(tài)方法:既可以在聲明
15、變量時使用,也可以用其來聲明方法,用它聲明的方法有時也被稱為“類方法”。 如果在類中聲明了一static類型的屬性,則此屬性既可以在非static類型的方法中使用,也可以在static類型的方法中使用。但用static類型的屬性調(diào)用非static類型的屬性時,則會出現(xiàn)錯誤。28.構(gòu)造方法的私有:構(gòu)造方法雖然被私有了,但并不一定是說此類不能產(chǎn)生實例化對象,只是產(chǎn)生這個實例化對象的位置有所變化,即只能在本類中產(chǎn)生實例化對象。29.對象數(shù)組的使用例:創(chuàng)建三個Person 類類型的數(shù)組元素法一:Person p=new Person3;P0=new Person();P1=new Person();P
16、2=new Person();法二:【動態(tài)初始化】for(i=0;i<p.length;i+) Pi=new Person();法三:【靜態(tài)初始化】Person p=new Person() , new Person() , new Person() /采用靜態(tài)方式初始化對象數(shù)組利用父類的變量數(shù)組來訪問子類的內(nèi)容的較好的做法是:(1) 先創(chuàng)建父類的變量數(shù)組; (2) 利用數(shù)組元素創(chuàng)建子類的對象,并以它來訪問子類的內(nèi)容。30.內(nèi)部類:在類內(nèi)部也可以定義另一個類 內(nèi)部類可聲明成public或private。當內(nèi)部類聲明成public或private時,對其訪問的限制與成員變量和成員方法完全相
17、同。內(nèi)部類Inner可以直接調(diào)用外部類Outer中的score屬性外部類是無法找到內(nèi)部類中所聲明的屬性,而內(nèi)部類則可以訪問外部類的屬性。用static可以聲明屬性或方法,而用static也可以聲明內(nèi)部類,用static聲明的內(nèi)部類則變成外部類,但是用static聲明的內(nèi)部類不能訪問非static的外部類屬性。31.在類外部引用內(nèi)部類:內(nèi)部類也可以通過創(chuàng)建對象從外部類之外被調(diào)用,只要將內(nèi)部類聲明為public即可。在方法中定義內(nèi)部類:內(nèi)部類不僅可以在類中定義,也可以在方法中定義內(nèi)部類。final定義的局部變量:相當于是一個常量,它的生命周期超出方法運行的生命周期31.繼承在java中只允許單繼承
18、,而不允許多重繼承,也就是說一個子類只能有一個父類,但是java中卻允許多層繼承。錯誤正確子類對象在實例化時會默認先去調(diào)用父類中的無參構(gòu)造方法,之后再調(diào)用本類中的相應構(gòu)造方法。 如果程序中指定了構(gòu)造方法,則默認構(gòu)造方法不會再生成。只要在父類中增加一個什么都不做的構(gòu)造方法,這一問題就可以解決了32. super:主要的功能是完成子類調(diào)用父類中的內(nèi)容,也就是調(diào)用父類中的屬性或方法。super.父類中的屬性; super.父類中的方法() ;用super調(diào)用父類中的構(gòu)造方法,只能放在程序的第一行,并且this()與super()只可使用其中一條。33.private:只要父類中的屬性被“privat
19、e”聲明的話,那么子類就再也無法訪問到它了。實際上并不是這樣的,在父類中加入了private關(guān)鍵字修飾,其目的只是相當于對子類隱藏了此屬性,子類無法去顯式的調(diào)用這些屬性,但是卻可以隱式地去調(diào)用。【子類在繼承父類時,會繼承父類中的全部的屬性與方法?!?4.復寫:它是在子類當中,定義名稱、參數(shù)個數(shù)與類型均與父類相同的方法,用以復寫父類里的方法; 重載:它是指在相同類內(nèi),定義名稱相同,但參數(shù)個數(shù)或類型不同的方法,因此Java便可依據(jù)參數(shù)的個數(shù)或類型調(diào)用相應的方法。注意:子類復寫父類中的方法時,被子類復寫的方法不能擁有比父類中更嚴格的訪問權(quán)限。public權(quán)限要高于default權(quán)限。原有的類稱為基類
20、或父類,而新的類則稱為派生類或子類35.this與super比較36.抽象類· 抽象類和抽象方法都必須用abstract關(guān)鍵字來修飾。 · 抽象類不能被實例化,也就是不能用new關(guān)鍵字去產(chǎn)生對象。· 抽象方法只需聲明,而不需實現(xiàn)。· 含有抽象方法的類必須被聲明為抽象類,抽象類的子類必須復寫所有的抽象方法后才能被實例化,否則這個子類還是個抽象類。在抽象類定義的語法中,方法的定義可分為兩種:一種是一般的方法;另一種是“抽象方法”,它是以abstract關(guān)鍵字為開頭的方法,此方法只聲明了返回值的數(shù)據(jù)類型、方法名稱與所需的參數(shù),但沒有定義方法體。在抽象類中,也可
21、以擁有構(gòu)造方法,但是這些構(gòu)造方法必須在子類中被調(diào)用。37.Object類: 它是所有類的父類,如果一個類沒有使用extends關(guān)鍵字明確標識繼承另外一個類,那么這個類就默認繼承Object類。Object類是Java類層中的最高層類,是所有類的超類。換句話說,Java中任何一個類都是它的子類。由于所有的類都是由Object類衍生出來的,所以Oject類中的方法適用于所有類。38.final關(guān)鍵字:1) final標記的類不能被繼承。【最終類沒有子類】2) final標記的方法不能被子類復寫。3) final標記的變量(成員變量或局部變量)即為常量,只能賦值一次。39.接口1)接口里的數(shù)據(jù)成員必
22、須初始化,且數(shù)據(jù)成員均為常量。 2)接口里的方法必須全部聲明為abstract,也就是說,接口不能像抽象類一樣保有一般的方法,而必須全部是“抽象方法”。接口與一般類一樣,本身也具有數(shù)據(jù)成員與方法,但數(shù)據(jù)成員一定要賦初值,且此值將不能再更改,方法也必須是“抽象方法”。也正因為方法必須是抽象方法,而沒有一般的方法,抽象方法聲明的關(guān)鍵字abstract是可以省略的。相同的情況也發(fā)生在數(shù)據(jù)成員身上,因數(shù)據(jù)成員必須賦初值,且此值不能再被更改,所以聲明數(shù)據(jù)成員的關(guān)鍵字final也可省略。利用接口打造新的類的過程,稱之為接口的實現(xiàn)(implementation)。一個接口可以同時繼承多個接口,也就是同時繼承
23、了多個接口的抽象方法與常量。40.對象的多態(tài)性Java對象的多態(tài)性分為:向上轉(zhuǎn)型(自動)、向下轉(zhuǎn)型(強制)。41. 復寫Object類中的equals() method可用來比較兩個類的對象是否相等。42. 通過instanceof關(guān)鍵字,可以判斷對象屬于那個類。43.異常處理常見異常:1、算術(shù)異常(ArithmeticException)。2、沒有給對象開辟內(nèi)存空間時會出現(xiàn)空指針異常(NullPointerException)。3、找不到文件異常(FileNotFoundException)。4、數(shù)組下標超出異常(ArrayIndexOutOfBoundsException)所有的異常都是以
24、類的類型存在,除了內(nèi)置的異常類之外,Java也可以自定義的異常類。如果沒有編寫相應的處理異常的程序代碼,則Java的默認異常處理機制會先拋出異常、然后停止程序運行。異常的處理: 1) try程序塊若是有異常發(fā)生時,程序的運行便中斷,并拋出“異常類所產(chǎn)生的對象”。2)拋出的對象如果屬于catch()括號內(nèi)欲捕獲的異常類,則catch會捕捉此異常,然后進到catch的塊里繼續(xù)運行。3)無論try程序塊是否有捕捉到異常,或者捕捉到的異常是否與catch()括號里的異常相同,最后一定會運行finally塊里的程序代碼。finally的程序代碼塊運行結(jié)束后,程序再回到try-catch-finally塊
25、之后繼續(xù)執(zhí)行。finally塊是可以省略的。如果省略了finally塊不寫,則在catch()塊運行結(jié)束后,程序跳到try-cath塊之后繼續(xù)執(zhí)行。通過異常的機制,即使程序運行時發(fā)生問題,只要能捕捉到異常,程序便能順利地運行到最后,且還能適時的加入對錯誤信息的提示。Error類專門用來處理嚴重影響程序運行的錯誤,可是通常程序設計者不會設計程序代碼去捕捉這種錯誤,其原因在于即使捕捉到它,也無法給予適當?shù)奶幚?,如JAVA虛擬機出錯就屬于一種Error。不同于Error類,Exception類包含了一般性的異常,這些異常通常在捕捉到之后便可做妥善的處理,以確保程序繼續(xù)運行。RunntimeExcep
26、tion即使不編寫異常處理的程序代碼,依然可以編譯成功,而這種異常必須是在程序運行時才有可能發(fā)生,例如:數(shù)組的索引值超出了范圍。IOException 一定要編寫異常處理的程序代碼才行,它通常用來處理與輸入/輸出相關(guān)的操作,如文件的訪問、網(wǎng)絡的連接等。如何拋出異常?1)程序中拋出異常 throw 異常類實例對象;2)指定方法拋出異常方法名稱(參數(shù)) throws 異常類1,異常類2,在調(diào)用用throws拋出異常的方法時,可以將此異常在方法中再向上傳遞,而main()方法是整個程序的起點,所以如果在main()方法處如果再用throws拋出異常,則此異常就將交由JVM進行處理了。自定義異常:cl
27、ass 異常名稱 extends Exception 44.包及訪問權(quán)限package package名稱 ;import語句import package名稱.類名稱;通過import命令,可將某個package內(nèi)的整個類導入,因此后續(xù)的程序代碼便不用再寫上被訪問package的名稱了。45.JDK中常見的包1、 java.lang 包含一些Java語言的核心類,如String、Math、Integer、System和Thread,提供常用功能。在java.lang包中還有一個子包:java.lang.reflect用于實現(xiàn)java類的反射機制。2、 java.awt 包含了構(gòu)成抽象窗口工具集
28、(abstract window toolkits)的多個類,這些類被用來構(gòu)建和管理應用程序的圖形用戶界面(GUI)。3、 javax.swing 此包用于建立圖形用戶界面,此包中的組件相對于java.awt包而言是輕量級組件。4、 java.applet 包含applet運行所需的一些類。5、 包含執(zhí)行與網(wǎng)絡相關(guān)的操作的類。 6、 java.io 包含能提供多種輸入/輸出功能的類。7、 java.util 包含一些實用工具類,如定義系統(tǒng)特性、與日期日歷相關(guān)的函數(shù)。46.類成員的訪問控制權(quán)限1)private訪問控制符在前面已經(jīng)介紹了private訪問控制符的作用,如果一個成員方法或成員變量名
29、前使用了private訪問控制符,那么這個成員只能在這個類的內(nèi)部使用。注意:不能在方法體內(nèi)聲明的變量前加private修飾符。2 )默認訪問控制符 如果一個成員方法或成員變量名前沒有使用任何訪問控制符,就稱這個成員所擁有的是默認的(default)訪問控制符。默認的訪問控制成員可以被這個包中的其它類訪問。如果一個子類與其父類位于不同的包中,子類也不能訪問父類中的默認訪問控制成員。3 ) protected訪問控制符 如果一個成員方法或成員變量名前使用了protected訪問控制符,那么這個成員既可以被同一個包中的其它類訪問,也可以被不同包中的子類訪問。4 ) public訪問控制符 如果一個成
30、員方法或成員變量名前使用了public訪問控制符,那么這個成員可以被所有的類訪問,不管訪問類與被訪問類是否在同一個包中。使用jar命令可以將一個包打成一個jar文件,供用戶使用。44.Java多線程它可以讓不同的程序塊一起運行,可讓程序運行更為順暢,同時也可達到多任務處理的目的。1)進程是程序的一次動態(tài)執(zhí)行過程,它經(jīng)歷了從代碼加載、執(zhí)行到執(zhí)行完畢的一個完整過程,這個過程也是進程本身從產(chǎn)生、發(fā)展到最終消亡的過程。2)線程是比進程更小的執(zhí)行單位,線程是進程內(nèi)部單一的一個順序控制流。所謂多線程是指一個進程在執(zhí)行過程中可以產(chǎn)生多個線程,這些線程可以同時存在、同時運行,形成多條執(zhí)行線索。一個進程可能包含
31、了多個同時執(zhí)行的線程。線程和進程的主要差別體現(xiàn)在以下兩個方面: (1)同樣作為基本的執(zhí)行單元,線程是劃分得比進程更小的執(zhí)行單位。(2)每個進程都有一段專用的內(nèi)存區(qū)域。與此相反,線程卻共享內(nèi)存單元(包括代碼和數(shù)據(jù)),通過共享的內(nèi)存單元來實現(xiàn)數(shù)據(jù)交換、實時通信與必要的同步操作。實現(xiàn)多線程的兩種方法:(1) 通過繼承Thread類實現(xiàn)多線程class 類名稱 extends Thread / 從Thread類擴展出子類 屬性 方法 修飾符 run() / 復寫Thread類里的run()方法以線程處理的程序; (2) 通過實現(xiàn)Runnable接口實現(xiàn)多線程在Java中如果一個類繼承了某一個類,同時又
32、想采用多線程技術(shù)的時,就不能用Thread類產(chǎn)生線程,因為Java不允許多繼承,這時就要用Runnable接口來創(chuàng)建線程了。class 類名稱 implements Runnable / 實現(xiàn)Runnable接口 屬性 方法 修飾符 run() / 復寫Thread類里的run()方法以線程處理的程序; 在Runnable接口中并沒有start()方法,所以一個類實現(xiàn)了Runnable接口也必須用Thread類中的start()方法來啟動多線程。實現(xiàn)Runnable接口相對于繼承Thread類來說,有如下顯著的優(yōu)勢:(1)適合多個相同程序代碼的線程去處理同一資源的情況,把虛擬CPU(線程)同程
33、序的代碼、數(shù)據(jù)有效分離,較好地體現(xiàn)了面向?qū)ο蟮脑O計思想。(2)可以避免由于Java的單繼承特性帶來的局限。開發(fā)中經(jīng)常碰到這樣一種情況,即:當要將已經(jīng)繼承了某一個類的子類放入多線程中,由于一個類不能同時有兩個父類,所以不能用繼承Thread類的方式,那么就只能采用實現(xiàn)Runnable接口的方式了。(3)增強了程序的健壯性,代碼能夠被多個線程共享,代碼與數(shù)據(jù)是獨立的。當多個線程的執(zhí)行代碼來自同一個類的實例時,即稱它們共享相同的代碼。多個線程可以操作相同的數(shù)據(jù),與它們的代碼無關(guān)。當共享訪問相同的對象時,即共享相同的數(shù)據(jù)。當線程被構(gòu)造時,需要的代碼和數(shù)據(jù)通過一個對象作為構(gòu)造函數(shù)實參傳遞進去,這個對象就
34、是一個實現(xiàn)了Runnable接口的類的實例。任何線程一般具有五種狀態(tài),即創(chuàng)建、就緒、運行、阻塞、終止。(1)新建Thread thread=new Thread(2)就緒新建線程對象后,調(diào)用該線程的start()方法就可以啟動線程。當線程啟動時,線程進入就緒狀態(tài)。此時,線程將進入線程隊列排隊,等待CPU服務,這表明它已經(jīng)具備了運行條件。(3)運行當就緒狀態(tài)的線程被調(diào)用并獲得處理器資源時,線程就進入了運行狀態(tài)。此時,自動調(diào)用該線程對象的run()方法。run()方法定義了該線程的操作和功能。(4)堵塞一個正在執(zhí)行的線程在某些特殊情況下,如被人為掛起或需要執(zhí)行耗時的輸入輸出操作時,將讓出CPU并暫時中止自己的執(zhí)行,進入堵塞狀態(tài)。在可執(zhí)行狀態(tài)下,如果調(diào)用sleep()、suspend()、wait()等方法,線程都將進入堵塞狀態(tài)。堵塞時,線程不能進入排隊隊列,只有當引起堵塞的原因被消除后,線程才可以轉(zhuǎn)入就緒狀態(tài)。(5)死亡線程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學習2025年創(chuàng)業(yè)扶持政策在不同經(jīng)濟體的表現(xiàn)試題及答案
- 小學教師教育教學反思與時間管理的考題
- 小學教師教育教學反思與決策試題及答案
- 新時期農(nóng)產(chǎn)品線上銷售考核試題及答案
- 銀川市九年級試卷及答案
- 新能源汽車市場營銷中的數(shù)字化轉(zhuǎn)型試題及答案
- 未來汽車行業(yè)市場動態(tài)考試及答案
- 方程面試題及答案高中
- 家具行業(yè)的市場細分與用戶需求匹配的研究試題及答案
- 理解物理考點的邏輯結(jié)構(gòu)與方法試題及答案
- GJB9001C-2017組織內(nèi)外部環(huán)境因素的相關(guān)方需求和期望分析與風險和機遇識別評價分析及應對措施一覽表
- (正式版)CB∕T 4552-2024 船舶行業(yè)企業(yè)安全生產(chǎn)文件編制和管理規(guī)定
- 公司營銷管理體制改革方案
- 七年級語文下冊專項練習知識(對聯(lián))
- 第7課 珍視親情 學會感恩(教案)-【中職專用】高一思想政治《心理健康與職業(yè)生涯》(高教版2023·基礎模塊)
- 2024年度幼小銜接全套數(shù)學課件
- 淄博市2024屆高三二模歷史試題卷(含答案)
- MOOC 動物學-華中農(nóng)業(yè)大學 中國大學慕課答案
- 凈水設備驗收方案
- 九年級英語單詞默寫表(人教版)
- 邏輯門公開課教案教學設計課件
評論
0/150
提交評論