谁来给讲讲JAVA的反射机制啊?简明扼要一点

sky_0036 2011-06-13 11:39:41
差了一些资料,还是看不太明白,都是说允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息。

这样的话,随便一个class都可以看到内部结构,不就不安全了吗,反编译是不是这样弄出来的?
...全文
81 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
商科程序员 2011-06-13
  • 打赏
  • 举报
回复
关于安全问题,如果你不希望别人调用你的方法,可以加保护嘛。
凡是public的方法,你为什么害怕别人知道呢?这不与设计目标违背了吗?

反编译与反射是两回事,有兴趣可以去查看JAVA虚拟机规范。
三心不可得 2011-06-13
  • 打赏
  • 举报
回复
反射就是把一个类的各个成分映射成相应的java类。
商科程序员 2011-06-13
  • 打赏
  • 举报
回复
反射是代码级别的,字节码是虚拟机级别的,不一样。
反射是从JAVA语言层提供的实现未知类特定方法调用的机制。
qybao 2011-06-13
  • 打赏
  • 举报
回复
反射里所说的安全不安全,是说通过反射的方式,可以访问对象的非公开部分,那么对象本身不安全。并不是class不安全,class是字节码,也算透明的,如果了解字节码的解析都可以破译字节码。反编译不是这样弄出来的,反编译和反射没有关系,反编译是字节码级别的破译,程序运行不运行没关系,反射是对象级别的强制访问,程序不运行也就没反射什么事了。
有些人为了保护自己的代码,所以在编译成class的时候做了混淆,也就是相当于给字节码做了加密,这是对于反编译所说安全问题,和反射的安全问题完全两回事。
amdgaming 2011-06-13
  • 打赏
  • 举报
回复
反射后获取的class我们还可以调用他的私有方法呢
呵呵,那不是更不安全
soli11722984 2011-06-13
  • 打赏
  • 举报
回复
換個思維吧,就當是JAVASCRIPT(弱類型語言),javascript也是不用知道定義了什麽屬性、方法,直接xxx.method()就可以用了

所以反射也是給出一大堆字符(類名,方法名……等),然後就可以得到個什麽
飞跃颠峰 2011-06-13
  • 打赏
  • 举报
回复
Reflection是Java中很有用的一个机制,为编程提供了很强大的灵活性。
获取某个Class的内部信息是为了应用它们,而不是反编译它们。
比如说通过Reflection探知class内部有个getBeauty()方法,你就可以调用它来获得美女了。但getBeauty()方法内部是怎样编写的你仍然不知道(也没必要知道)。
Reflection让动态调用成为可能。试想一下如果没有Reflection,Struts2怎么可能根据客户端传来的属性名称在后台的Action中调用相关的get方法呢。
softroad 2011-06-13
  • 打赏
  • 举报
回复

Class<?> cls = Class.forName(bean.getClsName());
Method method = cls.getMethod("putDynamicInfo", String.class, String.class);
method.invoke(bean, new Object[] {"id", "001"});

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