-
关于反射的问题15
JAVA的反射机制。
最近看了一下一些发行的库,比如objot等是说运行是没有反射。实现了ioc与aop,不再有反射。是什么原理哦?比如我要动态地调用某个类的某个方法,就只有方法名与类名,参数列表类型,不使用反射能完成吗?
关于反射,我真被搞晕了,什么时候才算是反射呢?
比如
Class A {
int field;
void method();
}
在操作A类时。
A a = new A();
//或者这里发生反射了吗? Class<?> c = a.getClass();
Class<?> c = A.class; //这里发生反射的操作了吗?
Method m = c.getDeclaredMethod("method",new Class[]{}); //这里应该发生了反射吧?
m.invoke(a); //这里还算是反射吗?
我有一个Method对象时,调用method的invoke方法还算是反射吗?
能详细说说这个吗?我老觉得我一用反射来做东西,就联想到它的性能比较差。想找代替品,又找不到更灵活的。唉。。2008年11月09日 00:00
6个答案 按时间排序 按投票排序
-
采纳的答案
A a = new A(); Class<?> c = a.getClass();
//getClass是Object的方法,返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
实际结果类型是 Class<? extends |X|>,其中 |X| 表示清除表达式中的静态类型,该表达式调用 getClass。 例如,以下代码片段中不需要强制转换:
Number n = 0;
Class<? extends Number> c = n.getClass();
一直都有的东西,谈不上叫反射
Class<?> c = A.class;
//这个也不算吧。。
Method m = c.getDeclaredMethod("method",new Class[]{}); m.invoke(a);
reflect的东西,在java.lang.reflect包里边,是这么描述的引用提供类和接口,以获得关于类和对象的反射信息。在安全限制内,反射允许编程访问关于加载类的字段、方法和构造方法的信息,并允许使用反射字段、方法和构造方法对其底层对等项进行操作。
如果必需的 ReflectPermission 可用,则 AccessibleObject 允许抑制访问检查。
Array 提供动态创建和访问数组的静态方法。
此包中的类以及 java.lang.Class 可以适应以下应用程序的需要:调试程序、解释程序、对象检查程序、类浏览程序,以及服务(比如,Object Serialization 和 JavaBean,它们需要访问目标对象(基于其运行时类)的公共成员或给定类声明的成员)。
可以参考api文档,更多技巧参考java reflection in action 这本书
反射的性能没有那么恐怖,像beanutils之类,strut1也是用了很多。
再看看那些动态语言,ruby python,n多这些东西,而且也比java慢n多。。
不过robbin他们还不是用得不亦乐呼。。
2008年11月09日 07:05
-
引用第一次编解码某个类的对象时,会生成bytecode来访问这个类,后续编解码这个类的对象时,不再有任何reflection,优化了效率。
Objot是这么个说法吧2008年11月09日 07:16
-
反射的性能也有些讨论
http://www.iteye.com/topic/12422
很多时候,用到反射,都是些框架级的东东,瓶颈也不一般不再这里。2008年11月09日 07:08
-
反射理解就是非正常手段调用对象的方法或字段,所谓正常的手段就是平常的new一个对象,然后通过该实例进行方法或字段的调用。反射一般用在事先不太清楚某个实例的方法或字段的时候,可以通过名称的过滤或在恰当的时候来决定调用。
2008年11月09日 00:34
-
当用于字段和方法接入时反射要远慢于直接代码。性能问题的程度取决于程序中是如何使用反射的。如果它作为程序运行中相对很少涉及的部分,缓慢的性能将不会是一个问题。即使测试中最坏情况下的计时图显示的反射操作只耗用几微秒。仅反射在性能关键的应用的核心逻辑中使用时性能问题才变得至关重要。
可以看看java反射性能测试分析2008年11月09日 00:14
-
引用A a = new A();
//或者这里发生反射了吗? Class<?> c = a.getClass();
没有
引用Class<?> c = A.class; //这里发生反射的操作了吗?
没有
引用Method m = c.getDeclaredMethod("method",new Class[]{}); //这里应该发生了反射吧?
发生了
引用m.invoke(a); //这里还算是反射吗?
算2008年11月09日 00:08
相关推荐
计算流体力学(CFD)中的双马赫反射问题是一个重要的标准算例,它主要用于测试和验证CFD程序对激波波系的处理能力。在流体动力学中,马赫反射是指当高速流动遇到障碍物时,激波在边界上的反射现象。当流体以超过音速...
2. **describeType()**:`flash.utils.describeType()` 函数是另一个重要的反射工具,它返回一个XML对象,包含了关于指定类、包或变量的详细信息。这个XML包含类的属性、方法、构造函数、事件、主题等信息,非常适用...
这篇博文“关于反射调用方法的一个log”可能涉及了如何利用Java反射API来动态地调用类的方法,这在处理不确定的类结构或者在元编程场景中十分常见。 在Java中,`java.lang.reflect`包提供了反射相关的类和接口,如`...
在双马赫反射问题中,Euler方程用于模拟超音速气流的动态行为。 2. **Runge-Kutta方法**:这是一种数值积分方法,常用于求解常微分方程。它通过多次迭代近似解来逼近真实解,尤其适合处理非线性问题。在这个问题中...
双马赫数反射问题是一个经典的二维欧拉方程测试案例,它涉及到高马赫数流体在固体壁面上的反射现象,通常用于检验数值方法的稳定性和精度。 WENO(Weighted Essentially Non-Oscillatory)方法是一种高阶精度的有限...
在本文中,我们将深入探讨如何使用MATLAB进行反射阵天线单元相位的计算,这是无线通信和雷达系统中的一个重要概念。...总的来说,MATLAB提供了强大且灵活的工具来解决反射阵设计中的相位计算问题。
### 关于反射的相关笔记 #### 一、反射技术概述 反射技术是Java语言的一个核心特性,它允许程序在运行时动态地获取类的信息,并能够直接操作这些信息。这对于那些需要在运行时根据不同的条件加载不同类的应用场景...
在Android开发中,注解(Annotation)和反射(Reflection)是两个重要的概念,它们极大地提升了代码的可维护性、灵活性和动态性。本篇将详细阐述这两个知识点,并结合实际示例进行讲解。 **注解(Annotation)** 1...
虽然Java反射提供了强大的功能,但在使用时也需要注意其潜在的问题: - **优点**: - **灵活性**:能够动态地加载和操作类。 - **扩展性**:方便扩展程序的功能。 - **可维护性**:降低了程序间的耦合度,提高了...
分析和比较这两个版本的代码,可以帮助我们更好地理解多层媒质反射透射问题的求解策略,并可能为未来的设计和优化提供参考。 总之,计算多层媒质的反射和透射系数是电磁学中的基本问题,涉及到物理原理和数值计算...
"EXample.rar"这个压缩包文件包含了MATLAB代码,用于演示和理解光的反射定律以及其在实际问题中的应用,例如香烟毒物摄入问题。让我们深入探讨这些知识点。 首先,光的反射定律是光学的基础原理之一,它规定了光线...
SI反射问题在信号波形上的表征就是:上冲/下冲/振铃等。 1. SI问题的成因 下图所示是一个典型的高速信号互连链路,信号传输路径包括:①发送端芯片(封装与PCB过孔)②子卡PCB走线③子卡连接器④背板PCB走线⑤对侧...
然而,由于Kotlin与Java反射的实现方式有所不同,开发者在使用过程中可能会遇到一些特定的问题。本文将深入探讨这些问题以及如何解决它们。 1. **类型擦除与泛型** Kotlin中的泛型在编译后会被类型擦除,这意味着...
标题和描述均提到了"C#反射及元数据性能问题",这一主题在IT领域特别是.NET开发社区中,一直是讨论的热点。反射(Reflection)作为C#语言的一个强大特性,允许程序在运行时检查和调用类型的信息,这为动态编程提供了...
反射机制例子及反射方法调用 反射机制是一种非常强大的机制,它允许我们在运行时动态地加载和使用类、...但是,反射机制也存在一些缺陷,如性能问题、安全问题等,因此在使用反射机制时,我们需要小心地考虑这些问题。
Java反射详解 在Java编程语言中,反射是一个强大的工具,它允许程序在运行时检查类、接口、字段和方法的信息,甚至能够在运行时创建和访问...理解并熟练掌握反射,对于提升Java开发技能和解决实际问题具有重要意义。
- **安全性和稳定性**:反射可以访问私有成员和执行非公开方法,这可能导致安全问题或不稳定的行为。 - **使用场景选择**:应该谨慎使用反射,只有在确实需要动态性时才考虑使用反射,避免滥用。 总之,Java反射...