反射与内省
1.反射的概念:
反射就是把Java类中的各种成分映射成一个个的Java对象。例如,一个类有:成员变量,方法,构造方法,包等等信息,
利用反射技术可以对一个类进行解剖,把各个组成部分映射成一个个对象。
2.Class类
每个类都有自己的Class对象
提供了获取类信息的相关方法
Class类继承自Object类
3.反射的实质
其实每个类都可以看作是一个对象,他们有共同的属性和行为如成员变量,构造方法,普通方法。
然后我们通过类的信息使用3种方法的到这个类的类对象
4.获取类对象的三种方法
Class clazz1=Person.Class;
Class clazz2=Class.forName(“url”) throw ClassNotFoundException;推荐使用,耦合性低,容易编译通过
Person p=new Person(); Class clazz3=p.getClass();
5.获取构造方法,普通方法,属性以及创建对象的方法
首先获取类对象 Class clazz=Class.forName(“url”);
clazz.getConstractors(); Constrctor c = clazz.getConStractor(String.class…);
实例化 Object o=c.newInstance();
获取这个类的公开方法方法以及从父类继承的公开方法 getMethods()
获取这个类的所有方法包括private修饰的方法 getDeclareMethods()
在使用private修饰符修饰的成员时都要使用setAccessible(true);
…
6.注解
注释:给代码添加说明和解释,注释帮助开发人员理解程序。(Comment)
注解:给代码添加说明,这个说明给程序使用。(Annotation)
从 JDK 5.0 开始,Java 增加了对元数据(MetaData) 的支持, 也就是Annotation(注解)。
三个基本的 Annotation:
@Override:限定重写父类方法, 该注解只能用于方法
@Deprecated:用于表示某个程序元素(类, 方法等)已过时
@SuppressWarnings: 抑制编译器警告.
注解属性的作用:原来写在配置文件中的信息,可以通过注解的属性进行描述。
Annotation的属性声明方式:String name();
属性默认值声明方式:Stringname() default “xxx”;
特殊属性value:如果注解中有一个名称value的属性,那么使用注解时可以省略value=部分,如@ MyAnnotation("xxx")
注解属性的类型可以是:
String类型
基本数据类型
Class类型
枚举类型
注解类型
以上类型的一维数组
- @Retention: 只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留的域,
@Rentention 包含一个 RetentionPolicy 类型的成员变量, 通过这个变量指定域。
8.Java内省机制
Java内省机制,是一种使用反射获取或设置对象属性的一种方式
Introspector内省类 getBeanInfo()
BeanInfo类的信息 getPropertyDescription()
PropertyDescription属性描述符 getReadMethod() getWriteMethod() getName()相当get、set方法和属性名
属性:根据类中的getXxx(带返回值), setXxx(有参数) , isXxx方法(返回值类型boolean类型)规定的。
9.XML语言
上一篇: 工厂模式--简单工厂