欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

反射与内省

程序员文章站 2024-01-20 16:47:52
...

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类型
枚举类型
注解类型
以上类型的一维数组
  1. @Retention: 只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留的域,
    @Rentention 包含一个 RetentionPolicy 类型的成员变量, 通过这个变量指定域。

8.Java内省机制
Java内省机制,是一种使用反射获取或设置对象属性的一种方式
Introspector内省类 getBeanInfo()
BeanInfo类的信息 getPropertyDescription()
PropertyDescription属性描述符 getReadMethod() getWriteMethod() getName()相当get、set方法和属性名
属性:根据类中的getXxx(带返回值), setXxx(有参数) , isXxx方法(返回值类型boolean类型)规定的。

9.XML语言