决战圣地玛丽乔亚Day36

反射的用法和场景:

1.newInstance()创建对象:

首先需要获取类对象   Class    class   = Entity.class 

获取class后,创建对象可以通过:

Entity  entityclass  = (Entity)class.newInstance()  进行对象的创建

如果类有自己的构造器,也可以通过构造器去创建对象

获取构造器   Entity.getConstructor()获取构造器后调用newInstance

Class jueJinUserClass = JueJinUser.class;
Constructor constructor = jueJinUserClass.getConstructor();
JueJinUser jueJinUserByConstructor = (JueJinUser) constructor.newInstance();

tips:使用构造器的方式创建对象,可以使用无参构造和有参构造,比较灵活,使用类的newInstance只能是无参

2.获取反射对象

根据类路径使用Class.forName:

Class  className = Class.forName("com.dwj.xxxxx")

 

.class:

 Class  className= EntityClass.class

 

getClass:

User  user = new User ();

Class userClass =  user.getClass();

 

3.获取类的属性

获取类后可以通过调用 .getFields和.getDeclaredFields方法获取


4.获取类中的构造方法

获取类后通过clz.getConstructors()和clz.getDeclaredConstructors方法进行获取构造方法

 

5.获取类中的方法

获取类后通过clz.getMethods()和clz.getDeclaredMethods方法进行获取构造方法

 

反射的性能:

反射的性能问题和使用次数有关,如果不是大量使用多次,性能是没问题的。

  • 不要过于频繁地使用反射,大量地使用反射会带来性能问题;
  • 通过反射直接访问实例会比访问方法快很多,所以应该优先采用访问实例的方式。

反射的安全性问题:

绕过访问控制:Java反射可以绕过对象的访问控制机制,即使对象的方法和属性被设置为私有也可以访问。这可能会导致程序员意外地允许未经授权的访问和操作对象,可能会导致程序中的潜在漏洞。

注入攻击:Java反射可以通过动态生成代码来调用对象的方法,因此可能会被用于注入攻击。例如,恶意代码可能会利用反射机制来执行非法代码或修改数据。

恶意代码注入:恶意代码可以利用Java反射机制来动态加载类并执行其中的方法。这可能会导致程序执行未经授权的操作,并可能导致系统被攻击。

暴露敏感信息:Java反射可以读取和操作对象的私有成员和方法,因此可能会导致程序员意外地泄露敏感信息。

绕过安全检查:Java反射可以绕过Java安全管理器的检查,因此可能会允许程序执行特权操作。

 

反射的使用场景:

动态加载类:Java反射可以动态地加载类,以便程序可以在运行时加载所需的类。这对于开发框架和插件系统非常有用。

运行时类型检查:Java反射可以让程序在运行时检查对象的类型和属性,这对于开发泛型代码和操作未知类型的对象非常有用。

访问私有成员:Java反射可以访问和操作对象的私有成员,包括私有方法、字段和构造函数。这对于开发测试工具和调试器非常有用。

动态代理:Java反射可以用于实现动态代理,允许程序在运行时创建一个代理对象来代替原始对象执行操作。这对于开发AOP框架和RPC系统非常有用。

序列化和反序列化:Java反射可以用于序列化和反序列化Java对象,即将对象转换为字节流,并在需要时将其还原为原始对象。这对于开发网络通信和持久化系统非常有用。

自定义注解和处理器:Java反射可以用于创建和处理自定义注解,并且可以在运行时动态地解析注解信息。这对于开发框架和库非常有用。

 

posted @   NobodyHero  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
历史上的今天:
2017-03-20 线程和并发--简介
点击右上角即可分享
微信分享提示