今天学习了关于反射的相关知识,通过反射可以找到类中的构造方法和所有的成员方法。而并不了解这个类的构造的人可以很方便的运用反射机制。
掌握发射主要了解这几个类,类位于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 类名 那么就生成了帮助文档了。
例如:

版权声明:本文为博主原创文章,未经博主允许不得转载。
反射机制--调用构造函数和成员方法、制作帮助文档
原文:http://blog.csdn.net/u011521890/article/details/46714857