Java学习笔记(6)
反射
Java反射机制是在运行状态中对于任意一个类,都能知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法和属性。
Java中的java.lang.reflect 包提供了对反射的支持,该包下的三个类分别用来存储类的构造方法、成员变量和方法
- Constructor:提供关于类的单个构造方法的信息以及对它的访问权限
- Field:提供有关类和接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类字段或者实例字段
- Method:提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。所反映的方法可能是类方法或实例方法
通过反射可访问的主要描述信息
组成部分 | 访问方法 | 返回值类型 | 说明 |
---|---|---|---|
包路径 | getPackage() | Package对象 | 获得该类的存放路径 |
类名称 | getName() | String对象 | 获得该类名称 |
继承类 | getSuperClass() | Class对象 | 获得该类继承的类 |
实现接口 | getInterfaces() | Class型数组 | 获得该类实现的接口 |
构造方法 | getConstructors() | Constructor型数组 | 获得所有权限为public的构造方法 |
构造方法 | getConstructors(Class<?>…parameterTypes) | Constructor对象 | 获得权限为public的指定构造方法 |
构造方法 | getDeclaredConstructors() | Constructor型数组 | 获得所有构造方法,按声明顺序返回 |
构造方法 | getDeclaredConstructors(Class<?>…parameterTypes) | Constructor对象 | 获得指定构造方法 |
方法 | getMethods() | Method型数组 | 获得所有权限为public的方法 |
方法 | getMethods(String name,Class<?>…parameterTypes) | Method对象 | 获得权限为public 的指定方法 |
方法 | getDeclaredMethods() | Method型数组 | 获得所有方法,按照声明顺序返回 |
方法 | getDeclaredMethods(String name,Class<?>…parameterTypes) | Method对象 | 获得指定方法 |
成员变量 | getFields() | Field型数组 | 获得所有权限为public的成员变量 |
成员变量 | getFields(String name) | FIeld对象 | 获得权限为public 的指定成员变量 |
成员变量 | getDeclaredFields() | Field型数组 | 获得所有成员变量,按声明顺序返回 |
成员变量 | getDeclaredFields(String name) | FIeld对象 | 获得指定成员变量 |
内部类 | getClasses() | Class型数组 | 获得所有权限为public的内部类 |
内部类 | getDeclaredClasses() | Class型数组 | 获得所有内部类 |
内部类的声明类 | getDeclaringClass() | Class对象 | 如果该类为内部类,则返回他的成员类,否则返回null |
Annotation注解
Annotation是java.lang包下的一个接口,它是代码的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应处理,它可用于类,构造方法、成员变量、方法、参数等的声明中
内置注解
- @Override:限定重写父类方法
- @Deprecated:标示已过时
- @SuppressWarnings:抑制编译器警告
自定义注解
步骤如下:
- 自定义注解
- 使用元注解对自定义注解进行设置
- 反射注解