版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、運(yùn)用反射獲取一個(gè)類的方法信息:1. 獲取類的方法(4種etc./ 以下是獲取類的方法/ 1.getClass(方法/ String str = abc;/ Class class = str.getClass(;System.out.println(第一種獲取類的方法:;Integer i = new Integer(3;Class iClass = i.getClass(; / System.out.println(Canonical Name: + iClass.getCanonicalName(;/符合規(guī)格的System.out.println(Simple Name: + iClass
2、.getSimpleName(;/ System.out.println(Name: + iClass.getName(;String str = abc;System.out.println(str.getClass(.getSimpleName(;/ 2.Class.forName(System.out.println(第二種獲取類的方法: ;Class c21 = Class.forName(java.lang.String;Class c22 = Class.forName(ReflectionDemos.MyClass;Class c23 = Class.forName(Operat
3、eFile.CopyFile1;System.out.println(c21.getSimpleName(;System.out.println(c22.getSimpleName(;System.out.println(c23.getSimpleName(;/ 3.Class c = String.class;System.out.println(第三種獲取類的方法:;Class iClass2 = int.class;System.out.println(iClass2.getSimpleName(;/ 4.運(yùn)用原始包裝類中的TYPE方法/ Class c1 = Integer.TYPE;
4、/ Class c2 = Boolean.TYPE;/ Class c3 = Void.TYPE;/ Class c4 = Character.TYPE;System.out.println(第四種獲取類的方法:;Class iClass3 = Integer.TYPE;System.out.println(iClass3.getCanonicalName(;System.out.println(iClass3.getSimpleName(;Output:第一種獲取類的方法:Simple Name: IntegerString第二種獲取類的方法: StringMyClassCopyFile1第
5、三種獲取類的方法:int第四種獲取類的方法:intint2. /顯示一個(gè)對(duì)象的類名/* method1 顯示對(duì)象的類名*/public static void printClassName(Object obj System.out.println(The class of + obj.getClass(.getName(;etc./* test method1*/ClassTest ct = new ClassTest(;printClassName(ct;Output:3. 獲得類的所有屬性:(包括publicprivateprotected)etc./* method2 Class Fi
6、eld getDeclaredFields( 返回 Field* 對(duì)象的一個(gè)數(shù)組,這些對(duì)象反映此 Class 對(duì)象所表示的類或接口所聲明的所有字段。 */import java.lang.reflect.Field;Field fields = Class.forName(ReflectionDemos.MyClass.getDeclaredFields(;for (int i = 0; i fields.length; i+ System.out.println(屬性名: + fieldsi.getName( + t屬性類型+ fieldsi.getType(;Output:屬性名:i 屬性
7、類型int屬性名:f 屬性類型float屬性名:s 屬性類型屬性名:array 屬性類型class Ljava.lang.Object;4. /獲得類的所有方法Method methods = classType.getDeclaredMethods(;methods0.toString(; /此方法的描述etc./* method4 Class Method getDeclaredMethods( 返回 Method* 對(duì)象的一個(gè)數(shù)組,這些對(duì)象反映此 Class* 對(duì)象表示的類或接口聲明的所有方法,包括公共、保護(hù)、默認(rèn)(包)訪問(wèn)和私有方法,但不包括繼承的方法。*/Method methods
8、 = Class.forName(ReflectionDemos.MyClass.getDeclaredMethods(;for (int i = 0; i methods.length; i+ System.out.println(MyClass類的方法: + methodsi.getName(;Output:MyClass類的方法:getIMyClass類的方法:setIMyClass類的方法:getFMyClass類的方法:setFMyClass類的方法:getSMyClass類的方法:setS5. Method類的方法:getModifiers( 返回此Method對(duì)象所表示方法的Ja
9、va語(yǔ)言修飾符getName( 以String形式返回此Method對(duì)象表示的方法名稱Annotation getParameterAnnotations( 返回表示按照聲明順序?qū)Υ?Method 對(duì)象所表示方法的形參進(jìn)行注釋的那個(gè)數(shù)組的數(shù)組。在Web Service中也有一種運(yùn)用Java標(biāo)注的情況。Class getParameterTypes(:按照聲明順序返回 Class 對(duì)象的數(shù)組,這些對(duì)象描述了此 Method 對(duì)象所表示的方法的形參類型。Etc:/* method6 Class getParameterTypes(:按照聲明順序返回 Class 對(duì)象的數(shù)組,這些對(duì)象描述了此* Me
10、thod 對(duì)象所表示的方法的形參類型。*/System.out.println(下面測(cè)試獲取方法形參類型: ;System.out.println(方法名為: + method.getName(; /private static void setI(int i, String strClass paramClass = method.getParameterTypes(;for (int i = 0; i paramClass.length; i+ System.out.println(paramClassi.getSimpleName(;Output:下面測(cè)試獲取方法形參類型: 方法名為:s
11、etIintStringClass getReturnType( 返回一個(gè) Class 對(duì)象,該對(duì)象描述了此 Method 對(duì)象所表示的方法的正式返回類型。 Etc:/* method7 Class getReturnType( 返回一個(gè) Class 對(duì)象,該對(duì)象描述了此 Method* 對(duì)象所表示的方法的正式返回類型。*/System.out.println(下面測(cè)試方法的返回類型:;Class returnType = method.getReturnType(;System.out.println(returnType.getSimpleName(;Output: 下面測(cè)試方法的返回類型
12、:voidObject invoke(Object obj, Object. args 對(duì)帶有指定參數(shù)的指定對(duì)象調(diào)用由此 Method 對(duì)象表示的底層方法。 6. 方法調(diào)用(invoke)及獲取指定名稱和參數(shù)的方法:A 針對(duì)只具有默認(rèn)構(gòu)造函數(shù)的類:/* 運(yùn)用反射機(jī)制調(diào)一個(gè)類的方法*/public class InvokeTester int i;String s;/ public InvokeTester(int i, String s/ this.i = i;/ this.s = s;/ public int add(int param1, int param2 return param1
13、+ param2;public String echo(String msg return echo: + msg;public static void main(String args throws Exception Class classType = InvokeTester.class;/ 獲得該類的一個(gè)默認(rèn)對(duì)象(實(shí)例),與方法Object objectCopy=classType.getConstructor(new/ Class.newInstance(new Object;/ 等效Object invokeTester = classType.newInstance(; /注意是
14、默認(rèn)對(duì)象,即InvokeTester類只有默認(rèn)構(gòu)造函數(shù)/ Object invokeTester = classType.getConstructor(new Class int.class, String.class ;/ 調(diào)用InvokeTester對(duì)象的add(方法Method addMethod = classType.getMethod(add, new Class int.class,int.class ; /如果第二個(gè)參數(shù)為 new Class 則表示方法無(wú)參數(shù)Object result = addMethod.invoke(invokeTester, new Object ne
15、w Integer(100, new Integer(200 ;System.out.println(Integer result;/ 調(diào)用InvokeTester對(duì)象的echo(方法Method echoMethod = classType.getMethod(echo,new Class String.class ;result = echoMethod.invoke(invokeTester, new Object Hello ;System.out.println(String result;Output:300echo: HelloB. 針對(duì)具有帶參數(shù)構(gòu)造函數(shù)的類:Java 允許一個(gè)
16、類擁有多個(gè)構(gòu)造方法,并且可以在構(gòu)造對(duì)象時(shí)傳入?yún)?shù)用來(lái)初始化對(duì)象。比如 Employee 對(duì)象的構(gòu)造方法需要一個(gè) String 的參數(shù),用來(lái)告訴其 id 。publicclassEmployee privateString id;publicEmployee(String id this.id = id;在利用反射創(chuàng)建 Employee 對(duì)象時(shí),我們必需為其創(chuàng)建 Constructor 對(duì)象,用來(lái)反映此Class對(duì)象所表示的類或接口的指定構(gòu)造方法。/ 生成classClass cls = Class.forName(className;/ 參數(shù)類型Class types =newClass St
17、ring.class;/ 類數(shù)值對(duì)象Object values =newObject 001;/ 找到指定的構(gòu)造方法Constructor constructor = cls.getDeclaredConstructor(types;/ 設(shè)置安全檢查,訪問(wèn)私有構(gòu)造函數(shù)constructor.setAccessible(true;/ 創(chuàng)建對(duì)象Employee e = (Employee constructor.newInstance(values;自己的例子:import java.lang.reflect.Constructor;import java.lang.reflect.Method;
18、/* 運(yùn)用反射機(jī)制調(diào)一個(gè)類的方法*/public class InvokeTester int i;String s;public InvokeTester(int i, String sthis.i = i;this.s = s;public int add(int param1, int param2 return param1 + param2;public String echo(String msg return echo: + msg;public static void main(String args throws Exception Class classType = Inv
19、okeTester.class;/ 獲得該類的一個(gè)默認(rèn)對(duì)象(實(shí)例),與方法Object objectCopy=classType.getConstructor(new/ Class.newInstance(new Object;/ 等效/ Object invokeTester = classType.newInstance(; /注意是默認(rèn)對(duì)象,即InvokeTester類只有默認(rèn)構(gòu)造函數(shù)/ Object invokeTester = classType.getConstructor(new Class int.class, String.class ;/ 構(gòu)造函數(shù)參數(shù)類型Class typ
20、es = new Class int.class, String.class;/ 構(gòu)造函數(shù)參數(shù)值Object values = new Object 12, abc;/找到指定的構(gòu)造方法Constructor constructor = classType.getDeclaredConstructor(types;/設(shè)置安全檢查,訪問(wèn)私有構(gòu)造函數(shù)constructor.setAccessible(true;/創(chuàng)建對(duì)象InvokeTester invokeTester = (InvokeTester constructor.newInstance(values;/ 調(diào)用InvokeTester對(duì)
21、象的add(方法Method addMethod = classType.getMethod(add, new Class int.class,int.class ; /如果第二個(gè)參數(shù)為 new Class 則表示方法無(wú)參數(shù)Object result = addMethod.invoke(invokeTester, new Object new Integer(100, new Integer(200 ;System.out.println(Integer result;/ 調(diào)用InvokeTester對(duì)象的echo(方法Method echoMethod = classType.getMet
22、hod(echo,new Class String.class ;result = echoMethod.invoke(invokeTester, new Object Hello ;System.out.println(String result;Output:300echo: Hello7. 在生成對(duì)象后直接訪問(wèn)屬性:importjava.lang.reflect.Field;publicclassTestField publicString test;publicstaticvoidmain(String args tryClass cls = Class.forName(TestFie
23、ld;Field f = cls.getField(test;TestField tf =(TestFieldcls.newInstance(;f.set(tf,abc;System.out.println(tf.test;catch(Exception ex System.out.println(ex;8. 獲取Field值:a. 創(chuàng)建一個(gè)Class對(duì)象b.通過(guò)getField 創(chuàng)建一個(gè)Field對(duì)象c.調(diào)用Field.getXXX(Object方法(XXX是Int,Float等,如果是對(duì)象就省略;Object是指實(shí)例.b. Etc.import java.lang.reflect.*;import java.awt.*;class SampleGe
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC 62841-3-14:2017/AMD1:2024 EN-FR Amendment 1 - Electric motor-operated hand-held tools,transportable tools and lawn and garden machinery - Safety - Part 3-14: Particular
- 2024年醫(yī)院財(cái)務(wù)工作計(jì)劃模版(二篇)
- 2024年小學(xué)下半年工作計(jì)劃模版(二篇)
- 2024年發(fā)電機(jī)租賃協(xié)議經(jīng)典版(二篇)
- 2024年四年級(jí)班主任工作總結(jié)范本(四篇)
- 2024年單位勞務(wù)合同參考樣本(二篇)
- 【《不同建筑材料在老城保護(hù)和更新基建項(xiàng)目中的應(yīng)用探究:以成都太古里項(xiàng)目為例》8500字(論文)】
- 2024年學(xué)校后勤工作職責(zé)范文(二篇)
- 2024年醫(yī)院食品衛(wèi)生安全管理制度范本(五篇)
- 散學(xué)典禮的講話稿(6篇)
- 國(guó)企紀(jì)委業(yè)務(wù)培訓(xùn)課件
- 2022-2023學(xué)年揚(yáng)州市寶應(yīng)縣五年級(jí)上學(xué)期期中測(cè)試數(shù)學(xué)試卷(含答案解析)
- 保安服務(wù)針對(duì)本項(xiàng)目的服務(wù)特點(diǎn)、難點(diǎn)分析及解決措施
- 《團(tuán)購(gòu)產(chǎn)品目錄》課件
- 逆向工程在汽車設(shè)計(jì)中的應(yīng)用
- 致心律失常性右室心肌病的診斷與治療
- 健康評(píng)估練習(xí)題大全(含答案)
- 新北師大版小學(xué)數(shù)學(xué)二年級(jí)上冊(cè)《六-測(cè)量:課桌有多長(zhǎng)》-公開(kāi)課教案-1
- 新時(shí)代青年的使命與擔(dān)當(dāng)
- 配電房保養(yǎng)方案
- 2020農(nóng)田灌溉建設(shè)項(xiàng)目水資源論證導(dǎo)則
評(píng)論
0/150
提交評(píng)論