java基礎(chǔ)預(yù)熱講義_第1頁
java基礎(chǔ)預(yù)熱講義_第2頁
java基礎(chǔ)預(yù)熱講義_第3頁
java基礎(chǔ)預(yù)熱講義_第4頁
java基礎(chǔ)預(yù)熱講義_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

北京傳智播客教育Java預(yù)熱班講義講師:焦寧波北京傳智播客教育Tip1:靜態(tài)導(dǎo)入JDK1.5增加的靜態(tài)導(dǎo)入語法用于導(dǎo)入類的某個(gè)靜態(tài)屬性或方法。使用靜態(tài)導(dǎo)入可以簡(jiǎn)化程序?qū)︻愳o態(tài)屬性和方法的調(diào)用。語法:importstatic

包名.類名.靜態(tài)屬性|靜態(tài)方法|*例如:importstaticjava.lang.System.outimportstaticjava.lang.Math.*案例求圓的面積、任意半徑圓的面積北京傳智播客教育Tip2:可變參數(shù)測(cè)試JDK中具有可變參數(shù)的類Arrays.asList()方法。分別傳多個(gè)參、傳數(shù)組,傳數(shù)組又傳參的情況。publicstatic<T>List<T>asList(T...a)注意:傳入基本數(shù)據(jù)類型數(shù)組的問題。從JDK5開始,Java允許為方法定義長(zhǎng)度可變的參數(shù)。語法:

publicvoidfoo(int…args){ }注意事項(xiàng):調(diào)用可變參數(shù)的方法時(shí),編譯器將自動(dòng)創(chuàng)建一個(gè)數(shù)組保存?zhèn)鬟f給方法的可變參數(shù),因此,程序員可以在方法體中以數(shù)組的形式訪問可變參數(shù)。可變參數(shù)只能處于參數(shù)列表的最后,所以一個(gè)方法最多只能有一個(gè)長(zhǎng)度可變的參數(shù)。北京傳智播客教育Tip3:枚舉類為什么需要枚舉?一些方法在運(yùn)行時(shí),它需要的數(shù)據(jù)不能是任意的,而必須是一定范圍內(nèi)的值,此類問題在JDK5以前采用自定義帶有枚舉功能的類解決,Java5以后可以直接使用枚舉予以解決。舉例交通燈(紅、黃、綠)性別(男、女)星期(星期一、二、三…..)

分?jǐn)?shù)等級(jí)(A、B、C、D、E)JDK5新增的enum關(guān)鍵字用于定義一個(gè)枚舉類。北京傳智播客教育Tip3:枚舉類枚舉的實(shí)現(xiàn)使用enum定義枚舉類在枚舉類中定義枚舉值(大寫)枚舉類具有如下特性:枚舉類也是一種特殊形式的Java類。枚舉類中聲明的每一個(gè)枚舉值代表枚舉類的一個(gè)實(shí)例對(duì)象。與java中的普通類一樣,在聲明枚舉類時(shí),也可以聲明屬性、方法和構(gòu)造函數(shù),但枚舉類的構(gòu)造函數(shù)必須為私有的(這點(diǎn)不難理解)。枚舉類也可以實(shí)現(xiàn)接口(序列化)、或繼承抽象類。JDK5中擴(kuò)展了swith語句,它除了可以接收int,byte,char,short外,還可以接收一個(gè)枚舉類型(enum)。若枚舉類只有一個(gè)枚舉值,則可以當(dāng)作單態(tài)設(shè)計(jì)模式使用。練習(xí):請(qǐng)編寫一個(gè)關(guān)于星期幾的枚舉WeekDay,要求:枚舉值:Mon,Tue,Wed,Thu,Fri,Sat,Sun該枚舉要有一個(gè)方法,調(diào)用該方法返回中文格式的星期。北京傳智播客教育Tip3:枚舉類Java中聲明的枚舉類,均是java.lang.Enum類的孩子,它繼承了Enum類的所有方法。常用方法:name()返回枚舉常量的nameordinal()返回枚舉常量的聲明索引valueof(ClassenumClass,Stringname)返回指定名稱的枚舉類values()此方法雖然在JDK文檔中查找不到,但每個(gè)枚舉類都具有該方法,它遍歷枚舉類的所有枚舉值非常方便。注意:JDKAPI文檔中并不是包含了所有類、所有類的方法、字段,沒有被API收錄的類、方法、字段是SUN公司內(nèi)部使用的,開發(fā)人員如果知道,也可以使用。北京傳智播客教育Tip4:反射(Reflect)什么是反射?反射就是把Java類中的各種成分映射成一個(gè)個(gè)的java對(duì)象。例如,一個(gè)類有:包、成員變量、方法、構(gòu)造方法等等信息,利用反射技術(shù)可以對(duì)一個(gè)類進(jìn)行解剖,把各個(gè)組成部分映射成與之相對(duì)應(yīng)的對(duì)象。反射用在哪里?框架學(xué)習(xí)反射應(yīng)該掌握些什么?

