




已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
運用反射獲取一個類的方法信息:獲取類的方法(4種)etc./ 以下是獲取類的方法/ 1.getClass()方法/ String str = abc;/ Class class = str.getClass();System.out.println(第一種獲取類的方法:);Integer i = new Integer(3);Class iClass = i.getClass();/java.lang.Class/System.out.println(Canonical Name: + iClass.getCanonicalName();/符合規(guī)格的System.out.println(Simple Name: + iClass.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(OperateFile.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.運用原始包裝類中的TYPE方法/ Class c1 = Integer.TYPE;/ 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第三種獲取類的方法:int第四種獲取類的方法:intint/顯示一個對象的類名/* method1 顯示對象的類名*/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:The class of ReflectionDemos.ClassTest獲得類的所有屬性:(包括publicprivateprotected)etc./* * method2 Class Field getDeclaredFields() 返回 Field * 對象的一個數(shù)組,這些對象反映此 Class 對象所表示的類或接口所聲明的所有字段。 */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屬性類型int屬性名:f屬性類型float屬性名:s屬性類型class java.lang.String屬性名:array屬性類型class Ljava.lang.Object;/獲得類的所有方法Method methods = classType.getDeclaredMethods();methods0.toString();/此方法的描述etc./* * method4 Class Method getDeclaredMethods() 返回 Method * 對象的一個數(shù)組,這些對象反映此 Class * 對象表示的類或接口聲明的所有方法,包括公共、保護、默認(包)訪問和私有方法,但不包括繼承的方法。 */Method methods = 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類的方法:setS1. Method類的方法:getModifiers() 返回此Method對象所表示方法的Java語言修飾符getName() 以String形式返回此Method對象表示的方法名稱Annotation getParameterAnnotations() 返回表示按照聲明順序對此 Method 對象所表示方法的形參進行注釋的那個數(shù)組的數(shù)組。在Web Service中也有一種運用Java標注的情況。ClassgetParameterTypes():按照聲明順序返回 Class 對象的數(shù)組,這些對象描述了此 Method 對象所表示的方法的形參類型。Etc:/* * method6 ClassgetParameterTypes():按照聲明順序返回 Class 對象的數(shù)組,這些對象描述了此 * Method 對象所表示的方法的形參類型。 */System.out.println(下面測試獲取方法形參類型: );System.out.println(方法名為: + method.getName();/private static void setI(int i, String str)Class paramClass = method.getParameterTypes();for (int i = 0; i paramClass.length; i+) System.out.println(paramClassi.getSimpleName();Output:下面測試獲取方法形參類型: 方法名為:setIintStringClass getReturnType() 返回一個 Class 對象,該對象描述了此 Method 對象所表示的方法的正式返回類型。 Etc:/* * method7 Class getReturnType() 返回一個 Class 對象,該對象描述了此 Method * 對象所表示的方法的正式返回類型。 */System.out.println(下面測試方法的返回類型:);Class returnType = method.getReturnType();System.out.println(returnType.getSimpleName();Output: 下面測試方法的返回類型:void Object invoke(Object obj, Object. args) 對帶有指定參數(shù)的指定對象調用由此 Method 對象表示的底層方法。 2. 方法調用(invoke)及獲取指定名稱和參數(shù)的方法:A 針對只具有默認構造函數(shù)的類:/* * 運用反射機制調一個類的方法 */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 + param2;public String echo(String msg) return echo: + msg;public static void main(String args) throws Exception Class classType = InvokeTester.class;/ 獲得該類的一個默認對象(實例),與方法Object objectCopy=classType.getConstructor(new/ Class).newInstance(new Object);/ 等效Object invokeTester = classType.newInstance();/注意是默認對象,即InvokeTester類只有默認構造函數(shù)/Object invokeTester = classType.getConstructor(new Class int.class, String.class );/ 調用InvokeTester對象的add()方法Method addMethod = classType.getMethod(add, new Class int.class,int.class );/如果第二個參數(shù)為 new Class 則表示方法無參數(shù)Object result = addMethod.invoke(invokeTester, new Object new Integer(100), new Integer(200) );System.out.println(Integer) result);/ 調用InvokeTester對象的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. 針對具有帶參數(shù)構造函數(shù)的類:Java 允許一個類擁有多個構造方法,并且可以在構造對象時傳入參數(shù)用來初始化對象。比如 Employee 對象的構造方法需要一個 String 的參數(shù),用來告訴其 id 。publicclassEmployee privateString id;publicEmployee(String id) this.id = id;在利用反射創(chuàng)建 Employee 對象時,我們必需為其創(chuàng)建 Constructor 對象,用來反映此Class對象所表示的類或接口的指定構造方法。/ 生成classClass cls = Class.forName(className);/ 參數(shù)類型Class types =newClass String.class;/ 類數(shù)值對象Object values =newObject 001;/ 找到指定的構造方法Constructor constructor = cls.getDeclaredConstructor(types);/ 設置安全檢查,訪問私有構造函數(shù)constructor.setAccessible(true);/ 創(chuàng)建對象Employee e = (Employee) constructor.newInstance(values);自己的例子:import java.lang.reflect.Constructor;import java.lang.reflect.Method;/* * 運用反射機制調一個類的方法 */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 + param2;public String echo(String msg) return echo: + msg;public static void main(String args) throws Exception Class classType = InvokeTester.class;/ 獲得該類的一個默認對象(實例),與方法Object objectCopy=classType.getConstructor(new/ Class).newInstance(new Object);/ 等效/Object invokeTester = classType.newInstance();/注意是默認對象,即InvokeTester類只有默認構造函數(shù)/Object invokeTester = classType.getConstructor(new Class int.class, String.class ); / 構造函數(shù)參數(shù)類型Class types = new Class int.class, String.class;/ 構造函數(shù)參數(shù)值Object values = new Object 12, abc;/找到指定的構造方法Constructor constructor = classType.getDeclaredConstructor(types);/設置安全檢查,訪問私有構造函數(shù)constructor.setAccessible(true);/創(chuàng)建對象InvokeTester invokeTester = (InvokeTester) constructor.newInstance(values);/ 調用InvokeTester對象的add()方法Method addMethod = classType.getMethod(add, new Class int.class,int.class );/如果第二個參數(shù)為 new Class 則表示方法無參數(shù)Object result = addMethod.invoke(invokeTester, new Object new Integer(100), new Integer(200) );System.out.println(Integer) result);/ 調用InvokeTester對象的echo()方法Method echoMethod = classType.getMethod(echo,new Class String.class );result = echoMethod.invoke(invokeTester, new Object Hello );System.out.println(String) result);Output:300echo: Hello3. 在生成對象后直接訪問屬性:importjava.lang.reflect.Field;publicclassTestField publicString test;publicstaticvoidmain(String args) tryClass cls = Class.forName(TestField); Field f = cls.getField(test);TestField tf =(TestField)cls.newInstance();f.set(tf,abc);System.out.println(tf.test);catch(Exception ex) System.out.println(ex);4. 獲取Field值:a. 創(chuàng)建一個Class對象b.通過getField 創(chuàng)建一個Field對象c.調用Field.getXXX(Object)方法(XXX是Int,Float等,如果是對象就省略;Object是指實例).b. Etc.import java.lang.reflect.*;import java.awt.*;class SampleGet
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大班區(qū)域觀摩活動方案
- 復古disco活動方案
- 2025-2030冷鏈食品溯源體系建設與區(qū)塊鏈技術應用價值評估
- 多人球類活動方案
- 大學舉辦圖書活動方案
- 夏天洗臉活動方案
- 坑人團隊活動方案
- 夏裝五一活動方案
- 大班擬定活動方案
- 大學生推優(yōu)入團活動方案
- 應急搶修合同協(xié)議書
- 廣西桂林市2025年八年級下學期語文期末試卷及答案
- 重慶大學面試真題及答案
- 課程思政說課公務員制度講座情境創(chuàng)設下雙線四點的課程思政融入設計
- 2025年浙江省臺州市中考一模英語試題(含答案)
- 食材采購配送投標方案
- 2025年全國危險化學品經營單位安全管理人員考試試題(400題)附答案
- 飼料行業(yè)粉塵防爆
- 寵物醫(yī)院用工合同協(xié)議
- 預制菜烹飪知識培訓課件
- 大規(guī)模網絡流量分析技術-全面剖析
評論
0/150
提交評論