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 }

    运行结果如下:
    
    
  • 相关阅读:
    JS调用WebService
    C# FTP FtpWebRequest UsePassive 属性
    vs2010 rdlc .net4.0 卸载 Appdomain 时出错。 (异常来自 HRESULT:0x80131015) 解决办法
    DotNetBar RibbonControl控件office2007风格
    C# WinForm RDLC报表不预览直接连续打印
    C# 调用 WebService 连接ORACLE 11g
    C# WinForm程序打印条码 Code39码1
    RDLC报表 在WinForm里运行出现 未能加载文件或程序集microsoft.reportviewer.winforms
    C# 使用 SAP NCO3.0 调用SAP RFC函数接口
    在ui自动化中,如果有多个case在不同的class 下,要全部执行并且要求只启动一次浏览器页面,怎么处理?
  • 原文地址:https://www.cnblogs.com/yangyi9343/p/4753675.html
Copyright © 2011-2022 走看看