反射

反射:
    1.获取对应的class对象
        方式1:★
            Class clazz=Class.forName("全限定名");(包名.类名)
        方式2:
            Class clazz=类名.class;
        方式3:
            Class clazz==对象.getClass();
    2.通过class对象创建一个实例对象(相当于  new 类())
        Object clazz.newInstance();
    3.通过class对象获取一个方法(public修饰的)
        Method method=clazz.getMethod("方法名",Class .... paramType);
            paramType为参数的类型
    4.让方法执行:
        method.invoke(Object 实例对象,Object ... 参数);
            Object 实例对象:以前调用方法的对象 就是a
            Object ... 参数:该方法运行时需要的参数 就是 10和30
        执行这个方法 相当于
            a.add(10,30);
        例如:

            method.invoke(a,10,30)

代码练习

package cn.feizhu;

public class HelloMyServlet {

    public void add() {
        System.out.println("无參的add方法");
    }
    
    public void add(int a,int b) {
        System.out.println("有两个参数的add方法");
    }
    
    public int add(int c) {
        System.out.println("含有返回类型的add方法");
        return c+10;
    }
}
 

2、

package cn.feizhu.reflect;

import java.lang.reflect.Method;

import org.junit.jupiter.api.Test;

import cn.feizhu.HelloMyServlet;

public class Demo {
    @Test
       public void f1() {
          //调用HelloMyServlet中的方法
          HelloMyServlet a= new HelloMyServlet();
          a.add();
          a.add(10,20);
       }
    //调用空参的构造方法
         @Test
         public void f2() throws Exception {
             Class clazz=Class.forName("cn.feizhu.HelloMyServlet");
             //通过字符码对象创建一个实例对象(相当于调用空参的构造器)
             HelloMyServlet a=(HelloMyServlet) clazz.newInstance();
             //获取方法对象
             Method method=clazz.getMethod("add");
             //让方法对象执行 obj调用这个方法的实例,相当于a  a.add(),args是该方法执行时所需要的参数
             method.invoke(a);
         }
    //调用有两个参数的add方法
         @Test
         public void f3() throws Exception {
             //获取Class对象
             Class  clazz=HelloMyServlet.class;
             //通过clazz对象创建一个实例
             HelloMyServlet a=(HelloMyServlet) clazz.newInstance();
             //获取有两个参数的add方法
             Method m=clazz.getMethod("add", int.class,int.class);
             //执行方法
             m.invoke(a, 10,20);
         }
}
备注:由于个人原因,本博客暂停更新。如有问题可联系本人,本人提供技术指导、学习方向、学习路线。本人微信wlp1156107728(添加注明来意)   QQ1156107728(添加注明来意)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值