老生常谈之Java反射机制-动力节点

news/2024/5/19 5:20:40 标签: java, 反射

一、什么是反射

对于程序员来说,应该很少需要直接使用反射工具;之所以在语言中提供它们,是为了支持其他Java特性,比如对象序列化、JavaBeans以及RMI。还有就是在很多框架中,也是应用到了反射机制。

在初学时,只知道这是个生成驱动实例的语句,而这其实就是应用了反射

Java基础学习:Java反射机制

二、反射能做什么?

主要的四个功能:

-获取对象所属的类

-获取类的成员变量、方法

-运行时创建对象

-运行时调用对象的方法

其它功能

可用构建器创建新对象,通过Constructor类取得其它类的构造函数

用get()和set()方法读取和修改与Field对象关联的字段

用invoke()方法调用与Method对象关联的方法,即调用其他类的方法

此外,我们可调用方法getFields(),getMethods(),getConstructors(),分别返回用于表示字段、方法以及构建器的对象数组,取得并修改数组的信息

取得其他类的父类、实现的接口、权限修饰符、属性类型等

三、反射的优缺点

优点:可以实现运行时动态创建对象,增加程序的灵活性。这种灵活性怎么体现的呢?比如我们在开发一个大型的软件,编译发布后,我们很可能需要更新一些功能,但因为软件已发布,我们肯定不能要求用户把以前的卸载,再重新安装新的版本。如果我们采用静态的解决方法的话,需要重新编译整个程序,而如果采用反射机制的话,就可以不用卸载,只需要在运行时才动态的创建和编译,就可以实现更新的功能。

缺点:

性能影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于只直接执行相同的操作。

破坏封装,因为通过反射可以访问私有变量或方法,这样可能会存在安全性的问题。比如我们知道String是不可变的,因为这个类被final修饰说明不可继承,并且String其实就是被final修饰的一个字符数组value,value是private的,但是通过反射是可以访问到private成员变量,因此通过反射,我们其实是可以改变String的,很明显,这样是不安全的。


http://www.niftyadmin.cn/n/818722.html

相关文章

数组各种排序算法和复杂度分析

Java排序算法1)分类:插入排序(直接插入排序、希尔排序)交换排序(冒泡排序、快速排序)选择排序(直接选择排序、堆排序)归并排序分配排序(箱排序、基数排序)所需…

5. MySQL -- 数据库三大范式和表连接查询

目录 数据库的三大范式 数据规范化 什么是范式: 数据中遵守有三大范式: 第一范式 概念: 班级表 第二范式 概念: 示例: 第三范式: 概念: 示例:学生信息表 三大范式小结&#xf…

2022,程序员年收入大爆料。。。

推荐阅读:《劝退了。。。》《暴雪这次可真不要脸。。。》1结果出来了。前一段时间,文章中发起了一投票,统计一下2022年大家一年的收入范围是多少。现在结果出来了。上面就是上次的投票结果了。其中3万以下和500万以上,作为特殊数据…

经典Java高级算法笔试题-动力节点

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 publiccla…

TensorFlow的初次使用+Python画3D图和计算KL散度

ython计算KL散度import numpy as np import scipy.statsx [np.random.randint(1,11) for i in range(10)] print(x) print(np.sum(x)) px x/np.sum(x)#归一化 print(px)y [np.random.randint(1, 11) for i in range(10)] print(y) print(np.sum(y)) py y / np.sum(y)#归一化…

三体剧组是懂物理的

衡宇 梦晨 发自 凹非寺量子位 | 公众号 QbitAI推荐阅读:《劝退了。。。》《2022,程序员年收入大爆料。。》朋友,追剧版《三体》了吗?没有的话春节期间可以浅追一下,测试你体内的物理DNA有没有兴奋狂动。△某物理专业同…

Qt Creator自动使用svn源代码版本号编译

有时我们想在编译工程时,使用 svn 的源代码版本号来作为 build 的一个子版本号;或者只是为了识别某个发布版本,与源代码对应起来。在 Linux 下面有很多的解决方案,使用 svn 工具和一些 shell 命令再加上 -D 选项就可以达到上述目的…

Java抽象类概述-动力节点

抽象类的特点: 1,抽象方法一定在抽象类中。 2,抽象方法和抽象类都必须被abstract关键字修饰。 3,抽象类不可以用new创建和实例化对象。因为抽象类本身就是不完整的。 4,抽象类中的抽象方法要被使用,必须…