Java注解与反射
Java注解与反射
注解Annotation
- 从JDK5.0开始引入
作用
- 不是程序本身,可以对程序作出解释
- 可以被其他程序(如:编译器)读取
格式
- @注释名(参数)
使用方式
- 可以附加在package、class、method、field等上
- 通过反射机制编程实现对这些元数据的访问
内置注解
- @Override:重写
- @Deprecated:不鼓励使用
- @SuppressWarnings:通过添加参数抑制编译时的警告
元注解
负责注解其他注解
- @Target:描述注解的适用范围
- @Retention:描述需要在什么级别保存该注释信息,即生命周期
- (SOURSE < CLASS < RUNTIME)
- @Document:说明该注解将被包含在javadoc中
- @Inherited:说明子类可以继承父类中的该注解
自定义注解
- 使用@interface自定义注解
- 其中的每一个方法实际上是声明了一个配置参数
- 方法的名称就是参数的名称
- 返回值类型就是参数的类型
- 可以通过default声明参数的默认值
- 如果只有一个参数,一般为value
- 注解元素必须要有值,定义时使用空字符串或0作为默认值
反射Reflection
-
反射机制允许程序在执行期间获取任何类的内部信息,并能直接操作任意对象的内部属性及方法
-
Class c = Class.forName("java.lang.String");
-
-
反射方式通过实例化对象的getClass()方法,得到完整的"包类"名称
功能
- 在运行时判断任意一个对象所属的类
- 在运行时构造任意一个类的对象
- 在运行时判断任意一个类所具有的成员变量和方法
- 在运行时获取泛型信息
- 在运行时调用任意一个对象的成员变量和方法
- 在运行时处理注解
- 生成动态代理
- ......
Class类常用方法
- static ClassforName(String name)
- Object newInstance()
- getName()
- Class getSuperClass()
- Class[] getInterfaces()
- ClassLoader getClassLoader()
- Constructor[] getConstructors()
- Method getMethed(String name, Class.. T)
- Field[] getDeclaredFields()
获取Class实例的方法
- 类的class属性
- 实例的getClass()方法
- Class.forName("...")
- 内置基本数据类型的包装类.TYPE
- 利用ClassLoader
安全检查
- setAccessible
- 可以操作private属性、方法等

浙公网安备 33010602011771号