Java反射机制

本文详细介绍了Java反射机制,包括其概述、作用、应用场景、获取类的三种方法以及如何通过反射创建对象。通过反射,可以动态获取类信息,实现反编译、访问对象属性和方法,常见于JDBC驱动加载、Spring IOC等场景。文中还展示了如何使用反射API进行对象实例化和字段操作。
摘要由CSDN通过智能技术生成

一、反射的概述

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

二、什么是Java反射

就是正在运行,动态获取这个类的所有信息。

三、反射机制的作用

  1,反编译:.class-->.java

   2.通过反射机制访问java对象的属性,方法,构造方法等;

四、反射机制的应用场景

Jdbc 加载驱动

Spring ioc

框架

五、反射机制获取类有三种方法

//第一种方式: 

        Class c1 = Class.forName("user"); 

        //第二种方式: 

        //java中每个类型都有class 属性

        Class c2= Employee.class    

        //第三种方式: 

        //java语言中任何一个java对象都有getClass 方法 

        Employee e= new Employee(); 

        Class c3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)  

六、反射创建对象的方式

      Class<?> forName = Class.forName("com.test.entity.User");

        // 创建此Class 对象所表示的类的一个新实例调用了User的无参数构造方法.

        Object newInstance = forName.newInstance();

实例化有参构造函数

        Class<?> forName = Class.forName("com.test.entity.User");

        Constructor<?>constructor = forName.getConstructor(String.class, String.class);

        User newInstance =(User) constructor.newInstance("123""123");

七、反射常用API

方法名称

作用

getDeclaredMethods []

获取该类的所有方法

getReturnType()

获取该类的返回值

getParameterTypes()

获取传入参数

getDeclaredFields()

获取该类的所有字段

setAccessible

允许访问私有成员


八、使用反射为类私有属性赋值

      // 获取当前类class地址

        Class<?>forName = Class.forName("com.test.entity.User");

        // 使用反射实例化对象无参数构造函数

        Object newInstance = forName.newInstance();

        // 获取当前类的 userId字段

        Field declaredField = forName.getDeclaredField("userId");

        // 允许操作私有成员

        declaredField.setAccessible(true);

        // 设置值

        declaredField.set(newInstance"123");

        User user = (User) newInstance;

        System.out.println(user.getUserId());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值