獲取類的字節(jié)碼、構(gòu)造器、方法、字段對(duì)象的方法和使用。北京傳智播客教育Class類Class類用于表示.class文件,畫圖演示一個(gè)對(duì)象的創(chuàng)建過程。如何得到某個(gè)class文件對(duì)應(yīng)的class對(duì)象。類名.class,知道類名//任何類都有static對(duì)象.getClass()//ObjectClass.forName(“類名”)推薦使用//Classstatic數(shù)組類型的Class實(shí)例對(duì)象Class.isArray()Class.isEnum()總之,只要是在源程序中出現(xiàn)的類型,都有各自的Class實(shí)例對(duì)象,例如,int,void…北京傳智播客教育Constructor類Constructor類的實(shí)例對(duì)象代表類的一個(gè)構(gòu)造方法。得到某個(gè)類所有的公共構(gòu)造方法,例:

Constructor[]constructors=Class.forName("java.lang.String").getConstructors();得到某個(gè)類所有的構(gòu)造方法,例:

Constructor[]constructors=Class.forName("java.lang.String").getDeclaredConstructors()得到某一個(gè)構(gòu)造方法,例:

Constructorconstructor=Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);利用構(gòu)造方法創(chuàng)建實(shí)例對(duì)象:Stringstr=(String)constructor.newInstance(“abc”);Class類的newInstance()方法也可創(chuàng)建類的實(shí)例,其內(nèi)部工作原理是先得無參的構(gòu)造方法,再用構(gòu)造方法創(chuàng)建實(shí)例對(duì)象。Stringobj=(String)Class.forName("java.lang.String").newInstance();北京傳智播客教育Field類Field類代表某個(gè)類中的一個(gè)成員變量問題:得到的Field對(duì)象是對(duì)應(yīng)到類上面的成員變量,還是對(duì)應(yīng)到對(duì)象上的成員變量?類只有一個(gè),而該類的實(shí)例對(duì)象有多個(gè),如果是與對(duì)象關(guān)聯(lián),那關(guān)聯(lián)的是哪個(gè)對(duì)象呢?所以字段Fieldx代表的是x的定義,而不是具體的x變量。(注意訪問權(quán)限的問題)示例代碼:

ReflectPointpoint=newReflectPoint(1,7); Fieldy=Class.forName("cn.itcast.corejava.ReflectPoint").getField("y"); System.out.println(y.get(point)); //Fieldx=Class.forName("cn.itcast.corejava.ReflectPoint").getField("x"); Fieldx=Class.forName("cn.itcast.corejava.ReflectPoint").getDeclaredField("x");

x.setAccessible(true);//獲取私有屬性暴力反射

x.setInt(newUser(),345); System.out.println(x.get(point));北京傳智播客教育Method類Method類代表某個(gè)類中的一個(gè)成員方法得到類中的某一個(gè)方法:例子: MethodcharAt=Class.forName("java.lang.String").getMethod("charAt",int.class);調(diào)用方法:通常方式:System.out.println(str.charAt(1));反射方式:System.out.println(charAt.invoke(str,1));

