Java知识整理——反射

  1. Java的反射机制是做什么的?
    主要功能就是可以根据一个类的名称来创建一个类的实例,并调用实例的方法。
    我们通常情况下创建一个类实例的方法,就是new ABC()这样的方式来创建,那为什么还要用反射绕一大圈呢?因为反射可以让ABC这个具体的类,在运行的时候指定,例如可以通过传参的方式指定进来,比如我们传一个参数ABC就可以创建ABC这个类,也可以传递其他参数来创建DEF这个类。
  2. 怎么做?
    直接贴代码
package com;

import java.lang.reflect.Method;

public class Test {
    public int add500(int a) {
        return a + 500;
    }

    public static void main(String[] args) {
        //第一步:创建Test类的实例
        String className = "com.Test";//className需要写完整路径
        Class clazz = null;
        try {
            clazz = Class.forName(className);//通过类名创建一个Class对象(把这个类的信息加载到内存里)
            Test newInstance = (Test) clazz.newInstance();//这个newInstance就是Test的实例了
            //第二步:调用Test类的add500方法
            Method method = clazz.getMethod("add500", int.class);//根据方法名(add500)和参数类型(int)获取对应的Method对象
            Integer result = (Integer) method.invoke(newInstance, 123);
            //这个invoke,是用来调用方法的,传入的是类的实例和参数值,invoke返回的是那个调用方法的返回值
            System.out.println("123+500=" + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

PS:关于大小写class,”class”是java的关键字,用来定义一个类的;而”Class”本身就是一个类,用来实现和类相关的操作,比如类加载等。
PS2:关于”Class.forName”,实际包含3个操作:loading(装载),linking(连接)和initializing(实例化)
3. 获取所有定义的方法:
感谢网友wangfan_work的补充,可以采用getDeclaredMethod()来获取的是类自身声明的所有方法,包含public、protected和private方法。
当此方法是private等修饰导致没有访问权限时,还得压制访问权限setAccessible(true);
而getMethod()获取的是类的所有共有方法,也就是自身的所有public方法和从基类继承的、从接口实现的所有public方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值