通过反射修改不可变的String类

通过反射修改不可变的String类,第1张

运行结果如下:

反射还可以获取private修饰的属性和方法,在反射面前类就像没有穿衣服一样。

当然,凡事有利就有弊,然后我们再来说一下java反射的优缺点;

优点:

1:能够运行时动态获取类的实例,大大提高了系统的灵活性和扩展性;

2:与java动态编译相结合,可以实现无比强大的功能。

缺点:

1:使用反射的性能较低;

2:使用反射来说相对不安全;

3:破坏了类的封装性,可以通过反射来获取这个类的属性,和私有方法。

A:1、Java的private修饰符不是为了绝对安全设计的,而是对用户常规使用Java的一种约束。就好比饭店厨房门口挂着“闲人免进”的牌子,但是你还是能够通过其他方法进去。

2、从外部对对象进行常规调用时,能够看到清晰的类结构

反射么 就是根据你的类来为你创建对象

动态就是灵活的,直接写好的不能变的就是静态的

反射一般配合泛型使用

ClassforName(className)newInstance()

你传入什么类 就能对应生成这个类的对象

先通过IO,定位到这个包

通过Filelist得到一个包含这个包下所有class的文件的数组。

循环这个数组,用包名拼接每一个遍历出来的文件的名字,得到每一个完整的类名(即,包名加类名)

通过classforname反射得到每一个类实例

没太理解你要求的 实现但一般这种动态获取类信息 在java中都是通知反射机制实现的

Java的反射API(Reflection API)

Class类:要正确使用Java反射机制就得使用javalangClass这个类。它是Java反射机制的起源。当一个类被加载以后,Java虚拟机就会自动产生一个Class对象。通过这个

Class对象我们就能获得加载到虚拟机当中这个Class对象对应的方法、成员以及构造方法的声明和定义等信息。

 

反射API用于反应在当前Java虚拟机中的类、接口或者对象信息

功能:(Object object = new Object(),下面以对象object进行说明)

1)  获取类的Class对象

如果在运行时一个类的实例已经得到,你可以使用

Class c = 对象名getClass();例: Class c = objectgetClass();Class s = objectgetSuperclass();

如果你在编译期知道类的名字,你可以使用如下的方法Class c =java awt Buttonclass; 或者Class c = IntegerTYPE;

如果类名在编译期不知道, 但是在运行期可以获得, 你可以使用下面的方法Class c = ClassforName(“类的全路径”);

2)  获取类的Fields ,对Field进行赋值

Field[] fus = objectgetClass()getDeclaredField();

Field fu = objectgetClass()getDeclaredField(fieldName);//获取对象object的名称为fieldName的属性域。

fusetAccessible(true) ;//设置属性域的访问属性

fuset(object,val); //设置object对象的属性值

3)  获取类的Method

Method[]  ms= objectgetClass()getDeclaredMethods()

4)  获取类的Constructor

5)  新建类的实例

(A)通过Class<T>的函数newInstance

(B)通过Constructor对象的方法newInstance

以上就是关于通过反射修改不可变的String类全部的内容,包括:通过反射修改不可变的String类、java中,为什么说反射是动态的生成实例动态的调用、java如何通过反射获取包中所有的类等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10128567.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存