Java反射

1、什么是反射

        Java反射是指在程序运行时动态地获取和操作类、对象、方法等的能力。通过反射,我们可以在运行时检查类的属性和方法,并可以动态地创建、操作、调用对象,甚至可以修改类和对象的属性、方法。

2、反射的原理

        反射的原理是基于Java的类加载机制和虚拟机的动态执行能力。在运行时,虚拟机会为每个类加载创建对应的Class对象,并在内存中存储类的结构信息。通过反射,我们可以在运行时获取这些信息并进行操作,从而实现动态的功能扩展。 JVM将字节码文件加载到内存,动态获取class对象。

3、反射能干什么

反射在Java中广泛应用于框架、动态代理、依赖注入等场景,它使得程序具有更大的灵活性和可扩展性。

4、反射的具体实现

(1)获取class对象

package com.toonyoo.spring.reflect;

import java.lang.reflect.InvocationTargetException;

public class RefelectTest {

    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {

        // 1、类名.class 获取class对象
        Class<User> c1 = User.class;

        // 2、对象.getClass() 获取class对象
        Class<? extends User> c2 = new User().getClass();

        // 3、Class.forName("全路径") 获取class对象
        Class<?> c3 = Class.forName("com.toonyoo.spring.reflect.User");

        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);

        // 通过反射获取类对象
        User user = (User) c3.getDeclaredConstructor().newInstance();
        System.out.println(user);
    }
}

(2)获取类的所有构造器


        // 通过反射获取类的构造器
        Constructor<?>[] constructors = c3.getConstructors();
        for (Constructor<?> constructor : constructors) {
            System.out.println("构造器的名称" + constructor.getName() + " 构造器的参数个数" + constructor.getParameterCount() + " 构造器的参数类型" + constructor.getParameterTypes());
        }

(3)获取类的属性

        // 通过反射获取类的所有属性 Declared包含私有属性
        Field[] fields = c3.getDeclaredFields();
        for (Field field : fields) {
            System.out.println("类的属性有"+ field);
        }

(4)获取类的所有方法,包括私有方法

        // 通过反射获取类的所有方法
        Method[] methods = c3.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println("方法名为"+method.getName());
        }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值