首页 > 代码库 > 反射机制--调用构造函数和成员方法、制作帮助文档

反射机制--调用构造函数和成员方法、制作帮助文档

今天学习了关于反射的相关知识,通过反射能够找到类中的构造方法和全部的成员方法。

而并不了解这个类的构造的人能够非常方便的运用反射机制。

掌握发射主要了解这几个类,类位于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 类名    那么就生成了帮助文档了。

比如:

技术分享

反射机制--调用构造函数和成员方法、制作帮助文档