版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強javajava基礎(chǔ)加強基礎(chǔ)加強高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強課程大綱課程大綱leclipse的使用技巧的使用技巧l靜態(tài)導(dǎo)入靜態(tài)導(dǎo)入l可變參數(shù)與可變參數(shù)與for循環(huán)增強循環(huán)增強l基本數(shù)據(jù)類型的自動拆箱與裝箱基本數(shù)據(jù)類型的自動拆箱與裝箱l枚舉枚舉l反射反射ljavabean內(nèi)省內(nèi)省lbeanutils工具包工具包l注解注解l泛型泛型l類加載器類加載器l代理代理高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強eclipseeclipse的使用技巧的使用技巧快捷鍵使用技
2、巧:快捷鍵的位置:window-preferences-general-keys:l最常用eclipse快捷鍵l內(nèi)容提示 alt+/l添加塊注釋 ctrl+shift+/l除去塊注釋 ctrl+shift+l復(fù)制行 ctrl+alt+向下鍵l更改為大寫 ctrl+shift+xl更改為小寫 ctrl+shift+yl類和方法說明 f2高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強靜態(tài)導(dǎo)入靜態(tài)導(dǎo)入import static語句導(dǎo)入一個類中的某個或所有靜態(tài)方法語句導(dǎo)入一個類中的某個或所有靜態(tài)方法l語法舉例:語法舉例: import static java.lang.math
3、.random;import static java.lang.math.*; public static void main(string args) system.out.println(random()*100);import static語句導(dǎo)入一個類中的靜態(tài)成員變量語句導(dǎo)入一個類中的靜態(tài)成員變量l語法舉例:語法舉例: public class constant public static string content = itcast; import static cn.itcast.constant.content;高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)
4、加強增強增強forfor循環(huán)循環(huán)l語法:語法:for ( type 變量名:集合變量名變量名:集合變量名 ) l注意事項:注意事項:迭代變量必須在迭代變量必須在( )中定義!中定義!集合變量可以是數(shù)組或?qū)崿F(xiàn)了集合變量可以是數(shù)組或?qū)崿F(xiàn)了iterable接口的集合類接口的集合類l舉例:舉例: public static int add(int x,int .args) int sum = x;for(int arg:args) sum += arg;return sum;高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強可變參數(shù)可變參數(shù)l可變參數(shù)的特點:可變參數(shù)的特點:只能出現(xiàn)
5、在參數(shù)列表的最后;只能出現(xiàn)在參數(shù)列表的最后;.位于變量類型和變量名之間,前后有無空格都可以位于變量類型和變量名之間,前后有無空格都可以;調(diào)用可變參數(shù)的方法時,編譯器為該可變參數(shù)隱含創(chuàng)建調(diào)用可變參數(shù)的方法時,編譯器為該可變參數(shù)隱含創(chuàng)建一個數(shù)組,在方法體中以數(shù)組的形式訪問可變參數(shù)。一個數(shù)組,在方法體中以數(shù)組的形式訪問可變參數(shù)。高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強基本數(shù)據(jù)類型的自動拆箱與裝箱基本數(shù)據(jù)類型的自動拆箱與裝箱l自動裝箱:integer num1 = 12;l自動拆箱:int num = new integer(23);l基本boolean/byte/int
6、eger(數(shù)值范圍:-128至127)數(shù)據(jù)類型的對象緩存:integer num1 = 12;integer num2 = 12;system.out.println(num1 = num2);integer num3 = 129;integer num4 = 129;system.out.println(num3 = num4);高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強枚舉枚舉使用枚舉的關(guān)鍵技術(shù)如下:1:enum關(guān)鍵字表示枚舉類型,它的作用相當(dāng)于類聲明中的class關(guān)鍵字。2:枚舉類型不能有public的構(gòu)造方法。3:所有的枚舉值都是public、static、
7、final的,這些修飾符都是自動加上,無須程序員手動添加。4:枚舉之間用“,”分開,最好一個枚舉值用分號“;”。5:每一個枚舉值是一個枚舉類型的實例。6:可以在枚舉類型定義非枚舉值變量,這些變量可以使用任何修飾符。7:變量和方法的定義必須在枚舉值后面定義。高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強枚舉枚舉的高級應(yīng)用的高級應(yīng)用l枚舉就相當(dāng)于一個類,其中也可以定義構(gòu)造方法、成員變量、普通方法和抽枚舉就相當(dāng)于一個類,其中也可以定義構(gòu)造方法、成員變量、普通方法和抽象方法。象方法。l枚舉元素必須位于枚舉體中的最開始部分,枚舉元素列表的后要有分號與其枚舉元素必須位于枚舉體中的最
8、開始部分,枚舉元素列表的后要有分號與其他成員分隔。把枚舉中的成員方法或變量等放在枚舉元素的前面,編譯器報他成員分隔。把枚舉中的成員方法或變量等放在枚舉元素的前面,編譯器報告錯誤。告錯誤。l帶構(gòu)造方法的枚舉帶構(gòu)造方法的枚舉構(gòu)造方法必須定義成私有的如果有多個構(gòu)造方法,該如何選擇哪個構(gòu)造方法?枚舉元素mon和mon()的效果一樣,都是調(diào)用默認(rèn)的構(gòu)造方法。l帶方法的枚舉帶方法的枚舉定義枚舉trafficlamp實現(xiàn)普通的next方法實現(xiàn)抽象的next方法:每個元素分別是由枚舉類的子類來生成的實例對象,這些子類采用類似內(nèi)部類的方式進行定義。增加上表示時間的構(gòu)造方法l枚舉只有一個成員時,就可以作為一種單例
9、的實現(xiàn)方式。枚舉只有一個成員時,就可以作為一種單例的實現(xiàn)方式。高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強反射的基石反射的基石classclass類類ljava程序中的各個程序中的各個java類屬于同一類事物,描述這類事物的類屬于同一類事物,描述這類事物的java類名就是類名就是class。l對比提問:眾多的人用一個什么類表示?眾多的對比提問:眾多的人用一個什么類表示?眾多的java類用一個什么類表示?類用一個什么類表示?人人personjava類類classl對比提問:對比提問: person類代表人,它的實例對象就是張三,李四這樣一個個具體的類代表人,它的實例對象
10、就是張三,李四這樣一個個具體的人,人,class類代表類代表java類,它的各個實例對象又分別對應(yīng)什么呢?類,它的各個實例對象又分別對應(yīng)什么呢?對應(yīng)各個類在內(nèi)存中的字節(jié)碼,例如,person類的字節(jié)碼,arraylist類的字節(jié)碼,等等。一個類被類加載器加載到內(nèi)存中,占用一片存儲空間,這個空間里面的內(nèi)容就是類的字節(jié)碼,不同的類的字節(jié)碼是不同的,所以它們在內(nèi)存中的內(nèi)容是不同的,這一個個的空間可分別用一個個的對象來表示,這些對象顯然具有相同的類型,這個類型是什么呢?l如何得到各個字節(jié)碼對應(yīng)的實例對象(如何得到各個字節(jié)碼對應(yīng)的實例對象( class類型)類型)類名.class,例如,system.c
11、lass對象.getclass(),例如,new date().getclass()class.forname(類名),例如,class.forname(java.util.date);l九個預(yù)定義九個預(yù)定義class實例對象:實例對象:參看class.isprimitive方法的幫助int.class = integer.typel數(shù)組類型的數(shù)組類型的class實例對象實例對象class.isarray()l總之,只要是在源程序中出現(xiàn)的類型,都有各自的class實例對象,例如,int,void高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強反射反射 l反射就是把java
12、類中的各種成分映射成相應(yīng)的java類。例如,一個java類中用一個class類的對象來表示,一個類中的組成部分:成員變量,方法,構(gòu)造方法,包等等信息也用一個個的java類來表示,就像汽車是一個類,汽車中的發(fā)動機,變速箱等等也是一個個的類。表示java類的class類顯然要提供一系列的方法,來獲得其中的變量,方法,構(gòu)造方法,修飾符,包等信息,這些信息就是用相應(yīng)類的實例對象來表示,它們是field、method、contructor、package等等。 l一個類中的每個成員都可以用相應(yīng)的反射api類的一個實例對象來表示,通過調(diào)用class類的方法可以得到這些實例對象后,得到這些實例對象后有什么用
13、呢?怎么用呢?這正是學(xué)習(xí)和應(yīng)用反射的要點。高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強constructorconstructor類類lconstructor類類代表某個類中的一個構(gòu)造方法l得到某個類所有的構(gòu)造方法:例子:constructor constructors= class.forname(java.lang.string).getconstructors();l得到某一個構(gòu)造方法:例子: constructor constructor = class.forname(“java.lang.string”).getconstructor(stringbuff
14、er.class);/獲得方法時要用到類型l創(chuàng)建實例對象:通常方式:string str = new string(new stringbuffer(abc);反射方式: string str = (string)constructor.newinstance(new stringbuffer(abc);/調(diào)用獲得的方法時要用到上面相同類型的實例對象lclass.newinstance()方法:例子:string obj = (string)class.forname(java.lang.string).newinstance();該方法內(nèi)部先得到默認(rèn)的構(gòu)造方法,然后用該構(gòu)造方法創(chuàng)建實例對象。
15、該方法內(nèi)部的具體代碼是怎樣寫的呢?用到了緩存機制來保存默認(rèn)構(gòu)造方法的實例對象。高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強fieldfield類類lfield類類代表某個類中的一個成員變量l演示用eclipse自動生成java類的構(gòu)造方法l問題:得到的field對象是對應(yīng)到類上面的成員變量,還是對應(yīng)到對象上的成員變量?類只有一個,而該類的實例對象有多個,如果是與對象關(guān)聯(lián),哪關(guān)聯(lián)的是哪個對象呢?所以字段fieldx 代表的是x的定義,而不是具體的x變量。l示例代碼:reflectpoint point = new reflectpoint(1,7);field y =
16、class.forname(cn.itcast.corejava.reflectpoint).getfield(y);system.out.println(y.get(point);/field x = class.forname(cn.itcast.corejava.reflectpoint).getfield(x);field x = class.forname(cn.itcast.corejava.reflectpoint).getdeclaredfield(x);x.setaccessible(true);system.out.println(x.get(point);l作業(yè):將任意一
17、個對象中的所有string類型的成員變量所對應(yīng)的字符串內(nèi)容中的b改成a。高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強methodmethod類類lmethod類類代表某個類中的一個成員方法l得到類中的某一個方法:例子: method charat = class.forname(java.lang.string).getmethod(charat, int.class);l調(diào)用方法:通常方式:system.out.println(str.charat(1);反射方式: system.out.println(charat.invoke(str, 1); 如果傳遞給met
18、hod對象的invoke()方法的第一個參數(shù)為null,這有著什么樣的意義呢?說明該method對象對應(yīng)的是一個靜態(tài)方法!ljdk1.4和jdk1.5的invoke方法的區(qū)別:jdk1.5:public object invoke(object obj,object. args)jdk1.4:public object invoke(object obj,object args),即按jdk1.4的語法,需要將一個數(shù)組作為參數(shù)傳遞給invoke方法時,數(shù)組中的每個元素分別對應(yīng)被調(diào)用方法中的一個參數(shù),所以,調(diào)用charat方法的代碼也可以用jdk1.4改寫為 charat.invoke(“str
19、”, new object1)形式。高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強內(nèi)省內(nèi)省了解javabeanljavabean是一種特殊的java類,主要用于傳遞數(shù)據(jù)信息,這種java類中的方法主要用于訪問私有的字段,且方法名符合某種命名規(guī)則。l如果要在兩個模塊之間傳遞多個信息,可以將這些信息封裝到一個javabean中,這種javabean的實例對象通常稱之為值對象(value object,簡稱vo)。這些信息在類中用私有字段來存儲,如果讀取或設(shè)置這些字段的值,則需要通過一些相應(yīng)的方法來訪問,大家覺得這些方法的名稱叫什么好呢?javabean的屬性是根據(jù)其中的se
20、tter和getter方法來確定的,而不是根據(jù)其中的成員變量。如果方法名為setid,中文意思即為設(shè)置id,至于你把它存到哪個變量上,用管嗎?如果方法名為getid,中文意思即為獲取id,至于你從哪個變量上取,用管嗎?去掉set前綴,剩余部分就是屬性名,如果剩余部分的第二個字母是小寫的,則把剩余部分的首字母改成小的。setid()的屬性名idislast()的屬性名lastsetcpu的屬性名是什么?cpugetups的屬性名是什么?ups總之,一個類被當(dāng)作javabean使用時,javabean的屬性是根據(jù)方法名推斷出來的,它根本看不到j(luò)ava類內(nèi)部的成員變量。l一個符合javabean特點
21、的類可以當(dāng)作普通類一樣進行使用,但把它當(dāng)javabean用肯定需要帶來一些額外的好處,我們才會去了解和應(yīng)用javabean!好處如下:在java ee開發(fā)中,經(jīng)常要使用到j(luò)avabean。很多環(huán)境就要求按javabean方式進行操作,別人都這么用和要求這么做,那你就沒什么挑選的余地!jdk中提供了對javabean進行操作的一些api,這套api就稱為內(nèi)省。如果要你自己去通過getx方法來訪問私有的x,怎么做,有一定難度吧?用內(nèi)省這套api操作javabean比用普通類的方式更方便。高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強內(nèi)省綜合案例內(nèi)省綜合案例propertyd
22、escriptor propertydescriptors = introspector.getbeaninfo(clazz).getpropertydescriptors();for(propertydescriptor propertydesc : propertydescriptors)method method = propertydesc.getreadmethod();/獲取屬性的get方法高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強 commons-beanutils將字符串轉(zhuǎn)換成給定類型的值convertutils.convert(string val
23、ue, class clazz)為bean中的指定屬性賦值beanutils.copyproperty(form, name, 經(jīng)濟);將指定bean中的屬性值拷貝到目標(biāo)bean中同名的屬性beanutils.copyproperties(dest, orig)將map中的值拷貝到目標(biāo)bean中與key同名的屬性personform form = new personform();map properties = new hashmap();properties.put(id, 56);properties.put(name, liming);beanutils.populate(form,
24、properties);高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強了解注解及java提供的幾個基本注解l先通過suppresswarnings的應(yīng)用讓大家直觀地了解注解:通過system.runfinalizersonexit(true);的編譯警告引出suppresswarnings(deprecation) ldeprecated直接在剛才的類中增加一個方法,并加上deprecated標(biāo)注,在另外一個類中調(diào)用這個方法。loverridepublic boolean equals(reflect other)方法與hashset結(jié)合講解l總結(jié):注解相當(dāng)于一種標(biāo)記,
25、在程序中加了注解就等于為程序打上了某種標(biāo)記,沒加,則等于沒有某種標(biāo)記,以后,javac編譯器,開發(fā)工具和其他程序可以用反射來了解你的類及各種元素上有無何種標(biāo)記,看你有什么標(biāo)記,就去干相應(yīng)的事。標(biāo)記可以加在包,類,字段,方法,方法的參數(shù)以及局部變量上??磈ava.lang包,可看到j(luò)dk中提供的最基本的annotation。 高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強自定義注解及其應(yīng)用l定義一個最簡單的注解:public interface myannotation l把它加在某個類上:myannotation public class annotationtestl
26、用反射進行測試annotationtest的定義上是否有myannotation l根據(jù)發(fā)射測試的問題,引出retention元注解的講解,其三種取值:retetionpolicy.source、retetionpolicy.class、retetionpolicy.runtime;分別對應(yīng):java源文件-class文件-內(nèi)存中的字節(jié)碼。思考:override、suppresswarnings和deprecated這三個注解的屬性值分別是什么?l演示和講解target元注解target的默認(rèn)值為任何元素,設(shè)置target等于elementtype.method,原來加在類上的注解就報錯了,改
27、為用數(shù)組方式設(shè)置elementtype.method,elementtype.type就可以了。l元注解以及其枚舉屬性值不用記,只要會看jdk提供那幾個基本注解的api幫助文檔的定義或其源代碼,按圖索驥即可查到,或者直接看java.lang.annotation包下面的類。高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強為注解增加基本屬性l什么是注解的屬性一個注解相當(dāng)于一個胸牌,如果你胸前貼了胸牌,就是傳智播客的學(xué)生,否則,就不是。如果還想?yún)^(qū)分出是傳智播客哪個班的學(xué)生,這時候可以為胸牌在增加一個屬性來進行區(qū)分。加了屬性的標(biāo)記效果為:myannotation(color=r
28、ed)l定義基本類型的屬性和應(yīng)用屬性:在注解類中增加string color();myannotation(color=red)l用反射方式獲得注解對應(yīng)的實例對象后,再通過該對象調(diào)用屬性對應(yīng)的方法myannotation a = (myannotation)annotationtest.class.getannotation(myannotation.class);system.out.println(a.color();可以認(rèn)為上面這個myannotation是myannotaion類的一個實例對象l為屬性指定缺省值:string color() default yellow;lvalue屬
29、性:string value() default zxx; 如果注解中有一個名稱為value的屬性,且你只想設(shè)置value屬性(即其他屬性都采用默認(rèn)值或者你只有一個value屬性),那么可以省略value=部分,例如:myannotation(lhm)。高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強為注解增加高級屬性l數(shù)組類型的屬性int arrayattr() default 1,2,3;myannotation(arrayattr=2,3,4)如果數(shù)組屬性中只有一個元素,這時候?qū)傩灾挡糠挚梢允÷源罄╨枚舉類型的屬性gender gender() ;myannotat
30、ion(gender=gender.man)l注解類型的屬性:metaannotation annotationattr() default metaannotation(xxxx);myannotation(annotationattr=metaannotation(“yyy”) )可以認(rèn)為上面這個myannotation是myannotaion類的一個實例對象,同樣的道理,可以認(rèn)為上面這個metaannotation是metaannotation類的一個實例對象,調(diào)用代碼如下:metaannotation ma = myannotation.annotationattr();system.
31、out.println(ma.value();高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強體驗泛型ljdk 1.5以前的集合類中存在什么問題arraylist collection = new arraylist();collection.add(1);collection.add(1l);collection.add(abc);int i = (integer)arraylist.get(1);/編譯要強制類型轉(zhuǎn)換且運行時出錯!ljdk 1.5的集合類希望你在定義集合時,明確表示你要向集合中裝哪種類型的數(shù)據(jù),無法加入指定類型以外的數(shù)據(jù)arraylist collec
32、tion2 = new arraylist();collection2.add(1);/*collection2.add(1l);collection2.add(“abc”);*/這兩行代碼編譯時就報告了語法錯誤int i2 = collection2.get(0);/不需要再進行類型轉(zhuǎn)換l泛型是提供給javac編譯器使用的,可以限定集合中的輸入類型,讓編譯器擋住源程序中的非法輸入,編譯器編譯帶類型說明的集合時會去除掉“類型”信息,使程序運行效率不受影響,對于參數(shù)化的泛型類型,getclass()方法的返回值和原始類型完全一樣。由于編譯生成的字節(jié)碼會去掉泛型的類型信息,只要能跳過編譯器,就可以
33、往某個泛型集合中加入其它類型的數(shù)據(jù),例如,用反射得到集合,再調(diào)用其add方法即可。高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強了解泛型larraylist類定義和arraylist類引用中涉及如下術(shù)語:整個稱為arraylist泛型類型arraylist中的e稱為類型參數(shù)變量整個arraylist稱為參數(shù)化的類型arraylist中的integer稱為類型參數(shù)變量的值或?qū)嶋H類型參數(shù)arraylist中的念著typeofarraylist稱為原始類型l參數(shù)化類型與原始類型的兼容性:參數(shù)化類型可以引用一個原始類型的對象,編譯報告警告,例如,collection c = n
34、ew vector();/可不可以原始類型可以引用一個參數(shù)化類型的對象,編譯報告警告,例如,collection c = new vector();/原來的方法接受一個集合參數(shù),新的類型也要能傳進去l參數(shù)化類型不考慮類型參數(shù)的繼承關(guān)系:vector v = new vector(); /錯誤!/不寫沒錯,寫了就是明知故犯vector v = new vector(); /也錯誤!l編譯器不允許創(chuàng)建類型變量的數(shù)組。即在創(chuàng)建數(shù)組實例時,數(shù)組的元素不能使用參數(shù)化的類型,例如,下面語句有錯誤: vector vectorlist = new vector10;l思考題:下面的代碼會報錯誤嗎?vecto
35、r v1 = new vector(); vector v = v1;高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強泛型中的?通配符l問題:定義一個方法,該方法用于打印出任意參數(shù)化類型的集合中的所有數(shù)據(jù),該方法如何定義呢?l錯誤方式:public static void printcollection(collection cols) for(object obj:cols) system.out.println(obj);/* cols.add(string);/沒錯 cols = new hashset();/會報告錯誤!*/l正確方式:public static
36、void printcollection(collection cols) for(object obj:cols) system.out.println(obj);/cols.add(string);/錯誤,因為它不知自己未來匹配就一定是stringcols.size();/沒錯,此方法與類型參數(shù)沒有關(guān)系 cols = new hashset();l總結(jié):使用?通配符可以引用其他各種參數(shù)化的類型,?通配符定義的變量主要用作引用,可以調(diào)用與參數(shù)化無關(guān)的方法,不能調(diào)用與參數(shù)化有關(guān)的方法。高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強泛型中的?通配符的擴展l限定通配符的上邊
37、界:正確:vector x = new vector();/?號指定的類為number的子類錯誤:vector x = new vector();在應(yīng)用泛型時可以使用extends限定符,并且可以用&來指定多個邊界,如 void method()l限定通配符的下邊界:正確:vector x = new vector();/?號指定的類為integer的父類錯誤:vector x = new vector();l提示:限定通配符總是包括自己。?只能用作引用,不能用它去給其他變量賦值vector = new vector();vector x = y;上面的代碼錯誤,原理與vector x
38、11 = new vector();相似,只能通過強制類型轉(zhuǎn)換方式來賦值。高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強泛型集合類的綜合案例l能寫出下面的代碼即代表掌握了java的泛型集合類: hashmap hm = new hashmap(); hm.put(zxx,19); hm.put(lis,18); setmap.entry mes= hm.entryset(); for(map.entry me : mes) system.out.println(me.getkey() + : + me.getvalue(); l對在jsp頁面中也經(jīng)常要對set或map集
39、合進行迭代:$entry.key:$entry.value高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強通過反射獲得泛型的參數(shù)化類型l示例代碼:class genericalreflection private vector dates = new vector(); public void setdates(vector dates) this.dates = dates; public static void main(string args) method methodapply = genericalreflection.class.getdeclaredmet
40、hod(applygeneric, vector.class); parameterizedtype ptype = (parameterizedtype) (methodapply .getgenericparametertypes()0; system.out.println(setdates( + (class) ptype.getrawtype().getname() + ) ); l泛型dao的應(yīng)用:public abstract class daobaseimpl implements daobase protected class clazz;public daobaseimpl
41、() type type = this.getclass().getgenericsuperclass();parameterizedtype pt = (parameterizedtype) type;this.clazz = (class) pt.getactualtypearguments()0;system.out.println(clazz = + this.clazz);public class articledaoimpl extends daobaseimpl implements articledao 高級軟件人才實作培訓(xùn)專家高級軟件人才實作培訓(xùn)專家! !java基礎(chǔ)加強類加載器與普通程序不同的是,java程序(class文件)并不是本地的可執(zhí)行程序。當(dāng)運行java程序時,首先運行jvm(java虛擬機),然后再把java class加載到j(luò)vm里頭運行,負(fù)責(zé)加載java class的這部分就叫做class loader。中文叫做類加載器。ljava虛擬機中可以安裝多個類加載器,系統(tǒng)默認(rèn)三個主要類加載器,每個類負(fù)責(zé)加載
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版公積金房屋交易貸款協(xié)議
- 2024版國家糧食儲備交易協(xié)議指導(dǎo)條款版B版
- 2022年中考化學(xué)魯教版總復(fù)習(xí)學(xué)案-坐標(biāo)曲線題
- 2023-2024年藥學(xué)類之藥學(xué)(中級)考前沖刺模擬試卷B卷(含答案)
- 2024年股權(quán)退股結(jié)算協(xié)議
- 2024年版公司股權(quán)轉(zhuǎn)讓與撤資協(xié)議版B版
- 2024版?zhèn)€人商鋪的租賃合同
- 2024年資產(chǎn)買賣合同范本
- 2024年順豐速運標(biāo)準(zhǔn)化運輸協(xié)議模板版
- 2024版建設(shè)工程合同的重要性和必要性
- 森林撫育投標(biāo)方案
- 中小學(xué)教育中課程資源的開發(fā)與利用
- 大班科學(xué)教案:我和風(fēng)兒做游戲教案及反思
- 園藝治療概念、內(nèi)涵與理論依據(jù)
- 后續(xù)服務(wù)承諾及保證措施-后續(xù)服務(wù)
- 提高無創(chuàng)呼吸機患者的依從性
- 小兒急性顱內(nèi)壓增高的護理課件
- 腫瘤科工作制度
- 幼兒園幼兒日常行為規(guī)范
- 供應(yīng)鏈質(zhì)量防線:供應(yīng)商質(zhì)量管理的策略、方法與實踐
- 有限空間作業(yè)安全管理監(jiān)理實施細(xì)則
評論
0/150
提交評論