zoukankan      html  css  js  c++  java
  • 通过反射,调用类中的方法

    通过反射调用类中的方法,具体实现起来要注意两点:

    (1)通过 Class 类的 getMethod 方法取的 Method 对象,并设置调用方法时需要的参数类型。

    (2)使用 Method 方法调用 invoke 方法,并向该方法传递参数,其参数通常是一个类的对象。

    个人总结,大致需要以下四个步骤:

    1. 获取当前类的Class对象。              (通过forName()动态加载类)

    2. 实例化这个Class对象。                (通过newInstance:  Object obj=student.newInstance() )

    3. 获取当前类的某个(些)方法

    4用   方法对象名.invoke ,通过Class对象的实例,调用带相应参数的,当前类的方法。

    代码如下:

    ******************学生类****************

    类里面有两个方法,一个带参数,一个不带参数

     1 package zj4_6;
     2 
     3 import java.lang.reflect.InvocationTargetException;
     4 
     5 public class Student {
     6     public void printInfo(){
     7         System.out.println("打印学生信息");
     8     }
     9     public void printAddress(String address){
    10         System.out.println("hellow,I come from "+address);
    11         
    12     }
    13 }

    ***********************主函数类***************************
    调用Student类中的两个方法
     1 package zj4_6;
     2 
     3 import java.lang.reflect.InvocationTargetException;
     4 import java.lang.reflect.Method;
     5 
     6 public class InvokeMethod1 {
     7 
     8     /**
     9      * 通过反射,调用类中的方法
    10      * @throws SecurityException 
    11      * @throws NoSuchMethodException 
    12      * @throws InstantiationException 
    13      * @throws InvocationTargetException 
    14      * @throws IllegalArgumentException 
    15      * @throws IllegalAccessException 
    16      */
    17     public static void main(String[] args) throws Exception {
    18         try {
    19             Class student=Class.forName("zj4_6.Student");//动态加载类,获取当前类的Class对象
    20             //获取Student类名称为printinfo地方法
    21             Method methods1=student.getMethod("printInfo");
    22             //调用frintInfo方法
    23             methods1.invoke(student.newInstance()); //通过实例化的对象,调用无参数的方法
    24             //获取类中名称为printInfo地方法,String,class是参数类型
    25             Method methods2=student.getMethod("printAddress", String.class);//注意参数不是String
    26             //调用printAddress方法,其中HK是方法传入的参数值
    27             methods2.invoke(student.newInstance(),"HK");//通过对象,调用有参数的方法
    28 } catch (ClassNotFoundException e) { 29  e.printStackTrace(); 30  } 31  } 32 }

    运行结果如下:
    
    
  • 相关阅读:
    BNU 51002 BQG's Complexity Analysis
    BNU OJ 51003 BQG's Confusing Sequence
    BNU OJ 51000 BQG's Random String
    BNU OJ 50999 BQG's Approaching Deadline
    BNU OJ 50998 BQG's Messy Code
    BNU OJ 50997 BQG's Programming Contest
    CodeForces 609D Gadgets for dollars and pounds
    CodeForces 609C Load Balancing
    CodeForces 609B The Best Gift
    CodeForces 609A USB Flash Drives
  • 原文地址:https://www.cnblogs.com/yangyi9343/p/4753675.html
Copyright © 2011-2022 走看看