反射机制--调用构造函数和成员方法、制作帮助文档
今天学习了关于反射的相关知识,通过反射能够找到类中的构造方法和全部的成员方法。
而并不了解这个类的构造的人能够非常方便的运用反射机制。
掌握发射主要了解这几个类,类位于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 类名 那么就生成了帮助文档了。
比如: