java 反射详解
来源:互联网 发布:数据分析师 知乎 编辑:程序博客网 时间:2024/06/06 01:21
在设计模式中有一个原则,尽量使用接口而非实现,所以在编译后的class文件中,接口域变量的内容信息中应该会只保存了方法接口的相关信息,而在运行时,实现类作为传入参数执行具体的方法,这样就使得定义与具体实现分离,有利于扩展。
反射机制与接口机制存在一些相似之处,想要对一个类使用反射,必须首先要获取此类的描述信息,包括此类的方法、变量、注解、限制符、父类、子类、构造函数等信息,即首先要获取此类的class类。 在获取class文件之后,你便可以进行任何想要的操作,包括执行构造函数实例化类,执行具体的方法。
class类既可以是接口,也可以是具体实现类,如果是具体实现类,则可以通过newInstance()方法实现对象的实例化,如果为接口则会报错。
在具体方法的反射执行过程中,与类接口的作用方式有点类似:
在编译期间,接口好比为一个占位符,在运行期间才会指向实现类,执行具体的操作。
而class类的通过反射方式:method.invoke(object o,object[] args) 貌似有点类似,编译时占位,运行时根据具体的object执行具体的方法。
那这样做的好处究竟是什么呢?----------减少了代码方法的调用过程。
举例来说,我这里有三个类,A,B,C,项目工程中,可能用到类A,也可能用到类B,也可能用到类C。
如果,不使用反射,则我需要具体实例化A、B、C类,后显示调用他们的方法,因此不可避免的执行三次实例化,和根据方法不同执行具体的方法调用。
但是,如果采用反射方式,我可以通过如下代码来实现:
String className = “”; 外界传值
object[] args = 外界传值
Class<?> objClass = Class.forName(className);
Mehtod[] methods = objeClass.getMethods();
for (Method method : methods)
{
method.invoke(objClass.newInstance(),args);
}
这样,就将初始化和方法调用操作进行了公共的抽取,只需要配置下参数就可以,而不需编写具体的初始化和方法调用操作
- java反射机制详解!
- java 反射机制详解
- JAVA反射详解
- JAVA反射机制详解
- java反射机制详解
- java反射详解
- Java反射机制详解
- Java反射机制详解
- java反射机制详解
- java反射详解
- Java反射机制详解
- java反射详解
- Java反射机制详解
- JAVA反射详解
- java反射详解
- java反射详解
- java反射详解
- java反射详解
- 袪除疾病的心法(十三)财运篇
- ptrdiff_t does not name a type造成编译错误
- 球哈希Spherical Hashing
- G-sensor的抖动问题
- java 冒泡排序
- java 反射详解
- gcc g++ 3.4和4.5的区别 extra qualification ‘const char*’ to ‘char*’等错误
- 掌握设计模式
- 门面模式(Facade)----结构笔记
- ZigBee 2007-Pro(无线系统)多跳组播的
- 大数据,第三方数据分析的角度
- Android蓝牙系统
- Linux vi 经验总结
- window cmd 创建文本文件