版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
一、常用的DOS命令dir(directory): 列出當前目錄下的文件以及文件夾md(makedirectory):創(chuàng)建目錄rd(removedirectory): 刪除目錄cd(changedirectory):進入指定目錄cd..:退回到上一級目錄cd\:退回到根目錄exit:退出dos命令行二、第一個程序什么是JDKJRE下載及安裝jdk步驟:.將Java代碼編寫到擴展名為.java得文件中:.需要確保原文件是.JAVA為擴展名.代碼:classHelloWorld{publicstaticvoidmain(String[]args){System.out.println(//Helloworld");)}.通過javac編譯.需要設(shè)置環(huán)境變量.JavacHelloWorld.java.通過java命令運行class文件:jjavaHelloWorld三、注釋單行注釋格式:〃注釋文字多行注釋格式:/*注釋文字*/文檔注釋四'數(shù)據(jù)類型「數(shù)值型「整數(shù)類型(byte.shorUW?!?「基本
數(shù)據(jù)類型一數(shù)據(jù)類型Y,浮點類型(float,double)「基本
數(shù)據(jù)類型一數(shù)據(jù)類型Y布爾型(boolean)引用jgass)——字符串在這里數(shù)據(jù)類型T接口(interface)數(shù)組(口)Java的整型常量默認為int型,聲明long型常量須后加T或‘L'inti=13;longcount=14L;Java的浮點型默認為double型,聲明float常量須后加中或'F'doublest=12.23;floatss=12.32F;boolean類型數(shù)據(jù)只允許取值true和false,不可以0或非0的整數(shù)替代true和falsebooleanflag=true;自動的類型轉(zhuǎn)換floatf2=12;強制類型轉(zhuǎn)換inti2=(int)12.32;有多種類型的數(shù)據(jù)混合運算時,系統(tǒng)首先自動將所有數(shù)據(jù)轉(zhuǎn)換成容量最大的那種數(shù)據(jù)類型,然后再進行計算longresult=12+12L;byte,short,char之間不會相互轉(zhuǎn)換,他們?nèi)咴谟嬎銜r首先轉(zhuǎn)換為int類型bytebl=12;byteb2=13;intb3=bl+b2;〃而不是byteb3字符串不能直接轉(zhuǎn)換為基本類型boolean類型不可以轉(zhuǎn)換為其它的數(shù)據(jù)類型類型占用存儲空間表數(shù)范圍byte1字字-128?127short2字出-215?215-1int4字節(jié)-231?231-1long6字節(jié)一263?263.1五、運算符1)如果對負數(shù)取模,可以把模數(shù)負號忽略不記,如:5%-2=1?但被模數(shù)是負數(shù)就不能忽略符號;2)對于除號“/",它的整數(shù)除和小數(shù)除是有區(qū)別的:整數(shù)之間做除法時,只保留整數(shù)部分而舍棄小數(shù)部分;3)"+"除字符串相加功能外,還能把非字符串轉(zhuǎn)換成字符串.例如:System,out.println("5+5="+5+5);4)賦值運算符(=):將等號右邊表達式的結(jié)果賦值給等號左邊的變量;5)算術(shù)運算符(+-*/%++—):i++;等同于i=i+1;①i++;i—類型占用存儲空間表數(shù)范圍單精度float4字節(jié)-3.403E38-3.403E38雙精度double8字節(jié)-1.798E308~1.798E308②++i;T6)關(guān)系運算符(><>=<===!=):主要用于進行比較運算,返回結(jié)果為布爾型7)邏輯運算符:&&、||、!、,、&“+”除字符串相加功能外,還能把非字符串轉(zhuǎn)換成字符串.例如:System.out.println("5+5="+5+5);〃打印結(jié)果是5+5=55;擴展賦值運算符:+=,-=,*=,/=,%=z+=100;即z=z+100;位運算是直接對二進制進行運算“&”和“&&”的區(qū)別:單&時,左邊無論真假,右邊都進行運算;雙&時,如果左邊為真,右邊參與運算,如果左邊為假,那么右邊不參與運算。和的區(qū)別同理,雙或時,左邊為真,右邊不參與運算。異或(八)與或(I)的不同之處是:對于A而言,當左右都為true時,結(jié)果為false。8)三元運算符格式:(條件表達式)?表達式1:表達式2;如果條件為true,運算后的結(jié)果是表達式1;如果條件為false,運算后的結(jié)果是表達式2;六、規(guī)則1、若一個java文件中有public聲明的類,則java文件的文件名必須和類名一致。2、在一個java文件中可以聲明多個類,但只能有一個public類型的類。七、IFpublicclassTestAge{publicstaticvoidmain(Stringargs[]){TestAget=newTestAge();t.age(75);}publicvoidage(intage){if(age<0){System.out.println("不可能!");}elseif(age>250){System.out.printin("是個妖怪!”);}else{System.out.printin("此人芳齡"+age+"馬馬乎乎啦!“);})}八、SWITCHpublicclassTest{publicstaticvoidmain(Stringargs[]){inti=1;switch(i){case0:System.out.println(nzero");break;case1:System.out.printlnf'one");//break;default:System.out.println("defaultn);break;)))七、循環(huán)1、循環(huán)語句分類for循環(huán)while循環(huán)do/while循環(huán)2、for循環(huán)publicclassForLoop{publicstaticvoidmain(Stringargs[]){intresult=0;for(inti=l;i<=100;i++){result+=i;}System.out.println("result=K+result);)}3、while循環(huán)publicclassWhileLoop{publicstaticvoidmain(Stringargs[]){intresult=0;inti=l;while(i<=100){result+=i;i++;}System.out.println(Hresult=H+result);}}4、do/while循環(huán)publicclassWhileLoop{publicstaticvoidmain(Stringargs[]){intresult=0,i=l;do{result+=i;i++;}while(i<=100);System.out.println("result="+result);|)八、break、continue1、break只能用于switch語句和循環(huán)語句中。continue只能用于循環(huán)語句中。2、Break示例publicclassTestBreak{publicstaticvoidmain(Stringargs[]){for(inti=0;i<10;i++){if(i==3)break;System.out.println(Mi="+i);}System.out.println("GameOver!");)}3、Continue示例publicclassContinueTest{publicstaticvoidmain(Stringargs[]){for(inti=0;i<100;i++){if(i%10==0)continue;System.out.println(i);)九、數(shù)組1、數(shù)組屬引用類型,數(shù)組中的元素可以是任何數(shù)據(jù)類型,包括基本類型和引用類型2、Java語言中聲明數(shù)組時不能指定其長度(數(shù)組中元素的數(shù))3、聲明方式:int[]name;〃聲明數(shù)組int[]scores={90,93,83,89,88,98};String[]names=newString[5];〃聲明數(shù)組并分配內(nèi)存空間int[]socres2=new同上System.out.println(scores.length);//^!出數(shù)組長度System.out.println(scores⑼);〃輸出數(shù)組中的第一個元素4、用鍵盤輸入的聲明及調(diào)用importjava.util.Scanner;classTestlf{publicstaticvoidmain(String[]args){〃2、創(chuàng)建Scanner對象Scannerscanner=newScanner(System.in);〃3、獲取輸入整數(shù)System.out.print("a=H);inta=scanner.nextlnt();}}5、快捷鍵:Sysout+'alt+r6、數(shù)組聲明Java中多維數(shù)組的聲明和初始化應按從高維到低維的順序進行int[][]t=newint[4][];//t有4行,第一個維數(shù)不空即可t[0]=newint⑸; 〃每一行都是一個有5個元素的一維數(shù)組t[l]=new毗⑸;7、靜態(tài)初始化:intintArray[][]={{1,2},{2,3},{3,4,5}};intintArrayl⑶⑵={{1,2},{2,3},{4,5}};//illegal,等號左邊不能指定維數(shù)動態(tài)初始化inta[][]=newint⑷⑸;intb[][]=newint[3][]b[0]=newint⑵;b[l]=newint[3];b[2]=newint[5];十、類和對象1、使用class聲明類ClassPerson{};2、聲明類的屬性:在類的內(nèi)部,方法的外部,聲明變量classPerson{Stringname;Intage;3、聲明方法:在類的內(nèi)部,基本語法:修飾符(private,public,protected,default)返回值類型方法名(參數(shù)列表){方法體;)例:publicvoidsayHello(Stringname){System.out.println(wHello:M+name);)4、若方法需要返回值,則使用return關(guān)鍵字返回對應的值。intgetAge(){return12;)十一'信息的封裝和隱藏,構(gòu)造器1、Java中通過將數(shù)據(jù)聲明為私有的(private),再提供公開的(public)方法:getXXX和setXXX實現(xiàn)對該屬性的操作2、構(gòu)造器功能:創(chuàng)建類的實例時,初始化實例的一組指令。語法格式:<修飾符〉<類名>([<參數(shù)表>]){[<語句習}舉例:publicclassAnimal{privateintlegs;publicAnimal(){legs=4;}〃構(gòu)造器publicvoidsetLegs(inti){legs=i;}publicintgetLegs(){returnlegs;}}創(chuàng)建Animal類的實例:Animala=newAnimal。;〃調(diào)用構(gòu)造器,將legs初始化為4注釋:構(gòu)造器的名稱必須與類名相同。修飾符:public、private>protected構(gòu)造器不是方法,沒有返回值(連void也不能寫)3,shift+ctrl+o,導入調(diào)用的類。十二、函數(shù)的重載1、方法重載在同一個類中可以定義多個同名方法一方法名重載(overload)publicclassPrintStream{TOC\o"1-5"\h\zpublicvoidprint(inti){ }publicvoidprint(floatf){ }publicvoidprint(Strings){ }}重載方法的參數(shù)列表必須不同重載方法的返回值類型可以相同,也可以不同調(diào)用時根據(jù)方法的參數(shù)類型來區(qū)別。print(3);print(1.2f);print(uhello!w);2、構(gòu)造器重載構(gòu)造方法一般用來創(chuàng)建對象的同時初始化對象。如classPerson{Stringname;intage;publicPerson(Stringn,inta){name=n;age=a;}}構(gòu)造方法重載使得對象的創(chuàng)建更加靈活,方便創(chuàng)建各種不同的對象。構(gòu)造方法重載舉例:publicclassPerson{publicPerson(Stringname,intage,Dated){this(name,age);}publicPerson(Stringname,intage){...}publicPerson(Stringname,Dated){...}publicPerson(){...})構(gòu)造方法重載,參數(shù)列表必須不同十三、This的用途1、在方法中應用當前對象的屬性:publicPerson(Stringnamejntage){=name;this.age=name;}2、在類的構(gòu)造方法中調(diào)用重載的工作方法,this必須放在構(gòu)造方法的笫一行(this與super不能同時存在,super也要放在第一行)。publicPerson(Stringnamejntage){=name;this.age=name;)publicPerson(Stringnamejntage,Stringschool){this(name,age);this.school=school;}十四、類的繼承1、類繼承語法規(guī)則:<修飾符〉class<子類名稱>[extends<父類>]{〈屬性和方法的聲明〉)2、Java只支持單繼承,不允許多重繼承一個子類只能有一個父類一個父類可以派生出多個子類3,子類不能繼承父類中私有的(private)的成員變量和方法。4、在Java中,繼承的關(guān)鍵字用的是“extends”,即子類不是父類的子集,而是對父類的'‘擴度O十五'訪問控制1、可以對Java類中定義的屬性和方法進行訪問控制一規(guī)定不同的保護等級:tected>default、private修飾符同一個類同一個包子類整體privateYesdefaultYesYesprotectedYesYesYespublicYesYesYesYes2、方法覆蓋在子類中可以根據(jù)需要對從父類中繼承來的方法進行改造一覆蓋方法(方法的重置、重寫),在程序執(zhí)行時,子類的方法將覆蓋父類的方法。覆蓋方法必須和被覆蓋方法具有相同的方法名稱、參數(shù)列表和返回值類型。覆蓋方法不能使用比被覆蓋方法更嚴格的訪問權(quán)限。3、在Java類中使用super來引用父類的成分super可用于訪問父類中定義的屬性publicStringgetlnfo(){returnsuper.getlnfo()+w,school:w+school;}super可用于調(diào)用父類中定義的成員方法super可用于在子類構(gòu)造方法中調(diào)用父類的構(gòu)造方法super的追溯不僅限于直接父類子類繼承父類所有的成員變量和成員方法,但不繼承父類的構(gòu)造方法(構(gòu)造器不能被繼承)5、調(diào)用父類構(gòu)造方法在子類的構(gòu)造方法中可使用super(參數(shù)列表)語句調(diào)用父類的構(gòu)造方法如果子類的構(gòu)造方法中沒有顯示地調(diào)用父類構(gòu)造方法,也沒有使用this關(guān)鍵字調(diào)用重載的其它構(gòu)造方法,則系統(tǒng)默認調(diào)用父類無參數(shù)的構(gòu)造方法如果子類構(gòu)造方法中既未顯式調(diào)用父類構(gòu)造方法,而父類中又沒有無參的構(gòu)造方法,則編譯出錯十六、多態(tài)多態(tài)一在Java中,子類的對象可以替代父類的對象使用一個變量只能有一種確定的數(shù)據(jù)類型一個引用類型變量可能指向(引用)多種不同類型的對象Personp=newStudent();Objecto=newPerson();//Object類型的變量o,指向Person類型的對象=newStudent。;“Object類型的變量o,指向Student類型的對象父類類型的變量可以指向子類的對象?一個引用類型變量如果聲明為父類的類型,但實際引用的是子類對象,那么該變量就不能再訪問子類中添加的屬性和方法Studentm=newStudent();m.school="pku”;〃合法,Student類有school成員變量Persone=newStudent();e.school="pku”;〃非法,Person類沒有school成員變量屬性是在編譯時確定的,編譯時e為Person類型,沒有school成員變量,因而編譯錯誤。1、在多態(tài)情況下,可以對對象強制的類型轉(zhuǎn)換Personp2=newMan();P2.walk();Manman=(man)p2;Man.work();〃以下轉(zhuǎn)換會發(fā)生運行異常Womanwoman=(Woman)p2;Woman.shopping();2,只有在父子關(guān)系的情況下,才能進行強制的類型轉(zhuǎn)換3、父類的對象可以轉(zhuǎn)為任何子類的類型,但有可能發(fā)生java.Iang.ClassCastException4、對Java對象的強制類型轉(zhuǎn)換成為造型從子類到父類的類型轉(zhuǎn)換可以自動進行從父類到子類的類型轉(zhuǎn)換必須通過造型(強制類型轉(zhuǎn)換)實現(xiàn)無繼承關(guān)系的引用類型間的轉(zhuǎn)換時非法的在造型前可以使用instanceof操作符測試一個對象的類型(xinstanceofA:檢驗x是否為A的對象,返回值為布爾類型)十七'object類1、Object類是所有Java類的根父類如果在類的聲明中未使用extends關(guān)鍵字指明其父類,則默認父類為Object類publicclassPerson{)等價于:publicclassPersonextendsObject{2、equals。方法是Object類的方法,用于判斷兩個對象是否指向同一個內(nèi)存空間。由于所有類都繼承Object類,也就繼承了equals。方法。只能比較引用類型,其作用與“==”相同,比較是否指向同一個對象。格式:objl.equals(obj2)3、特例:當用equals。方法進行比較時,對類File、String、Date及封裝類(WrapperClass)來說,是比較類型及內(nèi)容而不考慮引用的是否是同一個對象;4、==操作符與equals方法的區(qū)別:?==:引用類型比較引用(是否指向同一個對象):Personpl=newPerson();Personp2=newPerson();if(pl==p2){...}? 基本類型比較值;inta=5;if(a==6){…}?用”=“進行比較時,符號兩邊的數(shù)據(jù)類型必須一致(可自動轉(zhuǎn)換的基本數(shù)據(jù)類型除外),否則編譯出錯;3、toString方法toString。方法在Object類中定義,其返回值是String類型,返回類名和它的引用地址。在進行String與其它類型數(shù)據(jù)的連接操作時,自動調(diào)用toString。方法Datenow=newDate();System.out.println(//now=,/+now);?相當于System.out.println("now="+now.toString());//now=Date@122345? 可以根據(jù)需要在用戶自定義類型中重寫toString()方法如String類重寫了toString。方法,返回字符串的值。sl="hello";System.out.println(sl);〃相當于System.out.println(sl.toStringO);?在ToStringl.java中的類A里覆蓋toString方法,使其輸出類A對象的cint屬性值。?基本類型數(shù)據(jù)轉(zhuǎn)換為String類型時,調(diào)用了對應封裝類的toString。方法inta=10;System.out.println(“a二"+a);5、虛擬方法調(diào)用(多態(tài)情況下)Persone=newStudent();e.getlnfo();〃調(diào)用Student類的getlnfo()方法編譯時類型和運行時類型編譯時e為Person類型,而方法的調(diào)用是在運行時確定的,所以調(diào)用的是Student類的getlnfo()方法。 動態(tài)綁定十八、封裝類1.基本數(shù)據(jù)類型封裝類booleanBooleanbyteByteshortShortintIntegerlongLongcharCharacterfloatFloatdoubleDouble2、封裝類就是基本數(shù)據(jù)類型對應的引用類型十九、關(guān)鍵字static1、static標記的變量或方法由整個類(所有實例)共享,如訪問控制權(quán)限允許,可不必創(chuàng)建該類對象而直接用類名加調(diào)用。2,類變量(類屬性)由該類的所有實例共享,類屬性類似于全局變量3、不用創(chuàng)建對象就可以訪問靜態(tài)成員,訪問方式:類名.類屬性類名.類方法4、沒有對象的實例時,可以用類名.方法名()的形式訪問由static標記的類方法5、在static方法內(nèi)部只能訪問類的static屬性,不能訪問類的非static屬性。6,因為不需要實例就可以訪問static方法,因此static方法內(nèi)部不能有this,(也不能有super?)7、在靜態(tài)方法里只能直接調(diào)用同類中其它的靜態(tài)成員(包括變量和方法),而不能直接訪問類中的非靜態(tài)成員。這是因為,對于非靜態(tài)的方法和變量,需要先創(chuàng)建類的實例對象后才可使用,而靜態(tài)方法在使用前不用創(chuàng)建任何對象。8、靜態(tài)方法不能以任何方式引用this和super關(guān)鍵字。與上面的道理一樣,因為靜態(tài)方法在使用前不用創(chuàng)建任何實例對象,當靜態(tài)方法被調(diào)用時,this所引用的對象根本就沒有產(chǎn)生。9、main()方法是靜態(tài)的,因此JVM在執(zhí)行main方法時不創(chuàng)建main方法所在的類的實例對象,因而在main()方法中,我們不能直接訪問該類中的非靜態(tài)成員,必須創(chuàng)建該類的一個實例對象后,才能通過這個對象去訪問類中的非靜態(tài)成員,這種情況,我們在以后的例子中會多次碰到.二十、類屬性、類方法的設(shè)計思想1、類屬性作為該類各個對象之間共享的變量。在設(shè)計類時,分析哪些類屬性不因?qū)ο蟮牟煌淖儯瑢⑦@些屬性設(shè)置為類屬性。相應的方法設(shè)置為類方法。2、如果方法與調(diào)用者無關(guān),則這樣的方法通常被聲明為類方法,由于不需要創(chuàng)建對象就可以調(diào)用類方法,從而簡化了方法的調(diào)用3、靜態(tài)初始化:一個類中可以使用不包含在任何方法體中的靜態(tài)代碼塊(staticblock),當類被載入時,靜態(tài)代碼塊被執(zhí)行,且只被執(zhí)行一次,靜態(tài)塊經(jīng)常用來進行類屬性的初始化。static塊通常用于初始化static(類)屬性classPerson{publicstaticinttotal;static{total=100;〃為total賦初值)……〃其它屬性或方法聲明}4、設(shè)計模式是在大量的實踐中總結(jié)和理論化之后優(yōu)選的代碼結(jié)構(gòu)、編程風格、以及解決問題的思考方式。5、所謂類的單態(tài)設(shè)計模式,就是采取一定的方法保證在整個的軟件系統(tǒng)中,對某個類只能存在一個對象實例,并且該類只提供一個取得其對象實例的方法。
publicclassSingle{//l.在類的外部不能通過new構(gòu)造2s的方式創(chuàng)建寞例.//用構(gòu)送雷通球"來,即構(gòu)工器乂有化privateSingle(){}//2.因為在類的外部不詼創(chuàng)城夷的實例,只能在類的內(nèi)郃創(chuàng)建.1/3.為了"類的外部可以直接使用或?qū)嵗?,使用static修飾.//4.不能在臭的外部可以修改該屬代:弘育化該屬11,H時援供公有的get方法//親/問privatestaticSingleinstance=newSingle();publicstaticSinglegetlnstance(){returninstance;publicclassTestSingle(publicstaticvoidmain(String(]args){// Singlesinglel=newSingle();// Singlesingle2=newSingle();Singleinstancel=Single.getlnstance();Singleinstance2=Single.getlnstance();System.out.printIn(instancel==instance?);// Single.getInstance()=null;//Sinerleinstances=Single.instance:二4■一、final關(guān)鍵字1、在Java中聲明類、屬性和方法時,可使用關(guān)鍵字final來修飾。2、final標記的變量(成員變量或局部變量)即成為常量,只能賦值一次。必須在聲明時被初始化,或在非靜態(tài)代碼塊中(或構(gòu)造器中)初始化。3、final標記的類不能被繼承。提高安全性,提高程序的可讀性。4、final標記的方法不能被子類重寫。增加安全性。5、final標記的成員變量必須在聲明的同時或在每個構(gòu)造方法中顯式賦值,然后才能使用。二十二、抽象類1、有時將一個父類設(shè)計得非常抽象,以至于它沒有具體的實例,這樣的類叫做抽象類。2、用abstract關(guān)鍵字來修飾一個類時,這個類叫做抽象類;用abstract來修飾一個方法時,
該方法叫做抽象方法。抽象方法:只有方法的聲明,沒有方法的實現(xiàn)。以分號結(jié)束。abstractintabstractMethodl(inta);含有抽象方法的類必須被聲明為抽象類。但抽象類中可以沒有抽象方法。抽象類不能被實例化。抽象類是用來被繼承的,抽象類的子類必須重寫父類的抽象方法,并提供方法體。,不能用abstract修飾私有方法,構(gòu)造方法,靜態(tài)方法。3、案例:Java允許類設(shè)計者指定:超類聲明一個方法但不提供實現(xiàn),該方法的實現(xiàn)由子類提供。這樣的方法稱為抽象方法。有一個或更多抽象方法的類稱為抽象類。Vehicle是一個抽象類,有兩個抽象方法。publicabstractclassVehicle{publicabstractdoublecalcFuelEfficiency();〃計算燃料效率的抽象方法publicabstractdoublecalcTripDistance();〃計算行駛距離的抽象方法}publicclassTruckextendsVehicle{publicdoublecalcFuelEfficiency(){〃寫出計算卡車的燃料效率的具體方法}publicdoublecalcTripDistance() {〃寫出計算卡車行駛距離的具體方法}}publicclassRiverBargeextendsVehicle{publicdoublecalcFuelEfficiency(){〃寫出計算駁船的燃料效率的具體方法}publicdoublecalcTripDistance(){〃寫出計算駁船行駛距離的具體方法}}注意:抽象類不能實例化 newVihicle()是非法的二十三、interface接口1、接口(interface)是抽象方法和常量值的定義的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現(xiàn)。2、接口的特點:用interface來定義。接口中的所有成員變量都默認是由publicstaticfinal修飾的。常量的命名規(guī)范:多M儂成,每個字母都/要+寫;U.多個甲.詞使用連接。接口中的所有方法都默認是由publicabstract修飾的。接口沒有構(gòu)造方法。實現(xiàn)接口的類中必須提供接口中所有方法的具體實現(xiàn)內(nèi)容。實現(xiàn)接口使用implements關(guān)鍵字多個無關(guān)的類可以實現(xiàn)同一個接口一個類可以實現(xiàn)多個無關(guān)的接口PublicclassOrderDaoimplementsDao,Test與繼承關(guān)系類似,接口與實現(xiàn)類之間存在多態(tài)性接口也可以繼承另一個接口,使用extends關(guān)鍵字。PublicinterfaceBaseDaoextendsDao如果類繼承父類的同時又實現(xiàn)多個接口,那么繼承應該在前面,即:PublicabstractclassOrderDaoextendsBaseDaoImpIimplementsDao,Test。二十四、內(nèi)部類1、在Java中,允許一個類的定義位于另一個類的內(nèi)部,前者稱為內(nèi)部類內(nèi)部類和外層封裝它的類之間存在邏輯上的所屬關(guān)系Innerclass一般用在定義它的類或語句塊之內(nèi),在外部引用它時必須給出完整的名稱。Innerclass的名字不能與包含它的類名相同;Innerclass可以使用包含它的類的靜態(tài)和實例成員變量,也可以使用它所在方法的局部變量;Innerclass可以聲明為抽象類,因此可以被其它的內(nèi)部類繼承。也可以聲明為final的。和外層類不同,Innerclass可以聲明為private或protected;Innerclass可以聲明為static的,但此時就不能再使用外層封裝類的非static的成員變量;非static的內(nèi)部類中的成員不能聲明為static的,只有在頂層類或static的內(nèi)部類中才可聲明static成員;2、在類的外部如何創(chuàng)建內(nèi)部類對象?對于非靜態(tài)內(nèi)部類:必須先創(chuàng)建外部類對象,然后再創(chuàng)建內(nèi)部類對象OuterClassoc=newOuterClass();〃創(chuàng)建外部類對象InnerClassic=oc.newlnnerClass();〃創(chuàng)建內(nèi)部類對象lc.test();〃正常調(diào)用方法? 靜態(tài)內(nèi)部類:內(nèi)部類使用static來修飾,所以創(chuàng)建該類的對象可以沒有外部類對象?!o態(tài)內(nèi)部類的方法不能訪問外部類的非靜態(tài)成員?!鯯taticInnerClasssic=newOuterClass.StaticlnnerClass();二十五、異常處理1、Java提供的是異常處理的抓拋模型。2、異常處理是通過try-catch-finally語句實現(xiàn)的。try(......〃可能產(chǎn)生異常的代碼)catch(ExceptionNamele){……〃當產(chǎn)生ExceptionNamel型異常時的處置措施)catch(ExceptionName2e)(...... 〃當產(chǎn)生ExceptionName2型異常時的處置措施[finally{……〃無條件執(zhí)行的語句}13、try捕獲異常的第一步是用try{…}語句塊選定捕獲異常的范圍,將可能出現(xiàn)異常的代碼放在try語句塊中。catch(Exceptiontypee)在catch語句塊中是對異常對象進行處理的代碼。每個try語句塊可以伴隨一個或多個catch語句,用于處理可能產(chǎn)生的不同類型的異常對象。finally捕獲異常的最后一步是通過finally語句為異常處理提供一個統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其它部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的管理。不論在try、catch代碼塊中是否發(fā)生了異常事件,finally塊中的語句都會被執(zhí)行。finally語句是可選的4、如果明確知道產(chǎn)生的是何種異常,可以用該異常類作為catch的參數(shù);也可以用其父類作為catch的參數(shù)。異常類的父類要放在異常類的子類的后面.可以用ArithmeticException類作為參數(shù),也可以用RuntimeException類作為參數(shù),或者用所有異常的父類Exception類作為參數(shù)。但不能是與ArithmeticException類無關(guān)的異常,如NullPointerException,那么,catch中的語句將不會執(zhí)行。5、捕獲異常的有關(guān)信息:與其它對象一樣,可以訪問一個異常對象的成員變量或調(diào)用它的方法。getMessagef)方法,用來得到有關(guān)異常事件的信息printStackTrace()用來跟蹤異常事件發(fā)生時執(zhí)行堆棧的內(nèi)容。6、運行時異常和編譯時異常前面但使用的異常都是RuntimeException類或是它的子類,這些類的異常的特點是:即使沒有使用try和catch捕獲,Java自己也能捕獲,并且編譯通過(但運行時會發(fā)生異常使得程序運行終止)。如果拋出的異常是?Exception類的異常,則必須捕獲,否則編譯錯誤。7、聲明拋出異常是Java中處理異常的第二種方式如果一個方法(中的語句執(zhí)行時)可能生成某種異常,但是并不能確定如何處理這種異常,則此方法應顯式地聲明拋出異常,表明該方法將不對這些異常進行處理,而由該方法的調(diào)用者負責處理。在方法聲明中用throws子句可以聲明拋出異常的列表,throws后面的異常類型可以是方法中產(chǎn)生的異常類型,也可以是它的父類。8、Java異常類對象除在程序執(zhí)行過程中出現(xiàn)異常時由系統(tǒng)自動生成并拋出,也可根據(jù)需要人工創(chuàng)建并拋出首先要生成異常類對象,然后通過throw語句實現(xiàn)拋出操作(提交給Java運行環(huán)境)。lOExceptione=newIOException();throwe;可以拋出的異常必須是Throwable或其子類的實例。下面的語句在編譯時將會產(chǎn)生語法錯誤:thrownewString("wanttothrow");重寫方法不能拋出比被重寫方法范圍更大的異常類型(均指非運行時異常)自定義異常:自己定義的異常類,通常情況下繼承RuntimeExciption自定義異常的作用:看見異常類的名字,就知道出現(xiàn)了什么問題。二十六、集合1、Java集合可分為Set、List和Map三種體系Set:無序、不可重復的集合List:有序,可重復的集合Map:具有映射關(guān)系的集合2、Collection接口是List、Set和Queue接口的父接口。該接口里定義的方法既可用于操作Set集合,也可用于操作List和Queue集合二十七、collectionpackageIesson7;importjava.util.ArrayList;importjava.util.Collection;importjava.util.Iterator;importorg.junit.Test;/*Collection:集合*1、添加元素的2、獲取元素&查找指定元素3、移除元素4、工具方法*7publicclassCollectionTest{/*1、clear():清空集合2、remove(obj):移除指定的元素,通過equals()方法在集合中查找指定的元素*若存在,則移除。3、removeAII(Collectioncoll):移除coll中有的元素4、retainAII(Collectioncoll):保存coll中有的元素。/@TestpublicvoidtestRemove(){Collectioncollection=newArrayList();collection.add("ABC");Personp=newPerson("Jim",12);collection.add(p);collection.add(newPerson("Tom",12));collection.add(newPerson("Jerry”,13));collection.add(newPerson("Mike"/14));//collection.clear();System.out.println(collection.size());collection.remove(p);System.out.println(collection.size());)/**在collection中無法獲取指定的元素,但可以遍歷所有的元素1、使用增強的for循環(huán)。2、使用Iterator迭代器2.1獲取迭代器對象:調(diào)用Collection的iterator()方法,獲取Iterator接口的對象2.2調(diào)用Iterator接口的方法進行迭代*/@Testpublicvoidtestlterator(){Collectioncollection=newArrayList();collection.add("ABC");collection.add(newPerson(,,Tom,,/12));collection.add(newPerson("Jerry”,13));collection.add(newPerson("Mike"z14));for(Objectobj:collection){System.out.println(obj);)System.out.println();Iteratorit=collection.iterator();while(it.hasNext()){Objectobj=it.next();System.out.println(obj);)〃若下一條記錄無效,還調(diào)用next()方法,則拋出NoSuchElement//Objectobj=it.next();}/*addAII(Colletioncoll):添加一組元素到集合中*/@TestpublicvoidtestAddAII(){Collectioncollection2=newArrayList();collectionZ.addC'ATGUIGU");Collectioncollection=newArrayList();collection.add("ABC");collection.add(newPerson("Tom",12));collection.add(newPersonC'Jerry'^lB));collection.add(newPerson(“Mike”」4));collection2.addAII(collection);System.out.println(collection2.size());}/**add(Objectobj):添加一個元素*/@TestpublicvoidtestAdd(){Collectioncollection=newArrayList();System.out.println(collection.size());collection.add("ABCu);collection.add(newPerson("Tom"z12));collection.add(newPerson("Jerry",13));collection.add(newPerson("M汰e”,14));System.out.println(collection.size());})二十八、set集合1、Set集合不允許包含相同的元素,如果試把兩個相同的元素加入同一個Set集合中,則添加操作失敗。Set判斷兩個對象是否相同不是使用==運算符,而是根據(jù)equals方法2、關(guān)于HashsetHashset是set的最典型實現(xiàn)Hashset中不能有重復的元素,判定兩個元素相等的標準,equals()方法返回trueHashset根據(jù)hashCode()值來存放元素,所以不能保證元素的順序如果兩個對象通過equals()方法返回true,這兩個對象的hashCode值也應該相同。HashSet不是線程安全的3、為什么在hashCode方法中有質(zhì)數(shù)(prime)的存在,而不是直接相加?Personpl:name的hashCode值為1000,age的hashCode值為22Personpl:name的hashCode值為2,age的hashCode值為1000fublicinthashCode(){finalintprime=31;intresult=1;result=prime*result+age;result=prime*result+((name==null)?0:name.hashCode());returnresult;}4、UnkedHashSet是HashSet的子類UnkedHashSet集合根據(jù)元素的hashCode值來決定元素的存儲位置,但它同時使用鏈表維護元素的次序,這使得元素看起來是以插入順序保存的。UnkedHashSet性能插入性能略低于HashSet,但在迭代訪問Set里的全部元素時有很好的性能。UnkedHashSet不允許集合元素重復。5、TreeSetTreeSet是SortedSet接口的實現(xiàn)類,TreeSet可以確保集合元素處于排序狀態(tài)。TreeSet支持兩種排序方法:自然排序和定制排序。默認情況下,TreeSet采用自然排序。6、自然排序排序:TreeSet會調(diào)用集合元素的compareTo(Objectobj)方法來比較元素之間的大小關(guān)系,然后將集合元素按升序排列。publicintcompareTo(To):若返回0代表兩個元素相等,若返回整數(shù),代表當前元素大,若返回負數(shù),代表當前元素小。?栗子方法1PublicintcompareTo(Objecto){lf(ointstanceofPerson){Personperson=(Person)o;return-this.age+person.age;}else{thrownewClassCastExcption("不能轉(zhuǎn)為Person類型"卜})?栗子方法2創(chuàng)建Comparator接口的實現(xiàn)類對象實現(xiàn)compare(Objectol,Objecto2)方法來比較兩個對象的大小。Comparatorcomparator=newComparator(){@overridePbulicintcompare(Objectol,Objecto2){lf(olinstanceofPersonl&&o2instanceofPersonl){Personlpl=(Personl)ol;Personlp2=(Personl)o2;Return-pl.getAge()+p2.getAge();}ThrownewClassCastException("不能轉(zhuǎn)為Personl類型”);})?如果試圖把一個對象添加到TreeSet時,則該對象的類必須實現(xiàn)Comparable接口。實現(xiàn)Comparable的類必須實現(xiàn)compareTo(Objectobj)方法,兩個對象即通過compareTo(Objectobj)方法的返回值來比較大小。Comparable的典型實現(xiàn):BigDecimaLBiginteger以及所有的數(shù)值型對應的包裝類:按它們對應的數(shù)值大小進行比較Character:按字符的UNICODE值來進行比較Boolean:true對應的包裝類實例大于false對應的包裝類實例String:按字符串中字符的UNICODE值進行比較Date、Time:后邊的時間、日期比前面的時間、日期大?因為只有相同類的兩個實例才會比較大小,所以向TreeSet中添加的應該是同一個類的對象?當需要把一個對象放入TreeSet中,重寫該對象對應的equals()方法時,應保證該方法與compareTo(Objectobj)方法有一致的結(jié)果:如果兩個對象通過equals()方法比較返回true,則通過compareTo(Objectobj)方法比較應返回07、定制排序?如果需要實現(xiàn)定制排序,則需要在創(chuàng)建TreeSet集合對象時,提供一個Comparator接口的實現(xiàn)類對象。由該Comparator對象負責集合元素的排序邏輯publicTreeSet(Con£arator<?super>comparator)MethodSummaryComparesitstwoargumentsfoforder"3"eciuaA-obj)iny otherobject"equalgncomparato(二十九、List1、List代表一個元素有序、且可重復的集合,集合中的每個元素都有其對應的順序索引2、List允許使用重復元素,可以通過索引來訪問指定位置的集合元素。3、List默認按元素的添加順序設(shè)置元素的索引。4,List集合里添加了一些根據(jù)索引來操作集合元素的方法5、List額外提供了一個listlterator()方法,該方法返回一個Listiterator對象,Listiterator接口繼承了Iterator接口,提供了專門操作List的方法:booleanhasPrevious()Objectprevious()voidadd()6、ArrayList和Vector是List接口的兩個典型實現(xiàn)區(qū)別:是一個古老的集合,通常建議使用ArrayListArrayList是線程不安全的,而Vector是線程安全的。即使為保證List集合線程安全,也不推薦使用Vector7,Arrays.asList(…)方法返回的List集合即不是ArrayList實例,也不是Vector實例。Arrays.asList(—)返回值是一個固定長度的List集合,是一個只讀的List。8、Arrays.asList(...)栗子Publicvoidtest(String...args){System.out.println(args.length);For(inti=O;i<args.length;i++){System.out.println(args[i]);)}9,關(guān)于可變參數(shù)從JDK1.5開始,Java允許定義形參長度可變的參數(shù),從而允許為方法指定數(shù)量不確定的形參若在定義方法時,在最后一個形參的類型后增加三點( 位于變量類型和變量名之間,前后有無空格都可以)則表明該形參可以接受多個參數(shù)值,多個參數(shù)值被當成數(shù)組傳入可變形參只能處于形參表的最后,所以一個方法最多只能有一個長度可變的形參調(diào)用包含一個可變形參的方法時,可以為該形參傳入多個參數(shù)或一個數(shù)組能匹配定長的方法,那么優(yōu)先匹配該方法,含有不定參數(shù)的用載方法被最后匹配Main方法的參數(shù)就是一個數(shù)組類型的,它可以改成可變參數(shù)類型調(diào)用可變參數(shù)的方法時,編譯器為該可變參數(shù)隱含創(chuàng)建一個數(shù)組,在方法體重以數(shù)組的形式訪問三十、Map1、Map用于保存具有映射關(guān)系的數(shù)據(jù),因此Map集合里保存著兩組值,一組值用于保存Map里的Key,另外一組用于保存Map里的Value。Map中的key和value都可以是任何引用類型的數(shù)據(jù)Map中的Key不允許重復,即同一個Map對象的任何兩個Key通過equals方法比較中返回falseKey和Value之間存在單向一對一關(guān)系,即通過指定的Key總能找到唯一的,確定的Value。對Map的遍歷:1遍歷鍵的集合keyset()2遍歷值的集合values()3得到鍵值對的集合Iteratorit=keySet.iterator();While(it.hasNext()){Objectkey=it.next();Objectval=map.get(key);System.out.println(key+w:w+val);}2、HashMap&HashtableHashM叩和Hashtable是Map接口的兩個典型實現(xiàn)類區(qū)別:Hashtable是一個古老的Map實現(xiàn)類,不建議使用Hashtable是一個線程安全的Map實現(xiàn),但HashM叩是線程不安全的。Hashtable不允許使用null作為key和value,而HashMap可以與HashSet集合不能保證元素的順序的順序一樣,Hashtable、HashMap也不能保證其中key-value對的順序Hashtable、HashM叩判斷兩個Key相等的標準是:兩個Key通過equals方法返回true,hashCode值也相等。Hashtable、HashMap判斷兩個Value相等的標準是:兩個Value通過equals方法返回true3、LinkedHashMap是HashMap的子類LinkedHashMap可以維護Map的迭代順序:迭代順序與Key-Value對的插入順序一致4、HashSet由HashMap來定義:1)在HashSet中維護了一個HashMap屬性2)在調(diào)用HashSet的方法時,實際操作的事HashMap的對應方法3)add(Objectobj)實際上是把obj放入了map中;5、PropertiesProperties類是Hashtable的子類,該對象用于處理屬性文件由于屬性文件里的keyvalue都是字符串類型,所以properties里的Key和Value都是字符串類型的6、TreeMapTreeMap存儲Key-Value對時,需要根據(jù)Key對key-value對進行排序。TreeMap可以保證所有的Key-Value對處于有序狀態(tài)。TreeMap的Key的排序:自然排序:TreeM叩的所有的Key必須實現(xiàn)Comparable接口,而且所有的Key應該是同一個類的對象,否則將會拋出ClasssCastException定制排序:創(chuàng)建TreeMap時,傳入一個Comparator對象,該對象負責對TreeMap中的所有key進行排序。此時不需要Map的Key實現(xiàn)Comparable接口一、操作集合的工具類:Co11ections1、Collections是一個操作Set>List和Map等集合的工具類2、Collections中提供了大量方法對集合元素進行排序、查詢和修改等操作,還提供了對集合對象設(shè)置不可變、對集合對象實現(xiàn)同步控制等方法3、排序操作:reverse(List):反轉(zhuǎn)List中元素的順序shuffle(List):對List集合元素進行隨機排序sort(List):根據(jù)元素的自然順序?qū)χ付↙ist集合元素按升序排序sort(List,Comparator):根據(jù)指定的Comparator產(chǎn)生的順序?qū)ist集合元素進行排序swap(List,int,int):將指定list集合中的i處元素和j處元素進行交換4、同步控制:Collections類中提供了多個synchronizedXxx()方法,該方法可使將指定集合包裝成線程同步的集合,從而可以解決多線程并發(fā)訪問集合時的線程安全問題5、Enumeration接口是Iterator迭代器的“古老版本”三十二、泛型1、不使用泛型時:1)集合中的類型不安全,可以向集合中放入任何引用類型的對象2)從集合中取出的對象都是Object類型,在具體操作時可能需要進行類型的強制轉(zhuǎn)換。那么,在強制類型轉(zhuǎn)換時也容易發(fā)生ClassCastExceptiono2、格式:List<Integer>。我們說List是一個帶一個類型參數(shù)的泛型接口匕genericinterfacethattakesatypeparameter),本例中,類型參數(shù)是Integer。我們在創(chuàng)建這個List對象的時候也指定了一個類型參數(shù)。3、一個命名的習慣:推薦用簡練的名字作為形式類型參數(shù)的名字(如果可能,單個字符)。最好避免小寫字母。4、如果Fo。是Bar的一個子類型(子類或者子接口),而G是某種泛型聲明,那么G<Foo>是G<Bar>的子類型并不成立!!5、Collection<?>(發(fā)音為:"collectionofunknown"),就是,一個集合,它的元素類型可以匹配任何類型。顯然,它被稱為通配符。我們可以寫:voidprintCollection(Collection<?>c){for(Objecte:c){System.out.println(e);)}現(xiàn)在,我們可以使用任何類型的collection來調(diào)用它。注意,我們?nèi)匀豢梢宰x取c中的元素,其類型是。bject。這永遠是安全的,因為不管collection的真實類型是什么,它包含的都是Object。但是將任意元素加入到其中不是類型安全的:Collection<?>c=newArrayList<String>();c.add(newObject(J);//編譯時錯誤因為我們不知道c的元素類型,我們不能向其中添加對象。add方法有類型參數(shù)E作為集合的元素類型。我們傳給add的任何參數(shù)都必須是一個未知類型的子類。因為我們不知道那是什么類型,所以我們無法傳任何東西進去。唯一的例外是null,它是所有類型的成員。另一方面,我們可以調(diào)用get()方法并使用其返回值。返回值是一個未知的類型,但是我們知道,它總是一個Object。7、有限制的通配符(BoundedWildcards)這個方法能夠接受一個任意種類的Sh叩e:publicvoiddrawAII(List<?extendsShape>shapes){//..}List<?extendsShape〉是有限制通配符的一個例子。這里?代表一個未知的類型,就像我們前面看到的通配符一樣。但是,在這里,我們知道這個未知的類型實際上是Shape的一個子類。我們說Shape是這個通配符的上限(upperbound)。像平常一樣,要得到使用通配符的靈活性有些代價。這個代價是,現(xiàn)在向shapes中寫入是非法的。8,現(xiàn)在,你應該能夠?qū)W會避免初學者試圖使用Collection<Object>作為集合參數(shù)類型的錯誤了?;蛟S你已經(jīng)意識到使用Collection<?>也不能工作?;貞浺幌?,你不能把對象放進一個未知類型的集合中去。解決這個問題的辦法是使用genericmethods。就像類型聲明,方法的聲明也可以被泛型化——就是說,帶有一個或者多個類型參數(shù)。static<T>voidfromArrayToCollection(T[]a,Collection<T>c){for(To:a){c.add(o);//correct)我們可以使用任意集合來調(diào)用這個方法,只要其元素的類型是數(shù)組的元素類型的父類。Object[]oa=newObject[100];Collection<Object>co=newArrayList<Object>();fromArrayToCollection(oa,co);//T指ObjectString[]sa=newString[lOO];Collection<String>cs=newArrayList<String>();9、在類中(不一定是泛型類)使用泛型方法,1)在方法的返回值前面使用。聲明泛型類型,則在方法的返回值,參數(shù),方法體中都可以使用該類型。public<E>EgetPropertyfintid){returnnull;)10、關(guān)于泛型1為什么需要泛型?1)使用集合時可能會發(fā)生安全的問題:可以向集合中放入任何類型2)麻煩:從集合中獲取元素,需要進行類型的強制轉(zhuǎn)換2使用泛型:使用泛型方法,泛型類。3定義泛型1)定義泛型:依照API定義——聲明類(接口)時,在類名的后面,大括號的前面利用。來聲明泛型。在類中凡是可以使用類型的地方都可以使用類中聲明的泛型.PublicclassDao<T>2)定義泛型方法:a、在類(不一定是泛型類)中使用泛型方法b、在方法的返回值前面使用。聲明泛型類型,則在方法的返回值,參數(shù),方法體中都可以使用該類型Public<E>EgetProperty(intid)4通配符1)如果Foo是Bar的一個子類型(子類或者子接口),而G是某種泛型聲明,那么G<Foo>是G<Bar>的子類型并不成立!!如,Person是Object的子類,但List<Person>卻不是List<Object>的子類! printPersons(List<Person>persons);該方法的參數(shù)只能是Person類型的List。而不能是Person任何子類List,例如Student類型的ListoCollection<?>a、它的元素類型可以匹配任何類型,?被稱為通配符b>將任意元素加入其中不是類型安全的,null除外!因為null可以是任何類型Collection<?ExtendsPerson>persons為帶上限的通配符:該類型可以指向Person類型及Person子類類型的集合,但,也不能向其中放入null以外的任何元素三十三、枚舉在某些情況下,一個類的對象是有限而且固定的。例如季節(jié)類,只能有4個對象手動實現(xiàn)枚舉類:private修飾構(gòu)造器屬性使用privatefinal修飾把該類的所有實例都使用publicstaticfinal來修飾1、JDK1.5新增的enum關(guān)鍵字用于定義枚舉類2、枚舉類和普通類的區(qū)別:使用enum定義的枚舉類默認繼承了java.lang.Enum類枚舉類的構(gòu)造器只能使用private訪問控制符?枚舉類的所有實例必須在枚舉類中顯式列出(,分隔;結(jié)尾).列出的實例系統(tǒng)會自動添加publicstaticfinal修飾?所有的枚舉類都提供了一個values方法,該方法可以很方便地遍歷所有的枚舉值2、栗子packageenumTest;publicenumSeason{〃枚舉類的實例需要在枚舉類的第一行列出SPR/NG("春天","春風又綠江南岸"),SUMMER("夏天","映日荷花別樣紅"),AUTUMN("秋天","秋水共長天一色"),IV/NTER("冬天","窗含西嶺千秋雪)StringSEASON_NAME;StringSEASON_DESC;privateSeason(StringseasonName,StringseasonDesc){this.SEASON_NAME=seasonName;this.SEASON_DESC=seasonDesc;)3、枚舉中常用的兩個方法1)遍歷枚舉類的方法:每個枚舉類都有一個values()方法,返回枚舉類對象的數(shù)組Season[]seasons=Season.values();For(Seasonseason:seasons){System.out.println(season);}〃這個地方冒號的意思是遍歷seasons中的所有元素,并賦值給season;2)把一個字符串轉(zhuǎn)為對應的枚舉類對象Stringinput="SPRING";Seasons=Enum.valueOf(Season.classJnput);System.out.println(s);〃第一個參數(shù):枚舉類的類型,第二個參數(shù):對應的字符串。4、實現(xiàn)接口的枚舉類5.xM合個方就申■供各個枚學實的盤嶺真夏,■raftMlswitch^Ov*rridspublicStringg?tlnfo()(switch(this){cmSPRING:return-A---;cmSURHER:return"B--";caseAUTUMN:return"C---;caseWINTER:return)returnnull;5.2在聲明對象的同時卷供方鐵的實現(xiàn):SPRING(“春天,”春風又綠江南岸“){^OverridepublicStringgetlnfo(){return"AAAM;)SUMMERS大",““H荷花別樣tl-){^OverridepublicStringgetlnfo(){return"AAB";)》,AUTUMN("改天"》"收水其長天一色“){^OverridepublicStringgetlnfo(){return"AACH;)三十四、注解1、Java增加了對元數(shù)據(jù)(MetaData,即解釋數(shù)據(jù)的數(shù)據(jù))的支持,也就是Annotation(注釋)a)Annotation其實就是代碼里的特殊標記,這些標記可以在編譯,類加載,運行時被讀取,并執(zhí)行相應的處理.通過使用Annotation,程序員可以在不改變原有邏輯的情況下,在源文件中嵌入一些補充信息.)Annotation可以像修飾符一樣被使用,可用于修飾包,類,構(gòu)造器,方法,成員變量,參數(shù),局部變量的聲明,這些信息被保存在Annotation的"name=value”對中.)Annotation能被用來為程序元素(類,方法,成員變量等)設(shè)置元數(shù)據(jù)2、基本的Annotation使用Annotation時要在其前面增加@符號,并把該Annotation當成一個修飾符使用.用于修飾它支持的程序元素3、三個基本的Annotation:@Override:限定重寫父類方法,該注釋只能用于方法@Deprecated:用于表示某個程序元素(類,方法等)已過時@SuppressWarnings:抑制編譯器警告.4、自定義Annotation定義新的Annotation類型使用?interface關(guān)鍵字Annotation的成員變量在Annotation定義中以無參數(shù)方法的形式來聲明.其方法名和返回值定義了該成員的名字和類型.可以在定義Annotation的成員變量時為其指定初始值,指定成員變量的初始值可使用default關(guān)鍵字沒有成員定義的Annotation稱為標記;包含成員變量的Annotation稱為元數(shù)據(jù)Annotation5、提取Annotation信息JDK5.0在java.lang.reflect包下新增了AnnotatedElement接口,該接口代表程序中可以接受注釋的程序元素當一個Annotation類型被定義為運行時Annotation后,該注釋才是運行時可見,當class文件被載入時保存在class文件中的Annotation才會被虛擬機讀取程序可以調(diào)用AnnotationElement對象的如下方法來訪問Annotation信息Annoti.on(Class<T>annotationClass)Returnsthiselementsannotationforthespecifiedtypeifsuchanannotationispresent,elsenull.n--“tAnnotations()ReturnsallannotationspresentonthiselementReturnsallannotationsthataredirectlypresentonthiselement—iaAnnofationProsent(ClacaV?extendsAnnotation〉annotationClass)Returnstrueifanannotationforthespecifiedtypeispresentonthiselementelsefalse6、JDK的元Annotation用于修飾其他Annotation定義(?Retention:只能用于修飾?個Annotation定義,用于指定該Annotation可以保留多長時間,@Rentention包含一個RetentionPolicy類型的成員變量,使用@Rentention時必須為該value成員變量指定值:RetentionPolicy.CLASS:編譯器將把注釋記錄在class文件中.當運行Java程序時,JVM不會保留注釋.這是默認值RetentionPolicy.RUNTIME:編譯器將把注釋記錄在class文件中.當運行Java程序時,JVM會保留注釋.程序可以通過反射獲取該注釋RetentionPolicy.SOURCE:編譯器直接丟棄這種策略的注釋@Target:用于修飾Annotation定義,用于指定被修飾的Annotation能用于修飾哪些程序元素.@Target也包含一個名為value的成員變量.@Documented:用于指定被該元Annotation修飾的Annotation類將被javadoc工具提取成文檔.(?Inherited:被它修飾的Annotation將具有繼承性.如果某個類使用了被?Inherited修飾的Annotation,則其子類將自動具有該注釋三十五、101、Java的10流主要包括輸入、輸出兩種10流,每種輸入、輸出流有可分為字節(jié)流和字符流兩大類:
字節(jié)流以字節(jié)為單位來處理輸入、輸出操作, 字符流以字符為單位來處理輸入、輸出操作2、File類代表與平臺無關(guān)的文件和目錄。File能新建、刪除、重命名文件和目錄,但File不能訪問文件內(nèi)容本身。如果需要訪問文件內(nèi)容本身,則需要使用輸入/輸出
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026山東事業(yè)單位統(tǒng)考菏澤市屬招聘考試參考試題及答案解析
- 中鐵十四局采購管理制度(3篇)
- 調(diào)研糧食儲備應急管理制度(3篇)
- 婚慶公司策劃活動方案(3篇)
- 代寫活動策劃方案網(wǎng)站(3篇)
- 2026年保山市昌寧縣財政局招聘公益性崗位人員(5人)備考考試題庫及答案解析
- 飛機幾何造型技術(shù)
- 2026新疆博爾塔拉州博樂數(shù)字博州建設(shè)運營有限公司招聘3人備考考試試題及答案解析
- 2026浙江杭州工商信托股份有限公司等企業(yè)招聘17人備考考試題庫及答案解析
- 2026年荊州市公安縣事業(yè)單位人才引進52人備考考試試題及答案解析
- 屋頂綠化改造施工方案
- 中國健美協(xié)會cbba(高級)健身教練證考試復習題庫(含答案)
- 湖南省益陽市2024-2025學年高一(上)期末考試物理試卷(含答案)
- 自愿退出豁免協(xié)議書范文范本
- 重慶市配套安裝工程施工質(zhì)量驗收標準
- 機器人實訓室規(guī)劃建設(shè)方案
- 綜合布線辦公樓布線方案
- 鞍鋼檢驗報告
- 河南省信陽市2023-2024學年高二上學期期末教學質(zhì)量檢測數(shù)學試題(含答案解析)
- 北師大版七年級上冊數(shù)學 期末復習講義
- 2023年初級經(jīng)濟師《初級人力資源專業(yè)知識與實務》歷年真題匯編(共270題)
評論
0/150
提交評論