JAVA 快速了解反射

JAVA 快速了解反射

什么是反射
反射是 Java 编程语言的一个特性,它提供了在运行时检查和动态调用类、方法、属性的能力。

反射能做什么
反射可以在运行时检查类,接口,方法和变量。还可以实例化对象、调用方法、获取和设置变量值。比如当我们不知道一个类中是否拥有某个方法时,我们就可以使用反射来检查是否拥有这个方法。

反射常用类
常用类

Class:Class 类表示正在运行的 Java 程序中的类和接口。
Field:提供有关类或接口的单个域的信息和动态访问。如数据类型,访问修饰符,域的名称和值。
Method:提供有关类或接口上的单个方法的信息和访问权限。如访问修饰符,返回类型,名称,参数类型和方法的异常类型。
Constructor:提供有关类的单个构造函数的信息和访问权限。例如构造函数的访问修饰符,名称和参数类型。
Modifier:提供了有关访问修饰符的信息。

Class类常用方法

Class 类没有公共构造方法,可以通过以下方法获取 Class 实例。

1.Object 提供的 getClass() 方法。
2.类名.Class。
3.Class.forName(String className) 方法,className 为类的全限定名。

Field getField(String name)	获取指定的域对象
Field[] getFields()	返回所有的公有域对象数组
Method getDeclaredMethod(String name, Class<?>... parameterTypes)	返回指定的方法对象
Method[] getMethods()	返回所有的公有方法对象数组
Method[] getDeclaredMethods()	返回所有方法对象数组
String getName()	获取全限定名

举例

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class ReflectDemo {
    public int a;
    private int b;

    public static void main(String[] args) {
        Class<ReflectDemo> reflectDemoClass = ReflectDemo.class;
        //输出所有的域名称
        for (Field declaredField : reflectDemoClass.getDeclaredFields()) {
            //可以通过Modifier将具体的权限信息输出,否则只会显示代表权限的数值
            System.out.println("域:" + declaredField.getName() + " 修饰符:" + Modifier.toString(declaredField.getModifiers()));
        }
        //输出所有的公有域名称
        for (Field field : reflectDemoClass.getFields()) {
            System.out.println("公有域:" + field.getName() + " 修饰符:" + Modifier.toString(field.getModifiers()));
        }
        //输出类的所有方法名
        for (Method declaredMethod : reflectDemoClass.getDeclaredMethods()) {
            System.out.println("方法:" + declaredMethod.getName() + " 修饰符:" + Modifier.toString(declaredMethod.getModifiers()));
        }
        public void fun1() {
        }
        private void fun2() {
        }
    }
}
输出结果
域:a 修饰符:public
域:b 修饰符:private
公有域:a 修饰符:public
方法:main 修饰符:public static
方法:fun1 修饰符:public
方法:fun2 修饰符:private
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值