java反射机制的作用
2018-02-22 16:06
351 查看
Reflection 是 Java 程序开发语言的重要特征之一,是学习Java必须[java] view plain copyString s = "aaa";
Class cls1 = s.getClass();
Class cls2 = String.class;
Class cls3 = Class.forName("java.lang.String");
if (cls1 == cls2) {
System.out.println("cls1 == cls2");
}
if (cls2 == cls3) {
System.out.println("cls2 == cls3");
}
知识点。Java反射机制主要提供了以下功能:在运行时构造一个类的对象;判断一个类所具有的成员变量和方法;调用一个对象的方法;生成动态代理。反射最大的应用就是框架 主要用途是:通过传递一个字符串值 去调用某一个类的方法。例如根据spec0去调用SpecValue下的setSpce0()方法。 Java.lang.Class和Java.lang.reflect包下的API,用于表示或者处理当前JVM中的类,接口和对象。 Java反射的主要功能: 确定一个对象的类
取出类的modifiers,数据成员,方法,构造器,和超类.
找出某个接口里定义的常量和方法说明.
创建一个类实例,这个实例在运行时刻才有名字(运行时间才生成的对象).
取得和设定对象数据成员的值,如果数据成员名是运行时刻确定的也能做到.
在运行时刻调用动态对象的方法.
创建数组,数组大小和类型在运行时刻才确定,也能更改数组成员的值. Class类是Java反射的基础,Class类表示正在运行的java应用程序中的类和接口。Class只有私有的构造函数。Class类在加载类时由Java虚拟机以及调用类加载器中的 defineClass方法自动创建的。只在内存中存在一份加载类的Class类。
三种方式得到某个Java类的Class类,以java.lang.String为例: 为什么他们三个会==呢?因为他们描述的都是同一个类java.lang.String类。Class类还有很多方法,配合java.lang.reflect包下的一些API可以实现更多的功能。优点:Java的反射机制就是增加程序的灵活性,避免将程序写死到代码里。例如: 实例化一个 person()对象, 不使用反射,需要new person(); 如果想变成实例化其他类,那么必须修改源代码,并重新编译。
使用反射: class.forName("person").newInstance(); 而且这个类描述可以写到配置文件中,如 **.xml, 这样如果想实例化其他类,只要修改配置文件的"类描述"就可以了,不需要重新修改代码并编译。在JavaWeb中加载数据库驱动时会用到。
例如:struts中。请求的派发控制。
当请求来到时。struts通过查询配置文件。找到该请求对应的action方法。然后通过反射实例化action。并调用响应method。如果不适用反射,那么你就只能写死到代码里了。
反射一般在框架中使用较多。因为框架要适用更多的情况。对灵活性要求较高。
缺点:
运用反射会使我们的软件的性能降低,复杂度增加,所以还要我们慎重的使用它。
Class cls1 = s.getClass();
Class cls2 = String.class;
Class cls3 = Class.forName("java.lang.String");
if (cls1 == cls2) {
System.out.println("cls1 == cls2");
}
if (cls2 == cls3) {
System.out.println("cls2 == cls3");
}
知识点。Java反射机制主要提供了以下功能:在运行时构造一个类的对象;判断一个类所具有的成员变量和方法;调用一个对象的方法;生成动态代理。反射最大的应用就是框架 主要用途是:通过传递一个字符串值 去调用某一个类的方法。例如根据spec0去调用SpecValue下的setSpce0()方法。 Java.lang.Class和Java.lang.reflect包下的API,用于表示或者处理当前JVM中的类,接口和对象。 Java反射的主要功能: 确定一个对象的类
取出类的modifiers,数据成员,方法,构造器,和超类.
找出某个接口里定义的常量和方法说明.
创建一个类实例,这个实例在运行时刻才有名字(运行时间才生成的对象).
取得和设定对象数据成员的值,如果数据成员名是运行时刻确定的也能做到.
在运行时刻调用动态对象的方法.
创建数组,数组大小和类型在运行时刻才确定,也能更改数组成员的值. Class类是Java反射的基础,Class类表示正在运行的java应用程序中的类和接口。Class只有私有的构造函数。Class类在加载类时由Java虚拟机以及调用类加载器中的 defineClass方法自动创建的。只在内存中存在一份加载类的Class类。
三种方式得到某个Java类的Class类,以java.lang.String为例: 为什么他们三个会==呢?因为他们描述的都是同一个类java.lang.String类。Class类还有很多方法,配合java.lang.reflect包下的一些API可以实现更多的功能。优点:Java的反射机制就是增加程序的灵活性,避免将程序写死到代码里。例如: 实例化一个 person()对象, 不使用反射,需要new person(); 如果想变成实例化其他类,那么必须修改源代码,并重新编译。
使用反射: class.forName("person").newInstance(); 而且这个类描述可以写到配置文件中,如 **.xml, 这样如果想实例化其他类,只要修改配置文件的"类描述"就可以了,不需要重新修改代码并编译。在JavaWeb中加载数据库驱动时会用到。
例如:struts中。请求的派发控制。
当请求来到时。struts通过查询配置文件。找到该请求对应的action方法。然后通过反射实例化action。并调用响应method。如果不适用反射,那么你就只能写死到代码里了。
反射一般在框架中使用较多。因为框架要适用更多的情况。对灵活性要求较高。
缺点:
运用反射会使我们的软件的性能降低,复杂度增加,所以还要我们慎重的使用它。