zoukankan      html  css  js  c++  java
  • 反射机制--调用构造函数和成员方法、制作帮助文档

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

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

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

    比如:


  • 相关阅读:
    javascript package的一种简单"优雅"实现
    高效、快速、专业的外科手术团队
    贝塞尔曲线
    经典格斗游戏《街头霸王》的Javascript实现
    该死的痘痘
    同步/异步与阻塞/非阻塞的区别
    Shell echo用法
    凹凸Linux面试题
    VMware Workstation 9下安装Fedora 18教程(转)
    Linux中locale 详解(转)
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6913171.html
Copyright © 2011-2022 走看看