1. 程式人生 > >反射機制--調用構造函數和成員方法、制作幫助文檔

反射機制--調用構造函數和成員方法、制作幫助文檔

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 類名 那麽就生成了幫助文檔了。

比如:

技術分享

反射機制--調用構造函數和成員方法、制作幫助文檔