




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄TOC\o"1-5"\h\z\o"CurrentDocument"原碼、反碼、補(bǔ)碼 5\o"CurrentDocument"原碼 5\o"CurrentDocument"反碼 5\o"CurrentDocument"補(bǔ)碼 5負(fù)數(shù)的補(bǔ)碼轉(zhuǎn)換為十進(jìn)制數(shù) 6\o"CurrentDocument"char 6\o"CurrentDocument"運(yùn)算符 6移位運(yùn)算符 6位運(yùn)算符 7邏輯運(yùn)算符 7\o"CurrentDocument"流程控制 7\o"CurrentDocument"switch 7\o"CurrentDocument"break和continue 8\o"CurrentDocument"方法 8\o"CurrentDocument"構(gòu)造方法 8\o"CurrentDocument"方法重載 8\o"CurrentDocument"this 9\o"CurrentDocument"繼承 9\o"CurrentDocument"super 9\o"CurrentDocument"多態(tài)(polymorphism) 10\o"CurrentDocument"instanceof 10\o"CurrentDocument"static 11\o"CurrentDocument"final 11\o"CurrentDocument"abstract 12\o"CurrentDocument"類的加載 12觸發(fā)類加載的幾種情況 12類加載的順序 12\o"CurrentDocument"接口(interface) 13\o"CurrentDocument"訪問(wèn)控制 14\o"CurrentDocument"Object類 15\o"CurrentDocument"clone() 15\o"CurrentDocument"對(duì)象克隆過(guò)程 15\o"CurrentDocument"淺復(fù)制和深復(fù)制概念 16\o"CurrentDocument"finalize() 16\o"CurrentDocument"equals(Objectobj) 16\o"CurrentDocument"toString() 16\o"CurrentDocument"String類及對(duì)象池 16\o"CurrentDocument"Stringa="hello"; 17\o"CurrentDocument"Stringc=newString("hello"); 17\o"CurrentDocument"StringBuffer和StringBuilder 17\o"CurrentDocument"主方法參數(shù) 18\o"CurrentDocument"方法的可變長(zhǎng)參數(shù) 18\o"CurrentDocument"包裝類 18\o"CurrentDocument"Number 19\o"CurrentDocument"自動(dòng)封箱 /自動(dòng)解封(Autoboxing/Unboxing) 19\o"CurrentDocument"對(duì)象池 19\o"CurrentDocument"內(nèi)部類 20\o"CurrentDocument"意義 20\o"CurrentDocument"四種形式的內(nèi)部類 20\o"CurrentDocument"靜態(tài)內(nèi)部類 20\o"CurrentDocument"成員內(nèi)部類 21\o"CurrentDocument"局部?jī)?nèi)部類 22\o"CurrentDocument"匿名內(nèi)部類 22內(nèi)部類的應(yīng)用 24\o"CurrentDocument"集合框架(CollectionFramework) 24\o"CurrentDocument"Iterator接口和Iterable接口 25\o"CurrentDocument"Connection接口和 Connections類 25\o"CurrentDocument"java.util.Collection 25\o"CurrentDocument"java.util.Collections 25\o"CurrentDocument"List(列表)接口 25\o"CurrentDocument"ArrayList 26\o"CurrentDocument"LinkedList 26\o"CurrentDocument"Vector 26\o"CurrentDocument"214 Set(集合)接口 26\o"CurrentDocument"HashSet 27\o"CurrentDocument"TreeSet 29排序的兩種辦法 29\o"CurrentDocument"java.Iang.Comparable(可比較的) 29\o"CurrentDocument"java.util.Comparator( 比較器) 30\o"CurrentDocument"Map 30\o"CurrentDocument"HashMap 30\o"CurrentDocument"Hashtable 31\o"CurrentDocument"Hashtable下的子類 Properties類 31\o"CurrentDocument"SortedMap接口下的 TreeMap類 31\o"CurrentDocument"泛型(Generic) 32\o"CurrentDocument"泛型特點(diǎn) 32\o"CurrentDocument"通配符 32\o"CurrentDocument"上限通配符: 32\o"CurrentDocument"下限通配符 33\o"CurrentDocument"總結(jié): 33\o"CurrentDocument"運(yùn)用 34\o"CurrentDocument"異常 34異常處理基礎(chǔ) 34異常的類繼承結(jié)構(gòu) 34常見(jiàn)的未檢查異常 35throw 35\o"CurrentDocument"自定義異常類 36\o"CurrentDocument"反射(Reflection) 37反射需要用到的類 37\o"CurrentDocument"java.lang.Class 37\o"CurrentDocument"java.lang.reflect.Field 38\o"CurrentDocument"java.lang.Package 38\o"CurrentDocument"java.lang.relect.Modifier 38\o"CurrentDocument"java.lang.reflect.Mothed 38\o"CurrentDocument"java.lang.reflect.Array 38\o"CurrentDocument"java.lang.reflect.Constructor 38242 三種獲得某個(gè)類的Class對(duì)象的方法 38\o"CurrentDocument"Classc=Class.forName(”類名”); 38\o"CurrentDocument"Classc=類名.class; 39\o"CurrentDocument"Classc=對(duì)象名.getClass(); 39所能探查出來(lái)的類的特征 39通過(guò)反射生成一個(gè)類的實(shí)例 39\o"CurrentDocument"第一種方法 40\o"CurrentDocument"第二種方法 40\o"CurrentDocument"File 40\o"CurrentDocument"構(gòu)造方法 40\o"CurrentDocument"重點(diǎn)方法 41\o"CurrentDocument"目錄 42\o"CurrentDocument"流 42\o"CurrentDocument"字節(jié)流 42\o"CurrentDocument"字符流 44\o"CurrentDocument"節(jié)點(diǎn)流(NodeStream): 45過(guò)濾流(FilterStream) 45\o"CurrentDocument"ObjectInputStream和ObjectOutputStream 46\o"CurrentDocument"字節(jié)流轉(zhuǎn)化成字符流的橋轉(zhuǎn)換器 48文本文件和二進(jìn)制文件 50\o"CurrentDocument"線程 50概念與原理 50操作系統(tǒng)中線程和進(jìn)程的概念 50Java中的線程 51Java中的線程模型 51一些常見(jiàn)問(wèn)題 51線程狀態(tài)的轉(zhuǎn)換 52線程的七種狀態(tài) 52阻止線程執(zhí)行 54線程的同步與鎖 55同步和鎖定 55靜態(tài)方法同步 60如果線程不能獲得鎖會(huì)怎么樣 60何時(shí)需要同步 61線程安全類 61線程死鎖 62線程同步小結(jié) 63線程的交互 64線程交互的基礎(chǔ)知識(shí) 64多個(gè)線程在等待一個(gè)對(duì)象鎖時(shí)候使用notifyAll() 66守護(hù)線程(后臺(tái)服務(wù)線程) 67并發(fā)協(xié)作-生產(chǎn)者消費(fèi)者模型 68volatile關(guān)鍵字 68網(wǎng)絡(luò)編程 69TCPSocket編程 69ServerSocket 70Socket 70UDPSocket編程 71DatagramSocket 71DatagramPacket 71原碼、反碼、補(bǔ)碼原碼將最高位作為符號(hào)位(以0代表正,1代表負(fù)),其余各位代表數(shù)值本身的絕對(duì)值(以二進(jìn)制表示)。為了簡(jiǎn)單起見(jiàn),我們用1個(gè)字節(jié)來(lái)表示一個(gè)整數(shù):+7的原碼為:00000111-7的原碼為:10000111問(wèn)題:+0的原碼為:00000000-0的原碼為:10000000反碼一個(gè)數(shù)如果為正,則它的反碼與原碼相同;一個(gè)數(shù)如果為負(fù),則符號(hào)位為1,其余各位是對(duì)原碼取反。為了簡(jiǎn)單起見(jiàn),我們用1個(gè)字節(jié)來(lái)表示一個(gè)整數(shù):+7的反碼為:00000111-7的反碼為:11111000問(wèn)題:+0的反碼為:-0的反碼為:補(bǔ)碼利用溢出,我們可以將減法變成加法。對(duì)于十進(jìn)制數(shù),如果從9得到結(jié)果5,可以用減法:9-4=5;因?yàn)?+6=10,我們將6作為4的補(bǔ)數(shù),將上式的減法改寫為加法: 9+6=15;去掉高位1(也就是減去10),得到結(jié)果5。對(duì)于16進(jìn)制數(shù),如果從C得到結(jié)果5,可以用減法:C-7=5;因?yàn)?+9=16,我們將9作為7的補(bǔ)數(shù),將上式的減法改寫為加法: C+9=15;去掉高位1(也就是減去16),得到結(jié)果5。在計(jì)算機(jī)中,如果我們用1個(gè)字節(jié)表示一個(gè)數(shù),一個(gè)字節(jié)有 8位,超過(guò)8位就進(jìn)1,在內(nèi)存中情況為:100000000,進(jìn)位1被丟棄。一個(gè)數(shù)如果為正,則它的原碼、反碼、補(bǔ)碼相同;一個(gè)數(shù)如果為負(fù),則符號(hào)位為 1,其余各位是對(duì)原碼取反,然后整個(gè)數(shù)加1。為了簡(jiǎn)單起見(jiàn),我們用1個(gè)字節(jié)來(lái)表示一個(gè)整數(shù)。+7的補(bǔ)碼為:00000111-7的補(bǔ)碼為:1111100114負(fù)數(shù)的補(bǔ)碼轉(zhuǎn)換為十進(jìn)制數(shù)a、 先對(duì)各位取反;b、 將其轉(zhuǎn)換為十進(jìn)制數(shù);c、 加上負(fù)號(hào),再減去1。例如:11111010,最高位為1,是負(fù)數(shù),先對(duì)各位取反得00000101,轉(zhuǎn)換為十進(jìn)制數(shù)得5,加上負(fù)號(hào)得-5,再減1得-6。charchar類型(2字節(jié))用于表示Unicode編碼的字符單元;char類型用于表示單個(gè)字符,通常用來(lái)表示字符常量。例如:'A'是編碼為65所對(duì)應(yīng)的字符常量。Unicode編碼單元可以表示為十六進(jìn)制值,其范圍從 \u0000到\uffff。除了可以米用轉(zhuǎn)義序列符\u表示Unicode代碼單兀的編碼之外,還有一些用于表示特殊字符的轉(zhuǎn)義序列符。如:轉(zhuǎn)義序列名稱Unicode值\b退格(Backspace)\u0008\t制表(Tab)\u0009\n換行(Linefeed)\u000a\r回車\u000d雙引號(hào)(Doublequote)\u0022單引號(hào)(Singlequote)\u0027\\反斜杠(Backslash)\u005c盡管char不是整數(shù),但在許多情況中你可以對(duì)它們進(jìn)行運(yùn)算操作就好像他們是整數(shù)一樣,這允許你可以將2個(gè)字符相加,或?qū)σ粋€(gè)字符變量值進(jìn)行增量操作。運(yùn)算符移位運(yùn)算符只能針對(duì)二進(jìn)制數(shù)據(jù)(整數(shù))<<左移,左移一位相當(dāng)于原來(lái)的數(shù)乘二,大于 32位的話高出的位就不要了,如果移動(dòng)的位數(shù)大于32的話java會(huì)自動(dòng)把這個(gè)位數(shù)變?yōu)檫@個(gè)數(shù)對(duì) 32求余的值;>>右移,右移一位相當(dāng)于除2取整,兩位相當(dāng)于連續(xù)除2取整而不是除4取整,看正數(shù)還是負(fù)數(shù),正數(shù)右移的話高位補(bǔ) 0,負(fù)數(shù)的話補(bǔ)1;>>>無(wú)符號(hào)右移(算數(shù)右移),不考慮符號(hào)位,移進(jìn)來(lái)的都補(bǔ) 0。32位運(yùn)算符&按位與,兩個(gè)數(shù)按位與,全部轉(zhuǎn)換成二進(jìn)制后按位比較, 全為1才是1,其它是0,返回一個(gè)新的整數(shù);|按位或,兩個(gè)數(shù)按位或,全部轉(zhuǎn)換成二進(jìn)制后按位比較, 全為0才是0,其它是1,返回一個(gè)新的整數(shù);A按位異或,兩個(gè)數(shù)的二進(jìn)制位數(shù)比較, 相同結(jié)果為0,相異結(jié)果為1;~按位求反,把一個(gè)數(shù)二進(jìn)制的每一位都反過(guò)來(lái)。邏輯運(yùn)算符&&短路與,兩邊如果左邊是假的話就不再判斷右邊的,直接返回假;II短路或,兩邊如果有一個(gè)為真的就不再判斷右邊的,直接返回真;&與,不管怎樣兩邊都會(huì)判斷,都為真才返回真;I或,不管怎樣兩邊都會(huì)判斷,都為假才返回假。流程控制switcha、 switch后括號(hào)中的值必須是int,byte,char,short,枚舉類型的變量之一,其它類型的就不行了;b、 每個(gè)case后面的值必須是不相等的,而且 必須是常量;c、 如果每個(gè)case冒號(hào)后面的語(yǔ)句執(zhí)行完后沒(méi)有 break,還會(huì)繼續(xù)執(zhí)行后面 case里的語(yǔ)句,所以在每個(gè)case的語(yǔ)句結(jié)束后加一個(gè)break;d、 多個(gè)case可以可并到一起,表示或的關(guān)系;e、 default代表如果和所有case后的值都不匹配,就執(zhí)行這里的語(yǔ)句。無(wú)論 default寫哪都是最后執(zhí)行的。publicclassGrade{publicstaticvoidmain(String[]args){Scannersca=newScanner(System.in);System.out.println( ”請(qǐng)輸入一個(gè)百分?jǐn)?shù): ”);ints=sca.nextInt();if(s<0||s>100){System.out.println( "ERRORDATA:S");System.exit(0); //退出這個(gè)程序}switch(s/10){case10:case9:System.out.println("A");breakcase8:System.out.println("B");breakcase7:System.out.println("C");breakcase6:System.out.println("D");breakdefault:System.out.println("E");break}42break和continuea、break退出當(dāng)前的循環(huán)體,在嵌套循環(huán)中,只退出當(dāng)前的 一層循環(huán);b、 continue結(jié)束當(dāng)前本次循環(huán),繼續(xù)進(jìn)行下一輪的循環(huán)??梢哉f(shuō),只是本次忽略循環(huán)內(nèi)后面的語(yǔ)句;c、 continue只能在循環(huán)體內(nèi)用;d、break可以用在任意代碼塊中,表示退出當(dāng)前程序塊 (配合標(biāo)簽使用,很好用)。方法構(gòu)造方法每次在創(chuàng)建實(shí)例變量,對(duì)類中的所有變量都要初始化是很乏味的。 如果在一個(gè)對(duì)象最初被創(chuàng)建時(shí)就把對(duì)它的設(shè)置做好, 那樣的話,程序?qū)⒏?jiǎn)單并且更簡(jiǎn)明。 因?yàn)閷?duì)初始化的要求是共同的,Java允許對(duì)象在他們被創(chuàng)造時(shí)初始化自己。 這種自動(dòng)的初始化是通過(guò)使用構(gòu)造方法來(lái)完成的。構(gòu)造方法在對(duì)象創(chuàng)建時(shí)初始化。一旦定義了構(gòu)造方法,在對(duì)象創(chuàng)建后,在 new運(yùn)算符完成前,構(gòu)造方法立即自動(dòng)調(diào)用。 構(gòu)造方法看起來(lái)有點(diǎn)奇怪, 因?yàn)樗鼪](méi)有任何返回值,即使是void型的值也不返回。這是因?yàn)橐粋€(gè)類的構(gòu)造方法內(nèi)隱藏的類型是它自己類的類型。構(gòu)造方法的任務(wù)就是初始化一個(gè)對(duì)象的內(nèi)部狀態(tài),以便使創(chuàng)建的實(shí)例變量能夠完全初始化,可以被對(duì)象馬上使用。方法重載在Java中,同一個(gè)類中的2個(gè)或2個(gè)以上的方法可以有同一個(gè)名字,只要它們的參數(shù)聲明不同即可。在這種情況下,該方法就被稱為重載( overloaded)。當(dāng)一個(gè)重載方法被調(diào)用時(shí),Java用參數(shù)的類型和(或)數(shù)量來(lái)表明實(shí)際調(diào)用的重載方法的版本。因此,每個(gè)重載方法的參數(shù)的類型和(或)數(shù)量必須是不同的。當(dāng)一個(gè)重載的方法被調(diào)用時(shí),Java在調(diào)用方法的參數(shù)和方法的自變量之間尋找匹配。 但是,這種匹配并不總是精確的。 在一些情況下,Java的自動(dòng)類型轉(zhuǎn)換也適用于重載方法的自變量。例如:classOverloadDemo{voidtest(doublea){System.out.println("Insidetest(double)a:"+a);}}classOverload{publicstaticvoidmain(Stringargs[]){OverloadDemoob=newOverloadDemo();inti=88;ob.test(i);}}OverloadDemo的這個(gè)版本沒(méi)有定義test(int)。因此當(dāng)在Overload內(nèi)帶整數(shù)參數(shù)調(diào)用test()時(shí),找不到和它匹配的方法。但是,Java可以自動(dòng)地將整數(shù)轉(zhuǎn)換為 double型,這種轉(zhuǎn)換就可以解決這個(gè)問(wèn)題。因此,在 test(int)找不到以后,Java將i擴(kuò)大到double型,然后調(diào)用test(double)。當(dāng)然,如果定義了 test(int),當(dāng)然先調(diào)用test(int)而不會(huì)調(diào)用test(double)。只有在找不到精確匹配時(shí),Java的自動(dòng)轉(zhuǎn)換才會(huì)起作用。thisthis等價(jià)于當(dāng)前對(duì)象,調(diào)用當(dāng)前對(duì)象的屬性或方法就用 this.屬性名,或this.方法名()。當(dāng)前對(duì)象:指誰(shuí)在調(diào)用當(dāng)前這個(gè)方法和屬性, 誰(shuí)就是當(dāng)前對(duì)象。在定義類的時(shí)候是不存在當(dāng)前對(duì)象的。在局部變量與外部變量同名的時(shí)候, 為了區(qū)分,就要在外部變量的前面加一個(gè) this來(lái)表示這個(gè)變量是類的全局變量。繼承盡管子類包括超類的所有成員,它不能訪問(wèn)超類中被聲明成 private的成員。子類的對(duì)象可以調(diào)用父類的一切公有的變量和方法,也可以擴(kuò)展自己新的屬性和方法,但是新擴(kuò)展的部分父類的對(duì)象是無(wú)法調(diào)用的。super在子類的構(gòu)造方法中調(diào)用父類的構(gòu)造方法,并且 super要放在第一行,不能與this一起用,主要用為在構(gòu)造子類的時(shí)候給父類中定義的變量賦值:a、 任何子類的構(gòu)造方法都會(huì)調(diào)用父類的構(gòu)造方法:因?yàn)檎{(diào)用構(gòu)造方法和創(chuàng)建一個(gè)對(duì)象是綁在一起的,而一個(gè)子類對(duì)象的一部分可以看做是父類對(duì)象,所以當(dāng)創(chuàng)建一個(gè)子類對(duì)象時(shí)一定是先創(chuàng)建一個(gè)父類的對(duì)象,再在父類對(duì)象的基礎(chǔ)上擴(kuò)展(extends)成一個(gè)子類對(duì)象。注意:自始至終只創(chuàng)建了一個(gè)對(duì)象,因?yàn)閯?chuàng)建的那一個(gè)子類對(duì)象的一部分是父類對(duì)象(上帝想創(chuàng)造一個(gè)科學(xué)家,肯定是先創(chuàng)造一個(gè)人,在人的基礎(chǔ)上進(jìn)行教育培訓(xùn)等,最終變成一個(gè)科學(xué)家,而最初的人和最后的科學(xué)家其實(shí)是一個(gè)對(duì)象);b、任何子類的構(gòu)造方法的第一行必須是 this(...)或super(...)的調(diào)用,如果程序員不寫,則系統(tǒng)會(huì)隱含的調(diào)用 super(),也就是說(shuō)子類無(wú)論如何都會(huì)調(diào)用父類的構(gòu)造方法,沒(méi)寫就調(diào)用父類的無(wú)參構(gòu)造方法;c、子類構(gòu)造方法的第一行只能出現(xiàn)this(...),super(...)這兩種情況,無(wú)論怎么調(diào)用,最終總能找到父類構(gòu)造方法,否則造成死循環(huán)。因?yàn)槿绻宇惖哪硞€(gè)構(gòu)造方法的第一行出現(xiàn)this(...),此時(shí)系統(tǒng)不會(huì)加上缺省的 super(…)那么this(...)會(huì)調(diào)用子類的其他構(gòu)造方法,所以子類的構(gòu)造方法之間開(kāi)始調(diào)用,如果子類的所有的構(gòu)造方法的第一行全都是this(...)那便構(gòu)成了一個(gè)死循環(huán)。多態(tài)(polymorphism)a、 對(duì)象的多態(tài):一個(gè)對(duì)象多種形態(tài)。方法的重載和覆蓋就是方法多態(tài)的一種體現(xiàn);b、對(duì)象多態(tài)的基礎(chǔ):子類對(duì)象可以當(dāng)作父類對(duì)象來(lái)看,例如: Animala=newBird();c、 多態(tài)定理:如果我們把子類對(duì)象當(dāng)作父類對(duì)象來(lái)看,那么就只能訪問(wèn)父類中已有定義的屬性和方法(不能訪問(wèn)子類擴(kuò)展的屬性和方法)。如果子類覆蓋了父類的方法,再把子類對(duì)象當(dāng)作父類對(duì)象去調(diào)用該方法時(shí),調(diào)用的是子類覆蓋后的方法(對(duì)象的行為不可能因?yàn)槟惆阉?dāng)作什么來(lái)看而改變);d、 Animala=newBird()左邊是編譯時(shí)類型:在代碼編譯過(guò)程中,編譯器把這個(gè)對(duì)象當(dāng)作什么來(lái)看?(父類對(duì)象)右邊是運(yùn)行時(shí)類型:在代碼執(zhí)行過(guò)程中,JVM把這個(gè)對(duì)象當(dāng)作什么看?(子類對(duì)象)。左邊是主觀認(rèn)為(我們把a(bǔ)當(dāng)作什么看?),右邊是客觀存在(a實(shí)際是什么)。當(dāng)你把鳥(niǎo)當(dāng)動(dòng)物看時(shí),你知道它是動(dòng)物,但你不知道它是鳥(niǎo),所以你知道它會(huì)走會(huì)吃,但你不知道它會(huì)唱歌(相當(dāng)于編譯器把它當(dāng)Animal),所以你不會(huì)試圖去調(diào)用它的唱歌的方法,因?yàn)槟愀揪筒恢浪鼤?huì)唱歌。當(dāng)你調(diào)用 move()方法時(shí),它會(huì)flying,因?yàn)樗举|(zhì)上還是個(gè)鳥(niǎo),不會(huì)因?yàn)槟惆阉?dāng)作動(dòng)物而不會(huì)飛用走的路。instanceof當(dāng)發(fā)生多層次復(fù)雜的繼承機(jī)構(gòu)時(shí),往往使程序員自己都搞不清楚最后這個(gè)對(duì)象到底是什么了,這時(shí)就需要提供一個(gè)方法來(lái)判斷一下了。判斷一個(gè)對(duì)象是不是某一個(gè)類型的實(shí)例,看這個(gè)對(duì)象能不能作為這個(gè)對(duì)象實(shí)例來(lái)看(看這個(gè)對(duì)象運(yùn)行時(shí)的類型,即看這個(gè)對(duì)象的客觀存在是什么) 。static描述整體特征而不是個(gè)體特征的屬性時(shí),用靜態(tài)修飾符;有時(shí)你希望定義一個(gè)類成員,使它的使用完全獨(dú)立于該類的任何對(duì)象。通常情況下,類成員必須通過(guò)它的類的對(duì)象訪問(wèn),但是可以創(chuàng)建這樣一個(gè)成員,它能夠被它自己使用,而不必引用特定的實(shí)例。成員的聲明前面加上關(guān)鍵字static就能創(chuàng)建這樣的成員。如果一個(gè)成員被聲明為static,它就能夠在它的類的任何對(duì)象創(chuàng)建之前被訪問(wèn),而不必引用任何對(duì)象。你可以將方法和變量都聲明為static,static成員的最常見(jiàn)的例子是main(),因?yàn)樵诔绦蜷_(kāi)始執(zhí)行時(shí)必須調(diào)用main(),所以它被聲明為static。聲明為static的變量實(shí)質(zhì)上就是全局變量,當(dāng)聲明一個(gè)對(duì)象時(shí),并不產(chǎn)生static變量的拷貝,而是該類所有的實(shí)例變量共用同一個(gè)static變量。?聲明為static的方法有以下幾條限制a、 它們僅能調(diào)用其他的static方法;b、 它們只能訪問(wèn)static數(shù)據(jù);c、 它們不能以任何方式引用this或super。?靜態(tài)變量和非靜態(tài)變量(實(shí)例變量)的差別a、 空間分配時(shí)機(jī):靜態(tài)變量是在類加載的時(shí)候分配空間,非靜態(tài)對(duì)象是在生成對(duì)象的時(shí)候分配空間;b、 空間分配方式:不管有多少對(duì)象靜態(tài)變量只有一份(所有對(duì)象共享),非靜態(tài)變量有多少對(duì)象就分配多少個(gè)空間;c、 訪問(wèn)方式:靜態(tài)變量是:類名.屬性,比如Animal.COUNT;非靜態(tài)變量:對(duì)象名.屬性,比如。?靜態(tài)方法和非靜態(tài)方法的區(qū)別a、 靜態(tài)方法是通過(guò)類名來(lái)調(diào)用,非靜態(tài)方法是通過(guò)對(duì)象來(lái)調(diào)用;b、 靜態(tài)方法中不能訪問(wèn)本類的非靜態(tài)成員,但非靜態(tài)方法可以訪問(wèn)靜態(tài)成員;c、 靜態(tài)方法不存在多態(tài)特性,也就是靜態(tài)方法無(wú)法被子類覆蓋,父類對(duì)象調(diào)用此方法還是父類的。?靜態(tài)代碼塊a、 靜態(tài)代碼塊會(huì)在類被加載時(shí)被系統(tǒng)自動(dòng)執(zhí)行;b、 一般可以在靜態(tài)代碼塊中給靜態(tài)屬性賦值;c、 類的靜態(tài)代碼塊只能有一個(gè)。finala、 聲明為final的變量在實(shí)例中不占用內(nèi)存;b、 一個(gè)final變量實(shí)質(zhì)上是一個(gè)常數(shù);c、 修飾屬性時(shí)屬性不可變,并且屬性在聲明的時(shí)候必須初始化,或者在構(gòu)造方法中初始化一般與static一起用,一旦定義了,就不能再變了;d、 修飾方法時(shí)方法不能被覆蓋;e、 修飾類是類不能被繼承,表示最終的類,不能有子類;f、修飾局部變量時(shí)局部變量不可變(常量)。abstracta、 用來(lái)修飾類和方法;b、 修飾類的話表示這個(gè)類是個(gè)抽象類,抽象類不能被實(shí)例化(生成對(duì)象) ;c、 修飾方法的話表示這個(gè)方法是個(gè)抽象方法,抽象方法沒(méi)有方法體;d、 如果一個(gè)類包含有一個(gè)抽象方法,那么這個(gè)類必須是抽象類;e、 如果一個(gè)類不包含抽象方法,那么該類也可以被定義成抽象類;f、 抽象類不能被實(shí)例化,但卻可以定義引用;g、 抽象類一般需要實(shí)現(xiàn)--定義一個(gè)子類,并實(shí)現(xiàn)抽象方法;h、 抽象類也是有構(gòu)造方法的,因?yàn)樾枰蛔宇愓{(diào)用;i、 子類必須實(shí)現(xiàn)父類的抽象方法;j、 abstract和final不能共同修飾一個(gè)類或方法;k、 例如:定義一個(gè)Animal類,就可以定義成抽象類,move()方法可以定義成抽象方法,當(dāng)具體的子類繼承Animal時(shí),再覆蓋move()方法,鳥(niǎo)飛,魚游 類的加載觸發(fā)類加載的幾種情況a、 調(diào)用靜態(tài)成員時(shí),會(huì)加載靜態(tài)成員真正所在的類及其父類;b、 通過(guò)子類調(diào)用父類的靜態(tài)成員時(shí),只會(huì)加載父類而不會(huì)加載子類;c、 第一次new對(duì)象的時(shí)候加載(第二次再new同一個(gè)類時(shí),不需再加載);d、 加載子類會(huì)先加載父類(覆蓋父類方法時(shí)所拋出的異常不能超過(guò)父類定義的范圍)e、 如果靜態(tài)屬性有final修飾時(shí),則不會(huì)加載,當(dāng)成常量使用,例如:publicstaticfinalinta=123;但是如果上面的等式右值改成表達(dá)式(且該表達(dá)式在編譯時(shí)不能確定其值)時(shí)則會(huì)加載類,例如:publicstaticfinalinta=math.PIf、 如果訪問(wèn)的是類的公開(kāi)靜態(tài)常量,那么如果編譯器在編譯的時(shí)候能確定這個(gè)常量的值,就不會(huì)被加載,如果編譯時(shí)不能確定其值的話,則運(yùn)行時(shí)加載。類加載的順序?加載靜態(tài)成員/代碼塊先遞歸地加載父類的靜態(tài)成員/代碼塊(Object的最先),再依次加載到本類的靜態(tài)成員。同一個(gè)類里的靜態(tài)成員/代碼塊,按寫代碼的順序加載。如果其間調(diào)用靜態(tài)方法,則調(diào)用時(shí)會(huì)先運(yùn)行靜態(tài)方法,再繼續(xù)加載。同一個(gè)類里調(diào)用靜態(tài)方法時(shí),可以不理會(huì)寫代碼的順序。調(diào)用父類的靜態(tài)成員,可以像調(diào)用自己的一樣,但調(diào)用其子類的靜態(tài)成員,必須使用 子類名.成員名”來(lái)調(diào)用。?加載非靜態(tài)成員/代碼塊(實(shí)例塊在創(chuàng)建對(duì)象時(shí)才會(huì)被加載,而靜態(tài)成員在不創(chuàng)建對(duì)象時(shí)可以加載)先遞歸地加載父類的非靜態(tài)成員 /代碼塊(Object的最先),再依次加載到本類的非靜態(tài)成員。同一個(gè)類里的非靜態(tài)成員 /代碼塊,按寫代碼的順序加載。同一個(gè)類里調(diào)用方法時(shí),可以不理會(huì)寫代碼的順序。 但調(diào)用屬性時(shí),必須注意加載順序。一般編譯不通過(guò),如果能在加載前調(diào)用,值為默認(rèn)初始值(如:null或者0)。調(diào)用父類的非靜態(tài)成員(private除外),也可以像調(diào)用自己的一樣。?調(diào)用構(gòu)造方法先遞歸地調(diào)用父類的構(gòu)造方法(Object的最先),默認(rèn)調(diào)用父類空參的,也可在第一行寫明調(diào)用父類某個(gè)帶參的。 再依次到本類的構(gòu)造方法, 構(gòu)造方法內(nèi),也可在第一行寫明調(diào)用某個(gè)本類其它的構(gòu)造方法。注意:如果加載時(shí)遇到override的成員,可看作是所需創(chuàng)建的類型賦值給當(dāng)前類型。其調(diào)用按多態(tài)用法:只有非靜態(tài)方法有多態(tài) ;而靜態(tài)方法、靜態(tài)屬性、非靜態(tài)屬性都沒(méi)有多態(tài)。假設(shè)子類override父類的所有成員,包括靜態(tài)成員、非靜態(tài)屬性和非靜態(tài)方法。由于構(gòu)造子類時(shí)會(huì)先構(gòu)造父類, 而構(gòu)造父類時(shí),其所用的靜態(tài)成員和非靜態(tài)屬性是父類的, 但非靜態(tài)方法卻是子類的,由于構(gòu)造父類時(shí),子類并未加載,如果此時(shí)所調(diào)用的非靜態(tài)方法里有成員,則這個(gè)成員是子類的,且非靜態(tài)屬性是默認(rèn)初始值的。1、加載父類靜態(tài)成員/代碼塊2、加載子類靜態(tài)成員/代碼塊旦3、 加載父類非靜態(tài)成員/代碼塊—旦—4、 加載父類構(gòu)造方法5、 加載子類非靜態(tài)成員/代碼塊6、 加載子類構(gòu)造方法接口(interface)a、 接口可以通過(guò)運(yùn)用關(guān)鍵字extends被其他接口繼承;b、當(dāng)一個(gè)類實(shí)現(xiàn)一個(gè)繼承了另一個(gè)接口的接口時(shí), 它必須實(shí)現(xiàn)接口繼承鏈表中定義的所有方法;c、 是一種抽象的數(shù)據(jù)類型,特殊的抽象類;d、接口中的所有方法都是抽象方法,就算不寫系統(tǒng)也會(huì)自動(dòng)加上 abstract,所以一般就省去不寫了;e、 接口中所有的屬性都是finalstatic的(靜態(tài)常量),就算不寫系統(tǒng)也會(huì)自動(dòng)加上,所以一般可以省去不寫了;f、接口也不能被實(shí)例化,但可以定義的接口的引用;g、接口沒(méi)有構(gòu)造方法,接口的實(shí)現(xiàn)類在生成對(duì)象時(shí)不會(huì)調(diào)用接口的構(gòu)造方法, 類的子類在生成對(duì)象時(shí)一定要調(diào)用父類的構(gòu)造方法 (所以子類長(zhǎng)的像父類,卻不像接口);h、 一個(gè)類只能繼承一個(gè)父類,但是可以實(shí)現(xiàn)多個(gè)接口,用逗號(hào)隔開(kāi);i、 接口之間可以多繼承;j、 接口=標(biāo)準(zhǔn):把服務(wù)的使用者和服務(wù)的提供者分開(kāi),降低系統(tǒng)的耦合,有效的提高軟件的可擴(kuò)展性和可維護(hù)性;k、接口聲明中可以聲明變量, 它們一般是final和static型的,意思是它們的值不能通過(guò)實(shí)現(xiàn)類而改變,它們還必須以常量值初始化,如果接口本身定義成 public,所有方法和變量都是public的。訪問(wèn)控制訪問(wèn)控制(accesscontrol)訪問(wèn)指示符(accessspecifier)Private成員UU的成員ProlePublic^員同一類中可見(jiàn)是是是是同一個(gè)包中對(duì)子類町見(jiàn)同一個(gè)包中對(duì)非子類可見(jiàn)否是是不同包巾對(duì)子矣否不同的包中對(duì)卓子類可見(jiàn)習(xí)否否是staticfinalabstractpublicprotected默認(rèn)private頂層類NYYYNYN屬性YYNYNYY方法YYYYYYY局部變量NYNNNNN成員式內(nèi)部類YYYYYYY局部式內(nèi)部類NYYNNNNObject類構(gòu)造方法只有唯一的一個(gè),并且無(wú)參。clone()protectedObjectcione()throwsCioneNotSupportedException創(chuàng)建并返回一個(gè)當(dāng)前對(duì)象的拷貝,得到和當(dāng)前對(duì)象一模一樣的對(duì)象。clone()方法滿足:a、 對(duì)任何的對(duì)象x,都有x.clone()!=x;克隆對(duì)象與原對(duì)象不是同一個(gè)對(duì)象了;b、 對(duì)任何的對(duì)象x,都有x.clone().getClass==x.getClass();克隆對(duì)象與原對(duì)象的類型一樣;c、 如果對(duì)象x的equals方法定義恰當(dāng),那么x.clone().equals(x)應(yīng)該成立。對(duì)象克隆過(guò)程? 要讓這個(gè)類實(shí)現(xiàn)java.lang.Cloneable接口Cloneable接口,指示Object.clone()方法可以合法地對(duì)該類實(shí)例進(jìn)行按字段復(fù)制。如果在沒(méi)有實(shí)現(xiàn)Cloneable接口的實(shí)例上調(diào)用Object的clone方法,則會(huì)導(dǎo)致拋出CioneNotSupportedException異常。按照慣例,實(shí)現(xiàn)此接口的類應(yīng)該使用公共方法重寫 Object.clone(它是受保護(hù)的)。注意,此接口不包含clone方法。因此,因?yàn)槟硞€(gè)對(duì)象實(shí)現(xiàn)了此接口就克隆它是不可能的。即使clone方法是反射性調(diào)用的,也無(wú)法保證它將獲得成功。Cloneable接口沒(méi)有任何方法, 像Cloneable這樣的接口叫做標(biāo)記接口, 即標(biāo)記這個(gè)類的實(shí)例可以調(diào)用clone方法,只是起到一個(gè)標(biāo)記的作用。?覆蓋Object中的clone()方法,并將訪問(wèn)權(quán)限改為 publicclone();方法的訪問(wèn)修飾符是 protected,這意味著,在子類中直接去super.clone();是可以的,但是如果想在第三方類中去生成一個(gè)子類對(duì)象后再取調(diào)用 cione()時(shí)就不可以了,所以這時(shí)就得在子類中去覆蓋 Object的clone方法,并將訪問(wèn)控制修飾符改為 public。如果只是希望淺復(fù)制,那么使用這樣的代碼就可以完成publicObjectcione()throwsCioneNotSupportedException{returnsuper.clone();}這段代碼表示,覆蓋Object中的clone方法,將訪問(wèn)控制修飾符改為 public,然后再去調(diào)用Object的clone方法。clone方法有具體的實(shí)現(xiàn)步驟代碼, 這叫做是實(shí)現(xiàn)方法。因?yàn)閏lone方法涉及到底層數(shù)據(jù)的訪問(wèn), 一般的程序員是沒(méi)有辦法寫出這些代碼的, 所以用這樣的一個(gè)簡(jiǎn)單的步驟就可以達(dá)到 clone的目的了。14.12淺復(fù)制和深復(fù)制概念?淺復(fù)制(淺克隆)被復(fù)制對(duì)象的所有變量都含有原來(lái)的對(duì)象的相同的值,而所有的對(duì)其他對(duì)象的引用仍然指向原來(lái)的對(duì)象。換言之,淺復(fù)制僅僅復(fù)制所考慮的對(duì)象,而不是復(fù)制它所引用的對(duì)象。?深復(fù)制(深克隆)被復(fù)制對(duì)象的所有變量都含有與原來(lái)的對(duì)象相同的值,除去那些引用其他對(duì)象的變量。那些引用其他對(duì)象的變量將指向被復(fù)制過(guò)的新對(duì)象, 而不再是原有的那些被引用的對(duì)象。 換言之,深復(fù)制把要復(fù)制的對(duì)象所引用的對(duì)象都復(fù)制了一遍。例如:一個(gè)Student對(duì)象包含ID,姓名,Teacher等屬性。其中ID為基本類型,姓名為String類型,Teacher為一個(gè)Teacher對(duì)象。淺復(fù)制只復(fù)制一個(gè)新的ID,而姓名和Teacher只復(fù)制地址。即,復(fù)制后的新對(duì)象姓名和Teacher仍然指向原先的Stuent的姓名和Teacher。而深復(fù)制會(huì)連同姓名和Teacher也同樣復(fù)制出來(lái),并且與原對(duì)象的地址不同,指向不同的對(duì)象。finalize。a、構(gòu)造方法負(fù)責(zé)對(duì)象創(chuàng)建后的初始化, finalize方法負(fù)責(zé)對(duì)象消亡時(shí)的資源釋放;b、 finalize方法被垃圾收集器自動(dòng)調(diào)用,而垃圾收集器有可能根本不執(zhí)行,所以沒(méi)有辦法保證finalize方法一定執(zhí)行。equals(Objectobj)下面是Object中的equals方法源碼:publicbooleanequals(Objectobj){|return(this==obj);}toString()返回該對(duì)象的字符串表示。通常, toString方法會(huì)返回一個(gè)"以文本方式表示”此對(duì)象的字符串。結(jié)果應(yīng)是一個(gè)簡(jiǎn)明但易于讀懂的信息表達(dá)式。建議所有子類都重寫此方法。Object類的toString方法返回一個(gè)字符串,該字符串由類名(對(duì)象是該類的一個(gè)實(shí)例)、at標(biāo)記符“@”和此對(duì)象哈希碼的無(wú)符號(hào)十六進(jìn)制表示組成。換句話說(shuō),該方法返回一個(gè)字符串,它的值等于:getClass().getName()+@'+Integer.toHexString(hashCode())String類及對(duì)象池在JDK5.0里面,Java虛擬機(jī)在啟動(dòng)的時(shí)候會(huì)實(shí)例化 9個(gè)對(duì)象池,這9個(gè)對(duì)象池分別用對(duì)象池的存在是為了避免頻繁的創(chuàng)建和銷毀對(duì)象而影響系統(tǒng)性能。 對(duì)象池是獨(dú)立于??臻g和堆空間的,保存著指向一些對(duì)象的首地址。Stringa="hello";首先把hello這個(gè)對(duì)象創(chuàng)建出來(lái),并保存在堆中。然后對(duì)象池會(huì)保存一個(gè)指向 hello的首地址。如果a是某個(gè)方法內(nèi)的局部變量,那么也會(huì)在棧中將 hello的首地址保存在a中。如果a的地址值被賦為null,也就是a不再指向hello了,此時(shí)hello并沒(méi)有成為垃圾,因?yàn)閷?duì)象池中始終保存了 hello的首地址指向hello。而對(duì)象池中的那些地址值,程序員是不能直接管理的,那是由 JVM才能直接管理的。下次如果需要Stringb="hello";創(chuàng)建"hello"對(duì)象,那么b會(huì)去對(duì)象池中找那些地址值, 如果找到了指向hello對(duì)象的地址,那么會(huì)將這個(gè)地址直接賦給 b。如果沒(méi)有與之匹配的,才會(huì)創(chuàng)建新的對(duì)象,并同樣將這個(gè)對(duì)象的首地址保存在對(duì)象池中。Stringc=newString("hello");系統(tǒng)會(huì)直接在堆空間中創(chuàng)建一個(gè)新的 hello對(duì)象,而不會(huì)去對(duì)象池中找,而且這樣創(chuàng)建的新的hello對(duì)象也不會(huì)保存在對(duì)象池去。注意注意:Strings=newString("hello");直接只有這條語(yǔ)句的時(shí)候,這里的 hello作為一個(gè)參數(shù)傳給String,而此時(shí)沒(méi)有hello這個(gè)對(duì)象,那么:首先會(huì)創(chuàng)建一個(gè)hello對(duì)象,并且將這個(gè)hello對(duì)象的首地址保存在對(duì)象池中,然后將這個(gè)hello對(duì)象作為參數(shù)傳給String,此時(shí)又new了一個(gè)新hello對(duì)象,而s中保存的是新的hello對(duì)象的首地址。所以只有這條語(yǔ)句的時(shí)候,實(shí)際上是創(chuàng)建了兩個(gè) hello對(duì)象。StringBuffer和StringBuilder當(dāng)我們需要對(duì)字符串頻繁的進(jìn)行修改時(shí), 最好不要用String類,因?yàn)槟菚?huì)產(chǎn)生很多垃圾,降低系統(tǒng)效率。在java.lang包下,有兩個(gè)StringBuffer和StringBuilder類,是更好的選擇。因?yàn)橛盟鼈僴ew出來(lái)的字符出對(duì)象是可以更改的,而且會(huì)在原字符串的基礎(chǔ)上進(jìn)行更改,而不會(huì)向String那樣創(chuàng)建新的字符串對(duì)象,所以避免了垃圾的產(chǎn)生。而StringBuffer和StringBuilder的唯一區(qū)別是:StringBuffer是線程安全的(Thread-safe)字符序列;StringBuider是線程不安全的字符序列。主要關(guān)注點(diǎn):一是構(gòu)造方法,二是眾多重載的append(追加)和insert(插入)方法。publicclassStringBufferTest{publicstaticvoidmain(String[]args){StringBuffers=newStringBuffer();for(charc='A';c<='Z';c++){s.append(c);}System.out.println(s.toString());}}主方法參數(shù)java類名命令后面還可以給一些主方法的參數(shù),這些參數(shù)都被系統(tǒng)當(dāng)作字符串放到main方法聲明的參數(shù)String[]args中,如果輸入多個(gè)參數(shù)的話就以空格為分隔符依次把每個(gè)參數(shù)放入args數(shù)組。如果不傳參數(shù)的話 args就是一個(gè)0個(gè)元素的數(shù)組。在eclipse中給主方法傳參數(shù):右鍵runasrunconfigurationsMainclass要是現(xiàn)在要運(yùn)行的類,如果不是就要search找到arguments在上面的欄中就是給main方法傳的參數(shù),填上參數(shù)applyRun。在把這些參數(shù)傳給主方法之前, JVM會(huì)先對(duì)這些參數(shù)做一個(gè)包裝,把它們先包裝成一個(gè)字符串?dāng)?shù)組之后再傳給主方法。所以主方法的參數(shù)是 String[]args。方法的可變長(zhǎng)參數(shù)其實(shí)當(dāng)我們把不同長(zhǎng)度的參數(shù)傳給方法時(shí), 編譯器會(huì)對(duì)這些參數(shù)做一個(gè)包裝, 把它們包裝成一個(gè)數(shù)組之后再傳給方法,所以方法得到的還是一個(gè)數(shù)組。所以方法的可變長(zhǎng)參數(shù)實(shí)際上是數(shù)組的一種特殊的表現(xiàn)形式。在定義方法的時(shí)候知道要傳的參數(shù)的類型, 但是參數(shù)的數(shù)量不固定的時(shí)候就用可變長(zhǎng)參數(shù),可變長(zhǎng)參數(shù)類型的寫法,例如: publicstaticvoidm(String...strs){}上面的參數(shù)類型在String后面多了...,這樣在調(diào)用方法傳參數(shù)的時(shí)候就可以傳多個(gè)參數(shù)或者一個(gè)參數(shù),也可以不傳參數(shù),但參數(shù)必須都為String類型的,如果要傳其它類型的時(shí)候在定義的時(shí)候改成其它類型,然后在類型后面加上 …就可以了。如何使用這些參數(shù):在方法中此參數(shù)是被當(dāng)作數(shù)組類訪問(wèn)的, 調(diào)用length就可以知道有多少參數(shù)傳進(jìn)來(lái),這種參數(shù)既能接受單個(gè)元素做參數(shù), 也可以接受數(shù)組作參數(shù)。也就是說(shuō)可變長(zhǎng)的參數(shù)類型兼容了數(shù)組參數(shù)類型,但是數(shù)組參數(shù)類型不能兼容可變長(zhǎng)參數(shù)類型。使用可變長(zhǎng)參數(shù)的規(guī)定:a、一個(gè)方法只能有一個(gè)可變長(zhǎng)參數(shù),而且該參數(shù)必須是這個(gè)方法的最后一個(gè)參數(shù);b、可變長(zhǎng)參數(shù)的方法只有在必須的時(shí)候才被調(diào)用, 也就是說(shuō),如果有不可變長(zhǎng)參數(shù)的方法可以匹配,這種調(diào)用,那么系統(tǒng)會(huì)優(yōu)先選擇不可變長(zhǎng)參數(shù)的方法的調(diào)用。包裝類Java使用簡(jiǎn)單的類型,例如整型(int)和字符(char)。這些數(shù)據(jù)類型不是對(duì)象層次結(jié)構(gòu)的組成部分。它們通過(guò)值傳遞給方法而不能直接通過(guò)引用傳遞。 而且,也沒(méi)有辦法使兩種方法對(duì)整型(int)引用同一實(shí)例(sameinstanee)。有時(shí)需要對(duì)這些簡(jiǎn)單的類型建立對(duì)象表達(dá)式。為了滿足這種需要,Java提供了與每一個(gè)簡(jiǎn)單類型相應(yīng)的類。 本質(zhì)上,這些類在類中包裝(wrap)簡(jiǎn)單類型。因此,它們通常被稱作類型包裝器( wrappers)。Number抽象類Number是BigDecimal、Biglnteger、Byte、Double、Float、Integer、Long和Short類的超類。Number的子類必須提供將表示的數(shù)值轉(zhuǎn)換為 byte、double、float、int、long和short的方法。抽象類Number定義了一個(gè)由包裝數(shù)字類型字節(jié)型(byte),短整型(short),整型(int),長(zhǎng)整型(long),浮點(diǎn)型(float)和雙精度型(double)的類實(shí)現(xiàn)的超類。Number有返回上面不同數(shù)字格式的對(duì)象值的抽象方法。也就是, doubleValue()方法返回雙精度(double)值,floatValue()方法返回浮點(diǎn)(float)值等。自動(dòng)圭寸箱/自動(dòng)解圭寸(Autoboxing/Unboxing)在JDK1.5之前要獲得一個(gè)基本類型的對(duì)象比如 Integer只能用Integeri=newInteger(5)或者Integeri=Integer.valueOf(5)但在JDK1.5以后可以直接寫成Integeri=5;在這里虛擬機(jī)默認(rèn)的為這個(gè)基本數(shù)據(jù)類型進(jìn)行了包裝,以上面的第二種形式即:Integeri=Integer.valueOf(5);這種自動(dòng)的包裝叫做自動(dòng)封箱。另外還可以自動(dòng)解封,比如:inta=i;這種形式就相當(dāng)與inta=i.intValue();對(duì)象池除了字符串類型的對(duì)象會(huì)創(chuàng)建對(duì)象池, 八種基本類型的包裝類也會(huì)創(chuàng)建對(duì)象池。 但是這些包裝類new出來(lái)也只創(chuàng)建一個(gè)對(duì)象,Integer的對(duì)象池在啟動(dòng)的時(shí)候就創(chuàng)建好了,范圍是-128~127之間,所以在這之間的數(shù)字對(duì)象都不會(huì)再創(chuàng)建新對(duì)象,超出的部分都會(huì)再創(chuàng)建新對(duì)象,不會(huì)在從對(duì)象池中拿。例如:Integeri1=5;//對(duì)象池中拿Integeri2=5;//i1==i2Integeri3=newInteger(5);//重新創(chuàng)建一個(gè)對(duì)象,所以 i2!=i3同理String的另一個(gè)特點(diǎn),Integer對(duì)象的值也是不可改變的。所以頻繁的創(chuàng)建修改Integer對(duì)象也會(huì)生成很多垃圾。但是 Integer的根本是int基本類型,所以直接用int就可以了。像:for(inti=0;i<1000000;i++)而不用復(fù)雜的把i定義成Integer。publicclass IntegerTest{publicstaticvoidmain(String[]args){Integeri1=5;Integeri2=Integer. valueOf(5);Integeri3=newInteger(5);System.out.println(i1==i2);System.out.println(i1==i3);System.out.println(IIIntegeri4=250;Integeri5=Integer.valueOfIntegeri6=newInteger(250);System.out.println(i4==i5);System.out.println(i4==i6);//上面兩種形式都是從對(duì)象池中拿對(duì)象,所以它們相等(250);內(nèi)部類意義a、 更小的層次的封裝,把一個(gè)類隱藏在另外一個(gè)類的內(nèi)部;b、 能方便的在內(nèi)部類中訪問(wèn)外部類的私有成員。四種形式的內(nèi)部類a、靜態(tài)內(nèi)部類、成員內(nèi)部類統(tǒng)稱成員式內(nèi)部類, 與成員變量、成員方法處于一個(gè)級(jí)別;b、 靜態(tài)內(nèi)部類就像靜態(tài)成員一樣,成員內(nèi)部類就像實(shí)例成員一樣;c、 局部?jī)?nèi)部類、匿名內(nèi)部類統(tǒng)稱局部式內(nèi)部類,與方法內(nèi)的局部變量處于一個(gè)級(jí)別。靜態(tài)內(nèi)部類a、 不能訪問(wèn)外部類的非靜態(tài)成員;b、在外面訪問(wèn)此類的話就用:外部類名 .內(nèi)部類名;c、 創(chuàng)建了一個(gè)靜態(tài)內(nèi)部類對(duì)象語(yǔ)法:外部類名?內(nèi)部類名變量=new外部類名?內(nèi)部類構(gòu)造函數(shù)()例如:OuterA.InnerAinn=newOuterA.InnerA();d、靜態(tài)內(nèi)部類和外部類對(duì)象實(shí)際上沒(méi)什么關(guān)系的, 靜態(tài)內(nèi)部類與外部類的關(guān)系類似于寄居關(guān)系,寄居只是借外部類的殼把自己隱藏起來(lái), 在生成內(nèi)部類對(duì)象時(shí)不需要外部類對(duì)象。2022.成員內(nèi)部類a、 可以訪問(wèn)外部類的靜態(tài)和非靜態(tài)成員;b、生成一個(gè)成員內(nèi)部類對(duì)象要復(fù)雜的多, 生成一個(gè)成員內(nèi)部類對(duì)象之前必須先生成一個(gè)外部類對(duì)象:外部類名.內(nèi)部類名對(duì)象名=外部類對(duì)象.new內(nèi)部類名();例如:OuterAout=newOuterA();OuterA.InnerBinnb=out.newInnerB();c、成員內(nèi)部類與外部類的關(guān)系類似于寄生關(guān)系, 在生成內(nèi)部類對(duì)象時(shí)必須要有外部類對(duì)象,一個(gè)內(nèi)部類對(duì)象一定對(duì)應(yīng)著一個(gè)外部類對(duì)象。如何選擇用靜態(tài)內(nèi)部類或成員內(nèi)部類a、 如果外部類怎么變化都不影響內(nèi)部類的話,那么推薦用靜態(tài)內(nèi)部類;b、 如果操作內(nèi)部類的改變能影響外部類,那么推薦使用成員內(nèi)部類。publicclass InnerClassTest1{publicstaticvoidmain(String[]args){//這里的OuterA就好像是InnerA外面的一層包一樣,這和調(diào)用包里的類的方式差不多。OuterA.InnerA();newOuterA.InnerAinna=inna.m1();//先生成一個(gè)外部類對(duì)象,之后用這個(gè)外部類對(duì)象OuterAout=newOuterA();OuterA.InnerBinnb=out.new一個(gè)內(nèi)部類對(duì)象。newInnerB( "hello");innb.m2();}}classprivateStringname1="hello" ;privatestaticStringname2="haha"publicstaticclassInnerA{public voidm1(){OuterA{;//name2是靜態(tài)成員//System.out.println(namel);//System.out.println(不能訪問(wèn)外部類的非靜態(tài)成員。name2);}}publicclassInnerB{ //InnerB(Stringname){成員內(nèi)部類InnerBpublic}publicvoidm2(){//既能訪問(wèn)靜態(tài)成員也能訪問(wèn)非靜態(tài)成員。System.out.println(System.out.println(namel);name2);2023.局部?jī)?nèi)部類a、 在方法體里定義的類;b、 局部?jī)?nèi)部類里不能定義靜態(tài)的屬性和方法;c、局部?jī)?nèi)部類只能訪問(wèn)外部類中用 final修飾的常量;d、 如何在方法體外得到這個(gè)類的對(duì)象呢,通過(guò)方法的返回值就可以,返回值類型為Object。但是外部得到的這個(gè)對(duì)象是沒(méi)什么意義的, 因?yàn)橹荒茉L問(wèn)Object里的方法,此類自己的方法是訪問(wèn)不到的。 解決方法:在外部定義一個(gè)接口, 然后此局部?jī)?nèi)部類來(lái)實(shí)現(xiàn)接口,并實(shí)現(xiàn)接口中的方法,然后外部拿到對(duì)象后轉(zhuǎn)化成此接口類型就行了。再調(diào)用接口中的方法時(shí),實(shí)際上是調(diào)用的局部?jī)?nèi)部類中實(shí)現(xiàn)接口的方法。匿名內(nèi)部類a、 沒(méi)有名字的局部?jī)?nèi)部類;b、 匿名內(nèi)部類沒(méi)有構(gòu)造函數(shù)(因?yàn)闆](méi)有名字) ,也不能被繼承;c、 匿名內(nèi)部類可以訪問(wèn)外部類的成員:外部類名 .this?成員;d、 匿名內(nèi)部類如果聲明在方法中的話也具有局部?jī)?nèi)部類的特點(diǎn),只能調(diào)用 final的局部變量;e、 匿名內(nèi)部類中不能聲明靜態(tài)的成員;f、 匿名內(nèi)部類的聲明:聲明類型變量=new[類名extends/implements]聲明類型(){類的方法聲明...}[]中的是省略的部分;g、 匿名內(nèi)部類的聲明和對(duì)象的生成是合二為一,不可分割的;h、 得到的對(duì)象不知道是哪個(gè)類的對(duì)象, 只知道是實(shí)現(xiàn)了某接口或者繼承了某類的類的對(duì)象。publicclassInnerClassTest{publicstaticvoidmain(String[]args){OuterBout=newOuterB();//實(shí)例化一個(gè)Mylnter對(duì)象,在調(diào)用其中的方法,這時(shí), 實(shí)際上調(diào)用的是實(shí)現(xiàn)它的內(nèi)部類的方法。MyInterobj=out.m1();obj.innerm();OuterCoutc=newOuterC();outc.m2(newMyInter(){publicvoidinnerm(){Mylntermyc= newMylnter(){publicvoidinnerm(){}};newMylnter(){publicvoid innerm(){}}.innerm();}}classOuterB{publicMyInterm1(){ // 返回一個(gè)Mylnter接口對(duì)象inta=10;finalintb=20;//實(shí)現(xiàn)Mylnter接口,并實(shí)現(xiàn)其中的方法。classInnerCimplementsMylnter{publicvoidinnerm(){System.out.println( "InnerC.innerm()" );//System.out.println("a="+a);System.out.println( "b="+b); //只能訪問(wèn)外部類的常量。}}//返回一個(gè)內(nèi)部類的對(duì)象。returnnewInnerC();}}//定義一個(gè)Mylnter接口,讓局部?jī)?nèi)部類去實(shí)現(xiàn)接口中的方法interface Mylnter{publicvoidinnerm();}classOuterC{//1、定義一個(gè)匿名內(nèi)部類,實(shí)現(xiàn)Mylnter接口,而且給出方法的具體實(shí)現(xiàn)。 2、生成該實(shí)現(xiàn)類的對(duì)象。(new)publicMylnterm1(){returnnewMylnter(){publicvoidinnerm(){
publicvoidm2(Mylntermyi){}}203 內(nèi)部類的應(yīng)用a、 如果一個(gè)類需要在多個(gè)類中使用,則考慮使用普通公開(kāi)類;b、 如果一個(gè)類需要在一個(gè)類中多個(gè)方法里使用,考慮使用成員內(nèi)部類;c、 如果一個(gè)類需要在某個(gè)方法里多次使用,考慮使用局部?jī)?nèi)部類;d、 如果一個(gè)類需要在某處使用一次,考慮使用匿名內(nèi)部類。集合框架(CollectionFramework)a、 數(shù)組的缺點(diǎn):不能自動(dòng)擴(kuò)容,在剛創(chuàng)建數(shù)組時(shí)數(shù)組的空間不好確定;b、集合是一種數(shù)據(jù)結(jié)構(gòu),為了實(shí)現(xiàn)快速處理和高效的內(nèi)存利用率, 集合實(shí)現(xiàn)經(jīng)過(guò)精心構(gòu)造,集合通過(guò)其方便的功能鼓勵(lì)軟件的復(fù)用;c、 集合用來(lái)存儲(chǔ)數(shù)據(jù)一般能自動(dòng)擴(kuò)容,而且方便遍歷。Iterator接口和Iterable接口a、 Iterator:對(duì)collection進(jìn)行迭代的迭代器(對(duì)集合對(duì)象循環(huán)訪問(wèn)的工具);b、 Iterable:可迭代的,該接口是所有Collection集合的超級(jí)接口;c、 Iterable接口和Itertor接口沒(méi)有繼承與被繼承的關(guān)系;d、 Iterable接口中只有一個(gè)方法:publicIteratoriterator(){},第一個(gè)Iterator是返回值類型,第二個(gè)iterator是方法名,所以此方法返回一個(gè)Iterator對(duì)象,這是Iterable接口和Itertor接口唯一聯(lián)系;e、 因?yàn)樗械募隙紝?shí)現(xiàn)了Collection接口,而Collection接口又實(shí)現(xiàn)了Iterable接口,Iterable中只有唯一的一個(gè)方法iterator,所以所有的集合對(duì)象都可以調(diào)用iterator方法,而調(diào)用iterator方法會(huì)返回一個(gè)Iterator對(duì)象,這樣就可以調(diào)用Iterator中的方法了。Connection接口和Connections類java.util.Collectiona、Connection接口是集合層次結(jié)構(gòu)中的根接口, Set和List都是其派生出來(lái)的子接口,它定義了在集合中添加、清除、遍歷元素的操作;b、 注意:add方法只能添加引用類型,而不能添加基本數(shù)據(jù)類型(可以使用包裝類)因?yàn)榛緮?shù)據(jù)類型是存放在棧中的;c、remove方法移出對(duì)象時(shí),會(huì)去調(diào)用對(duì)象的 equals方法,判斷對(duì)象是否相同;d、所有通用的Collection實(shí)現(xiàn)類應(yīng)該提供兩個(gè)"標(biāo)準(zhǔn)”構(gòu)造方法:一個(gè)是void(無(wú)參數(shù))構(gòu)造方法,用于創(chuàng)建空collection;另一個(gè)是帶有Collection類型單參數(shù)的構(gòu)造方法,用于創(chuàng)建一個(gè)具有與其參數(shù)相同元素新的collection;java.util.Collectionsa、 Connections類提供了集合的靜態(tài)方法,其中很多方法實(shí)現(xiàn)了用于查找和排序等功能的多態(tài)算法;b、 還提供了很多synchronized方法,可以直接調(diào)用這些方法,將線程不安全的Collection包裝成線程安全的Collection,這種方法很方便靈活;c、 Collections中有個(gè)Sort方法用于給List排序,Collections.Sort()分為兩部分,一部分為排序規(guī)則,一部分為排序算法;規(guī)則用來(lái)判斷對(duì)象,算法是考慮如何排序;d、 對(duì)于自定義對(duì)象,Sort不知道規(guī)則,所以無(wú)法比較,這種情況下一定要定義排序規(guī)則,方式有兩種(見(jiàn)排序的兩種辦法);e、 reverse方法,自動(dòng)反向排序。List(列表)接口有序存放、允許重復(fù)ArrayLista、底層是數(shù)組實(shí)現(xiàn)的,實(shí)現(xiàn)了數(shù)組的變長(zhǎng),初始的數(shù)組容量默認(rèn)是 10;b、數(shù)組實(shí)現(xiàn),遍歷快,增加刪除效率低;c、 ArrayList支持可隨需要而增長(zhǎng)的動(dòng)態(tài)數(shù)組:標(biāo)準(zhǔn)數(shù)組是定長(zhǎng)的,在數(shù)組創(chuàng)建之后,它們不能被加長(zhǎng)或縮短,這也就意味著你必須事先知道數(shù)組可以容納多少元素。但是,你直到運(yùn)行時(shí)才能知道需要多大的數(shù)組。為了解決這個(gè)問(wèn)題,類集框架定義了ArrayList。本質(zhì)上,ArrayList是對(duì)象引用的一個(gè)變長(zhǎng)數(shù)組。也就是說(shuō),ArrayList能夠動(dòng)態(tài)地增加或減小其大小。數(shù)組列表以一個(gè)原始大小被創(chuàng)建。當(dāng)超過(guò)了它的大小,類集自動(dòng)增大,當(dāng)對(duì)象被刪除后,數(shù)組就可以縮??;d、 盡管當(dāng)對(duì)象被存儲(chǔ)在ArrayList對(duì)象中時(shí),其容量會(huì)自動(dòng)增加,仍可以通過(guò)調(diào)用ensureCapacity()方法來(lái)人工地增加ArrayList的容量。在開(kāi)始時(shí),通過(guò)一次性地增加它的容量,就能避免后面的再分配,因?yàn)樵俜峙涫呛芑〞r(shí)間的;e、 相反地,如果想要減小在ArrayList對(duì)象之下的數(shù)組的大小,以便它有正好容納當(dāng)前項(xiàng)的大小,可以調(diào)用trimToSize()方法;f、 有時(shí)想要獲得一個(gè)實(shí)際的數(shù)組,這個(gè)數(shù)組包含了列表的內(nèi)容,可以通過(guò)調(diào)用方法toArray()來(lái)實(shí)現(xiàn)它,下面是幾個(gè)為什么可能想將類集轉(zhuǎn)換成為數(shù)組的原因:對(duì)于特定的操作,可以獲得更快的處理時(shí)間;為了給方法傳遞數(shù)組,而方法不必重載去接收類集;為了將新的基于類集的程序與不認(rèn)識(shí)類集的老程序集成。LinkedLista、 實(shí)現(xiàn)了隊(duì)列(Deque)的接口,底層是鏈表實(shí)現(xiàn)的,先進(jìn)先出;b、 鏈表實(shí)現(xiàn),遍歷較慢,增加刪除效率高;c、 此類實(shí)現(xiàn)Deque接口,為add、poll提供先進(jìn)先出隊(duì)列操作,以及其他堆棧和雙端隊(duì)列操作;d、 所有操作都是按照雙重鏈接列表的需要執(zhí)行的,在列表中編索引的操作將從開(kāi)頭或結(jié)尾遍歷列表(從靠近指定索引的一端)。Vector數(shù)組實(shí)現(xiàn)(和ArrayList一樣),同步的,線程安全,重量級(jí)的。(犧牲了效率,提高數(shù)據(jù)的安全性);而ArrayList是線程不安全的。Vector類現(xiàn)在已經(jīng)很少用了,因?yàn)楝F(xiàn)在的JDK提供了一個(gè)Collections類,該類中提供了很多synchronized的方法,可以將一個(gè)線程不安全的Collection包裝成一個(gè)線程安全的Collection。這比使用Vector要更方便更靈活。Set(集合)接口無(wú)序存放,不可重復(fù)。只有一個(gè)add方法,因?yàn)樗菬o(wú)序的,而List中有兩個(gè)add方法。其他的一些和下標(biāo)有關(guān)的方法,在Set里面都沒(méi)有。常用的方法:clear、contains、isEmpty、remove、size、toArray。HashSet數(shù)組和鏈表實(shí)現(xiàn)的。 不排序的,不能重復(fù)的(hashCode相同,則覆蓋)。HashSet擴(kuò)展AbstractSet并且實(shí)現(xiàn)Set接口。它創(chuàng)建一個(gè)類集, 該類集使用散列表進(jìn)行存儲(chǔ)。正像大多數(shù)讀者很可能知道的那樣,散列表通過(guò)使用稱之為散列法的機(jī)制來(lái)存儲(chǔ)信息。在散列(hashing)中,一個(gè)關(guān)鍵字的信息內(nèi)容被用來(lái)確定唯一的一個(gè)值,稱為 散列碼(hashcode)。而散列碼被用來(lái)當(dāng)做與關(guān)鍵字相連的數(shù)據(jù)的存儲(chǔ)下標(biāo)。關(guān)鍵字到其散列碼的轉(zhuǎn)換是自動(dòng)執(zhí)行的——你看不到散列碼本身。你的程序代碼也不能直接索引散列表。下面的構(gòu)造函數(shù)定義為:HashSet()HashSet(Collectionc)HashSet(intcapacity)HashSet(intcapacity,floatfillRatio)第一種形式構(gòu)造一個(gè)默認(rèn)的散列集合。第二種形式用c中的元素初始化散列集合。第三種形式用capacity初始化散列集合的容量。第四種形式用它的參數(shù)初始化散列集合的容量和填充比(也稱為加載容量)。填充比必須介于0.0與1.0之間,它決定在散列集合向上調(diào)整大小之前,有多少能被充滿。具體的說(shuō),就是當(dāng)元素的個(gè)數(shù)大于散列集合容量乘以它的填充比時(shí), 散列集合自動(dòng)擴(kuò)容(從新做一次散列運(yùn)算,得到新空間的新位置,而不是把原來(lái)位置的對(duì)象直接照搬過(guò)來(lái)) 。對(duì)于沒(méi)有獲得填充比的構(gòu)造函數(shù),默認(rèn)使用 0.75。HashSet沒(méi)有定義任何超過(guò)它的超類和接口提供的其他方法。重要的是,注意散列集合并沒(méi)有確保其元素的順序,因?yàn)樯⒘蟹ǖ奶幚硗ǔ2蛔屪约簠⑴c創(chuàng)建排序集合。如果需要排序存儲(chǔ),另一種類集 一一TreeSet將是一個(gè)更好的選擇。注:HashMap底層也是用數(shù)組,HashSet底層實(shí)際上也是HashMap,HashSet類中有HashMap屬性。HashSet實(shí)際上為(key.nuII)類型的HashMap。有key值而沒(méi)有value值。即:HashMap有鍵-值兩部分組成,而HashSet就是HashMap中的鍵的那一部分。所以HashMap和HashSet添加元素的規(guī)則是一樣的。注意:HashMap中的put方法(相當(dāng)于HashSet中的add方法):如果本來(lái)有一條記錄:("zhangsan",20);再用put方法添加一條記錄:put("zhangsan",28);那么會(huì)將zhangsan鍵與28值相關(guān)聯(lián),覆蓋("zhangsan",20),返回20。而這樣的情況在HashSet中就表現(xiàn)為把元素舍棄掉了。底層用的是哈希散列表(長(zhǎng)度 16的數(shù)組)來(lái)存儲(chǔ)對(duì)象,存放對(duì)象之前先做一個(gè)哈希散列運(yùn)算(當(dāng)要把對(duì)象放到到底層存儲(chǔ)方式為哈希散列的集合中的時(shí)候,系統(tǒng)會(huì)自動(dòng)調(diào)用hashcode方法):1、 首先得到對(duì)象的哈希碼,就是用對(duì)象在內(nèi)存中的的首地址調(diào)用hashCode()方法,不同對(duì)象的首地址是不同的。publicinthashCode();返回一個(gè)int值,也就是哈希碼。還有Object類里toString方法默認(rèn)返回的是:類名+@+地址,這里的地址也是用對(duì)象哈希碼的16進(jìn)制表示的。如果我們覆蓋了hashcode方法,那么toString方法的返回值也將會(huì)跟這hashcode方法一起改變。API描述:publicStringtoString()返回該對(duì)象的字符串表示。通常, toString方法會(huì)返回一個(gè)"以文本方式表示”此對(duì)象的字符串。結(jié)果應(yīng)是一個(gè)簡(jiǎn)明但易于讀懂的信息表達(dá)式。建議所有子類都重寫此方法。Object類的toString方法返回一個(gè)字符串,該字符串由類名(對(duì)象是該類的一個(gè)實(shí)例)、at標(biāo)記符“@”和此對(duì)象哈希碼的無(wú)符號(hào)十六進(jìn)制表示組成。換句話說(shuō),該方法返回一個(gè)字符串,它的值等于:getClass().getName()+@+Integer.toHexString(hashCode())hashCode()方法返回值的16進(jìn)制形式,hashCode()方法返回的是對(duì)象的地址,是整型的。2、用hashCode()方法返回的哈希碼對(duì) HashSet底層數(shù)組的長(zhǎng)度求余,得到一個(gè) 0-15之間的值(默認(rèn)16個(gè)長(zhǎng)度),然后這個(gè)值就是存在HashSet數(shù)組中的下標(biāo),如果該下標(biāo)位置上已經(jīng)有元素了,如果不沖突,就把這個(gè)對(duì)象放到該位置, 如果沖突的話,就對(duì)這兩個(gè)對(duì)象作比較,如果不相等,就把這個(gè)對(duì)象也放到這個(gè)位置,對(duì)于是怎么放的, 有可能每個(gè)數(shù)組元素都是一個(gè)鏈表,那么是此下標(biāo)的元素如果equals比較的結(jié)果不相等,就會(huì)都放到這個(gè)鏈表中。如果他們比較是相等的,那么這個(gè)要被插入的對(duì)象就被拋棄掉了,沒(méi)有插入成功。HashSet比較兩個(gè)對(duì)象是否相等用的是 equals()方法。所以,只有同時(shí)覆蓋了對(duì)象的equals方法和hashCode方法,讓此方法按自己的算法運(yùn)算的話才能算是相同的對(duì)象,覆蓋 hashCode方法的原則:原則1:讓equals相等的對(duì)象返回相同的hashCode,這樣用相同的哈希碼得到的下標(biāo)將會(huì)相同,使相同對(duì)象得到的下標(biāo)沖突,這樣就能過(guò)濾掉相等的元素。原則2:盡量保證(因?yàn)榫退悴煌膶?duì)象,計(jì)算之后得到的下標(biāo)也有可能相同) equals不相同的對(duì)象返回不同的hashCode(為了添加不同的元素)。原則3:盡量的讓對(duì)象的哈希碼隨即散列。(不要發(fā)生局部聚集,使哈希碼的取值范圍盡量散列開(kāi)來(lái))TreeSetTreeSet實(shí)現(xiàn)了Set接口和SortedSet接口。使用元素的自然順序?qū)υ剡M(jìn)行排序,或者根據(jù)創(chuàng)建set時(shí)提供的Comparator進(jìn)行排序,具體取決于使用的構(gòu)造方法。 (這里的自然順序,是指該對(duì)象實(shí)現(xiàn)了 Comparable接口后定義的compareTo方
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 裝修行業(yè)供貨合同協(xié)議
- 蕭縣貨車買賣合同協(xié)議
- 茶葉核桃購(gòu)銷合同協(xié)議
- 自擬合同三方協(xié)議范本
- 蓄電池安裝合同協(xié)議
- 藥物器械采購(gòu)合同協(xié)議
- 茶山承租合同和協(xié)議
- 自貢企業(yè)培訓(xùn)合同協(xié)議
- 襪子中英文合同協(xié)議
- 花崗石倒角合同協(xié)議
- 蘇科版二年級(jí)下冊(cè)勞動(dòng)第8課《杯套》課件
- GB/T 28799.2-2020冷熱水用耐熱聚乙烯(PE-RT)管道系統(tǒng)第2部分:管材
- 《財(cái)務(wù)報(bào)表分析文獻(xiàn)綜述2200字》
- GA 53-2015爆破作業(yè)人員資格條件和管理要求
- 金屬學(xué)及熱處理練習(xí)題答案
- 新部編版四年級(jí)語(yǔ)文下冊(cè)課件(精美版)習(xí)作6
- 超聲引導(dǎo)下針刀精準(zhǔn)治療膝骨關(guān)節(jié)炎課件
- 常見(jiàn)典型心電圖診斷規(guī)培-課件
- 國(guó)內(nèi)旅客臨時(shí)住宿登記表格式
- 八年級(jí)期末質(zhì)量分析-課件
- 費(fèi)森4008s常見(jiàn)故障排除
評(píng)論
0/150
提交評(píng)論