注意:如果傳遞給Method對(duì)象的invoke()方法的第一個(gè)參數(shù)為null,這有著什么樣的意義呢?說明該Method對(duì)象對(duì)應(yīng)的是一個(gè)靜態(tài)方法!jdk1.4和jdk1.5的invoke方法的區(qū)別:Jdk1.5:publicObjectinvoke(Objectobj,

Object...args)Jdk1.4:publicObjectinvoke(Objectobj,Object[]args),即按jdk1.4的語法,需要將一個(gè)數(shù)組作為參數(shù)傳遞給invoke方法時(shí),數(shù)組中的每個(gè)元素分別對(duì)應(yīng)被調(diào)用方法中的一個(gè)參數(shù),所以,調(diào)用charAt方法的代碼也可以用Jdk1.4改寫為charAt.invoke(“str”,newObject[]{1})形式。北京傳智播客教育用反射方式執(zhí)行某個(gè)類中的main方法目標(biāo):寫一個(gè)程序,這個(gè)程序能夠根據(jù)用戶提供的類名,去執(zhí)行該類中的main方法。用普通方式調(diào)完后,大家要明白為什么要用反射方式去調(diào)啊?問題:?jiǎn)?dòng)Java程序的main方法的參數(shù)是一個(gè)字符串?dāng)?shù)組,即publicstaticvoidmain(String[]args),通過反射方式來調(diào)用這個(gè)main方法時(shí),如何為invoke方法傳遞參數(shù)呢?按jdk1.5的語法,整個(gè)數(shù)組是一個(gè)參數(shù),而按jdk1.4的語法,數(shù)組中的每個(gè)元素對(duì)應(yīng)一個(gè)參數(shù),當(dāng)把一個(gè)字符串?dāng)?shù)組作為參數(shù)傳遞給invoke方法時(shí),javac會(huì)到底按照哪種語法進(jìn)行處理呢?jdk1.5肯定要兼容jdk1.4的語法,會(huì)按jdk1.4的語法進(jìn)行處理,即把數(shù)組打散成為若干個(gè)單獨(dú)的參數(shù)。所以,在給main方法傳遞參數(shù)時(shí),不能使用代碼mainMethod.invoke(null,newString[]{“xxx”}),javac只把它當(dāng)作jdk1.4的語法進(jìn)行理解,而不把它當(dāng)作jdk1.5的語法解釋,因此會(huì)出現(xiàn)參數(shù)類型不對(duì)的問題。解決辦法:mainMethod.invoke(null,newObject[]{newString[]{"xxx"}});mainMethod.invoke(null,(Object)newString[]{“xxx”});編譯器會(huì)作特殊處理,編譯時(shí)不把參數(shù)當(dāng)作數(shù)組看待,也就不會(huì)數(shù)組打散成若干個(gè)參數(shù)了。北京傳智播客教育Tip5:內(nèi)省(Introspector)—JavaBean什么是JavaBean和屬性的讀寫方法?訪問JavaBean屬性的兩種方式:直接調(diào)用bean的setXXX或getXXX方法。通過內(nèi)省技術(shù)訪問(java.beans包提供了內(nèi)省的API),內(nèi)省技術(shù)訪問也提供了兩種方式。通過PropertyDescriptor類操作Bean的屬性通過Introspector類獲得Bean對(duì)象的BeanInfo,然后通過BeanInfo來獲取屬性的描述器(PropertyDescriptor),通過這個(gè)屬性描述器就可以獲取某個(gè)屬性對(duì)應(yīng)的getter/setter方法,然后通過反射機(jī)制來調(diào)用這些方法。北京傳智播客教育方式一Useru=newUser();PropertyDescriptorpd=new

PropertyDescriptor("x",User.class);Methodm=pd.getWriteMethod();m.invoke(u,348);Methodre=pd.getReadMethod();System.out.println(re.invoke(u));北京傳智播客教育方式二Useru=newUser();BeanInfoinfo=Introspector.getBeanInfo(User.class);PropertyDescriptorpd[]=info.getPropertyDescriptors();for(PropertyDescriptortemp:pd){Stringname=temp.getName();System.ou

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論