java上乘武功入门??反射

java上乘武功入门??反射,博智网带你了解详细信息 。
目录

  • 先来看一段魔法吧
  • 反射机制是个什么玩意儿?
  • 构造任意一个类的对象
  • 了解任意一个对象所属的类
  • 了解任意一个类的成员变量和方法
  • 调用任意一个对象的属性和方法
  • 魔法揭秘
  • 总结

先来看一段魔法吧public class Test {private static void changeStrValue(String str, char[] value) {// 只要执行魔法代码就可以达到下面的效果// 施展魔法的代码稍后揭秘}public static void main(String[] args) {changeStrValue("abc", new char[]{'d','e','f'});String abc = "abc";System.out.println("abc");System.out.println(abc);System.out.println("abc".equals(abc));}}
java上乘武功入门??反射

文章插图
java上乘武功入门??反射

文章插图
java上乘武功入门??反射

文章插图
java上乘武功入门??反射

文章插图
java上乘武功入门??反射

文章插图
【java上乘武功入门??反射】
魔法揭秘是时候揭秘魔法的真面目了 , 没错 , 也是利用了反射 。
import java.lang.reflect.Field;public class Test {/*** 修改字符串内部的值* @author 二当家的白帽子 https://le-yi.blog.csdn.net/* @param str* @param value*/private static void changeStrValue(String str, char[] value) {try {Field f = str.getClass().getDeclaredField("value");f.setAccessible(true);f.set(str, value);} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {changeStrValue("abc", new char[]{'d','e','f'});// 这里的"abc"字符串和上面调用changeStrValue的参数"abc"会指向同一块内存String abc = "abc";System.out.println("abc");System.out.println(abc);System.out.println("abc".equals(abc));}}
要理解这段代码 , 除了反射机制还需要了解java对于字符串的处理 。"字符串常量池"已经超出本文的范围 , 是另一个话题 , 本文就不多说了 。
原本字符串内容是"abc" , 我们正常情况下无法修改这个内容 , 因为String是不变类 。但是反射大法却可以打破一切禁忌 。
总结一般的程序可能用不到写反射的代码 。但是像spring这样的框架 , 如果没有反射 , 我真的想不出如何实现呢 。哪怕永远不需要用反射 , 了解机制对我们都有着莫大的好处 。
本篇文章就到这里了 , 希望能给你带来帮助 , 也希望您能够多多关注趣讯吧的更多内容!