反射機制--調用構造函數和成員方法、制作幫助文檔
阿新 • • 發佈:2017-05-27
port const center 分享 相關 src -- 知識 water
今天學習了關於反射的相關知識,通過反射能夠找到類中的構造方法和全部的成員方法。
而並不了解這個類的構造的人能夠非常方便的運用反射機制。
掌握發射主要了解這幾個類,類位於java.long.reflect包中:
Class類:代表一個 類
Constructor類:代表累的構造方法
Field類:代表類中的成員變量
Method類:代表類的方法
import java.lang.reflect.*; /** 這是一個反射機制的樣例實例,包含怎樣利用反射找到無參、有參的構造方法,以及其它方法。 @author lzl @version v1.1 */ public class ReflectDemos{ /** 無參構造方法 */ public ReflectDemos(){} /** 帶一個參數的構造方法 @param age 年齡 */ public ReflectDemos(int age){ System.out.println("my age is 15"); } /** 帶兩個參數的構造方法 @param age 年齡 @param name 名字 */ public ReflectDemos(String name,int age){ System.out.println("my name is A and age is 18"); } /** 無參成員方法 */ public void fun1(){ System.out.println("this is fun1 Constructor"); } /** 帶兩個參數的方法 @param age 年齡 @param name 名字 */ public void fun2(String name ,int age){ System.out.println("this is fun2 Constructor"+name+age); } /** 帶一個參數的構造方法 @param age 年齡 @param name 名字 */ public void fun3(String name){ System.out.println("this is fun3 Constructor"+name); } /** 利用反射機制得到全部的構造方法實例 @param className 類名 */ public static void getConstructors(String className){ try{ Class classInfo = Class.forName(className); //傳入一個類名。得到對應的對象 Constructor con[] = classInfo.getConstructors(); //通過getConstructors()得到該類中全部的構造方法 //構造函數相似於棧的形式存儲在內存中,因此依照先進後出的順序。con[0]表示的是public A(String name,int age)構造函數 /** newInstance() 創建此 Class 對象所表示的類的一個新實例。相當於 new ReflectDemos(); */ con[0].newInstance(new Object[]{"lzl",18}); con[1].newInstance(new Object[]{18}); con[2].newInstance(); }catch(Exception e){} } /** 得到類中全部方法的實例 @param className 類名 */ public static void getMethods(String className){ try{ Class classInfo = Class.forName("ReflectDemos"); //傳入一個類名。得到對應的對象 Object obj = classInfo.getConstructor().newInstance(); //調用無參構造函數,生成新的實例對象 /** Method getMethod(String name, Class<?>... parameterTypes) 返回一個 Method 對象,它反映此 Class 對象所表示的類或接口的指定公共成員方法。 Object invoke(Object obj, Object... args) 對帶有指定參數的指定對象調用由此 Method 對象表示的底層方法 */ //調用無參成員方法fun1() Method mt1 = classInfo.getMethod("fun1"); mt1.invoke(obj); //調用1個參數的成員方法fun3() Method mt2 = classInfo.getMethod("fun3",String.class); mt2.invoke(obj,new Object[]{"lzl"}); //調用2個參數的成員方法fun3() Method mt3 = classInfo.getMethod("fun2",String.class,int.class); mt3.invoke(obj,new Object[]{"lzl",22}); }catch(Exception e){} } /** 得到指定方法的實例 @param className 類名 @param funcName 方法名 @param paras 方法參數 @return 返回boolean型 */ public static boolean process(String className,String funcName,Object[] paras)throws Exception{ Class classInfo = Class.forName(className); //形成函數參數序列------>通俗的說就是找到方法中所傳入的 參數成員 Class c[] = new Class[paras.length]; for(int i=0;i<c.length;i++){ c[i] = paras[i].getClass(); } //獲得無參構造函數,實例化對象 Object obj = classInfo.getConstructor().newInstance(); //得到類的方法 /** Method getMethod(String name, Class<?>... parameterTypes) 返回一個 Method 對象,它反映此 Class 對象所表示的類或接口的指定公共成員方法。 Object invoke(Object obj, Object... args) 對帶有指定參數的指定對象調用由此 Method 對象表示的底層方法 */ Method mt = classInfo.getMethod(funcName,c); mt.invoke(obj,paras); return true; } public static void main(String []args){ try{ boolean flag = ReflectDemos.process("ReflectDemos","fun1",new Object[]{}); }catch(Exception e){} } }
今天還學習了制作幫助文檔的方法。首先幫助文檔要寫凝視,依照下述凝視的格式
/**
@author 作者名
@version 版本
*/
/**
@param 參數 解釋
@return 解釋
*/
在doc窗體中輸入:javadoc -d 文件名稱 -author -version 類名 那麽就生成了幫助文檔了。
比如:
反射機制--調用構造函數和成員方法、制作幫助文檔