谁来给讲讲JAVA的反射机制啊?简明扼要一点 差了一些资料,还是看不太明白,都是说允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息。这样的话,随便一个class都可以看到内部结构,不就不安全了吗,反编译是不是这样弄出来的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 反射后获取的class我们还可以调用他的私有方法呢呵呵,那不是更不安全 反射里所说的安全不安全,是说通过反射的方式,可以访问对象的非公开部分,那么对象本身不安全。并不是class不安全,class是字节码,也算透明的,如果了解字节码的解析都可以破译字节码。反编译不是这样弄出来的,反编译和反射没有关系,反编译是字节码级别的破译,程序运行不运行没关系,反射是对象级别的强制访问,程序不运行也就没反射什么事了。有些人为了保护自己的代码,所以在编译成class的时候做了混淆,也就是相当于给字节码做了加密,这是对于反编译所说安全问题,和反射的安全问题完全两回事。 反射是代码级别的,字节码是虚拟机级别的,不一样。反射是从JAVA语言层提供的实现未知类特定方法调用的机制。 反射就是把一个类的各个成分映射成相应的java类。 关于安全问题,如果你不希望别人调用你的方法,可以加保护嘛。凡是public的方法,你为什么害怕别人知道呢?这不与设计目标违背了吗?反编译与反射是两回事,有兴趣可以去查看JAVA虚拟机规范。 Class<?> cls = Class.forName(bean.getClsName());Method method = cls.getMethod("putDynamicInfo", String.class, String.class);method.invoke(bean, new Object[] {"id", "001"}); Reflection是Java中很有用的一个机制,为编程提供了很强大的灵活性。获取某个Class的内部信息是为了应用它们,而不是反编译它们。比如说通过Reflection探知class内部有个getBeauty()方法,你就可以调用它来获得美女了。但getBeauty()方法内部是怎样编写的你仍然不知道(也没必要知道)。Reflection让动态调用成为可能。试想一下如果没有Reflection,Struts2怎么可能根据客户端传来的属性名称在后台的Action中调用相关的get方法呢。 換個思維吧,就當是JAVASCRIPT(弱類型語言),javascript也是不用知道定義了什麽屬性、方法,直接xxx.method()就可以用了所以反射也是給出一大堆字符(類名,方法名……等),然後就可以得到個什麽 谁来帮我看看“错误:无法从静态上下文应用非静态 变量 this” 如何用JAVA编程实现网络数据包嗅探软件? java是什么 业界用C++作开发,一般用什么IDE? 作个小调查,请问你们在一个公司能呆多久,平均多久跳槽一次 初学JAVA 请教一个问题, 这程序如何能看到运行结果啊! 为什么使用javamail访问pop3服务器速度很慢,尤其在邮箱文件比较多时,请问如何解决 :::高分求书:::哪里有下载java中关于数据库和swing方面的书? java-sql server嵌套语句操作问题 一个很简单的问题,高分!!! java TextArea指定文字变色 在线等! 一个字节运算问题
呵呵,那不是更不安全
有些人为了保护自己的代码,所以在编译成class的时候做了混淆,也就是相当于给字节码做了加密,这是对于反编译所说安全问题,和反射的安全问题完全两回事。
反射是从JAVA语言层提供的实现未知类特定方法调用的机制。
凡是public的方法,你为什么害怕别人知道呢?这不与设计目标违背了吗?反编译与反射是两回事,有兴趣可以去查看JAVA虚拟机规范。
Class<?> cls = Class.forName(bean.getClsName());
Method method = cls.getMethod("putDynamicInfo", String.class, String.class);
method.invoke(bean, new Object[] {"id", "001"});
获取某个Class的内部信息是为了应用它们,而不是反编译它们。
比如说通过Reflection探知class内部有个getBeauty()方法,你就可以调用它来获得美女了。但getBeauty()方法内部是怎样编写的你仍然不知道(也没必要知道)。
Reflection让动态调用成为可能。试想一下如果没有Reflection,Struts2怎么可能根据客户端传来的属性名称在后台的Action中调用相关的get方法呢。