5.2 JDK源码阅读之Method

本文深入探讨Java反射机制,包括如何获取Method类对象及其属性信息,如方法的修饰符、返回值类型、方法名等,并通过示例展示了如何利用反射调用类的方法。

https://blog.youkuaiyun.com/u010445297/article/details/60967146

 

在计算机科学中,内省是指计算机程序在运行时(Run time)检查对象(Object)类型的一种能力,通常也可以称作运行时类型检查。 不应该将内省和反射混淆。相对于内省,反射更进一步,是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。

 

Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。
一个完整方法包含的属性有:
方法上使用的注解、方法的修饰符、方法上定义的泛型参数、方法的返回值、方法名称、方法参数(泛型、注解)、方法抛出的异常。

如何获取Method类对象
  一共有4种方法,全部都在Class类中:
    - getMethods(): 获得类的public类型的方法
    - getMethod(String name, Class[] params): 获得类的特定方法,name参数指定方法的名字,params参数指定方法的参数类型
    - getDeclaredMethods(): 获取类中所有的方法(public、protected、default、private)
    - getDeclaredMethod(String name, Class[] params): 获得类的特定方法,name参数指定方法的名字,params参数指定方法的参数类型

package com.testReflect;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class MethodTest {
    public static void main(String[] args) throws Exception {
        //使用反射第一步:获取操作类MethodDemoFieldDemo所对应的Class对象
        Class<?> cls = Class.forName("com.testReflect.MethodDemo");
        //使用MethodDemo类的class对象生成 实例
        Object obj = cls.newInstance();
        
        //获取public int addResult(int addNum)方法
        Method addMethod = cls.getMethod("addResult", new Class[]{int.class});
        System.out.println("修饰符: " + Modifier.toString(addMethod.getModifiers()));
        System.out.println("返回值: " + addMethod.getReturnType());
        System.out.println("方法名称: " + addMethod.getName());
        System.out.println("参数列表: " + addMethod.getParameterTypes());
        int result = (int)addMethod.invoke(obj, 2);
        System.out.println("调用addResult后的运行结果:" + result);
        
        System.out.println("--------------------------------");
        
        //获取public String toString() 方法
        Method toStringMethod = cls.getMethod("toString", new Class[]{});
        System.out.println("修饰符: " + Modifier.toString(toStringMethod.getModifiers()));
        System.out.println("返回值: " + toStringMethod.getReturnType());
        System.out.println("方法名称: " + toStringMethod.getName());
        System.out.println("参数列表: " + toStringMethod.getParameterTypes());
        String msg = (String)toStringMethod.invoke(obj);
        System.out.println("调用toString后的运行结果:" + msg);
    }
}

dalao的文章:https://blog.youkuaiyun.com/sinat_38259539/article/details/71799078

类的正常加载过程

反射的作用 

通过反射获取构造方法并使用

获取成员变量并调用

获取成员方法并调用

反射main方法

反射方法的其它使用之---通过反射运行配置文件内容

反射方法的其它使用之---通过反射越过泛型检查

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值