zoukankan      html  css  js  c++  java
  • java的反射应用

      

    class B{
    public static void main(String[] arg){
    Class c_a = Class.forName(packageName + "." + "A");
    Object obj_a = c_a.newInstance();
    Method do_m = c_a.getDeclaredMethod("do",new Class[]{});
    //prepare data for the mathod
    do_m.invoke(obj_a, new Object[]{});
    }
    }

    原本觉得反射挺麻烦的,其实仔细看,想一想,其实反射也是很自然的。就好在其它的C++的代码中,如果需要调用DLL的话,也是需要先声明调用的方法,然后再调用的。反射很类似这种情况。先声明一个方法

    Method m = c_a.getDeclaredMethod("do", new Class[]{});

    然后再调用

    m.invoke(obj_a, new Object[]{});

    反射其实利用起来很简单,但是却可以解决很多问题,不可不说这是一个很好的工具。虽然代码显得比较多,但是细想之下,其实很也是很自然的事情,并不需要努力去记忆什么东西。

    import java.lang.reflect.Method;

    public class InvokeMethods {
     public static void main(String[] args) {
      Employee emp = new Employee();
      Class cl = emp.getClass();//是Class,而不是class
      // /getClass获得emp对象所属的类型的对象,Class就是类的类          
      // /Class是专门用来描述类的类,比如描述某个类有那些字段,          
      // /方法,构造器等等!
      try {
       // /getMethod方法第一个参数指定一个需要调用的方法名称
       // /这里是Employee类的setAge方法,第二个参数是需要调用 
       // 方法的参数类型列表,是参数类型!如无参数可以指定null 
       // /该方法返回一个方法对象 
       Method sAge = cl.getMethod("setAge", new Class[] { int.class });//参数必须和方法中一样int和Integer,double和Double被视为不同的类型
       Method gAge = cl.getMethod("getAge", null);
       Method pName = cl.getMethod("printName",
         new Class[] { String.class });
       
       Object[] args1 = { new Integer(25) };
       // 参数列表
       // emp为隐式参数该方法不是静态方法必须指定
       sAge.invoke(emp, args1);
       Integer AGE = (Integer) gAge.invoke(emp, null);
       int age = AGE.intValue();
       System.out.println("The Employee Age is: " + age);
       Object[] args3 = { new String("Jack") };
       pName.invoke(emp, args3);
      } catch (Exception e) {
       e.printStackTrace();
      }
      System.exit(0);
     }
    }

    class Employee {
     // 定义一个员工类  
     public Employee() {
      age = 0;
      name = null;
     }
     // 将要被调用的方法  
     public void setAge(int a) {
      age = a;
     }
     // 将要被调用的方法  
     public int getAge() {
      return age;
     }
     // 将要被调用的方法
     public void printName(String n) {
      name = n;
      System.out.println("The Employee Name is: " + name);
     }
     private int age;
     private String name;
    }

  • 相关阅读:
    九、Shell 流程控制
    八、Shell test 命令
    七、Shell printf 命令
    六、Shell echo命令
    五、Shell 基本运算符
    四、Shell 数组
    三、Shell 传递参数
    二、Shell 变量
    一、Shell 教程
    KVM 介绍(1):简介及安装
  • 原文地址:https://www.cnblogs.com/jtlgb/p/5818619.html
Copyright © 2011-2022 走看看