注解
注解和注释的区别
注解和注释都是给程序员看的,但注解可以给程序看,甚至可以被其他程序读取(通过反射)
- 内置注解
- @Override:只能修饰方法,表示这个方法将要重写父类中的方法
- @Deprecated:可以修饰类、方法、属性,表示不鼓励程序员使用这样的元素
- @SuppressWarnings:抑制编译警告,需要参数,一般为all
- 元注解:注解其他注解
- @Target:描述注解的使用范围
- @Retention:描述注解的生命周期(一般自定义用RUNTIME)
- @Document:说明该注释将被包含在javadoc文档中
- @Inherited:说明子类可以继承父类的中该注解
- 自定义注解
public @interface 注解名{定义内容} - 解析注解:获取注解中定义的属性值
- 获取注解定义的位置的对象(Class、Method、Field)
- 获取指定的注解
getAnnotation(Class) - 调用注解中的抽象方法获取配置的属性值
反射
动态语言是指在程序运行的时候可以改变程序结构,反射是Java被视为动态语言的关键。
- 获取class对象的方式
Class.forName("全类名")类名.class对象.getClass()- 同一个字节码文件在一次程序运行过程中,在会被加载到内存中一次,因此无论通过哪种方式获取的class对象都是同一个
- class对象功能
- 获取成员变量
Field[] getFields():获取所有public修饰的成员变量Field getField(String name):获取指定名称的public修饰的成员变量Field[] getDeclaredFields():获取所有修饰符的成员变量Field getDeclaredField(String name)获取指定名称的所有修饰符的成员变量
- 获取构造方法(同上)
- 获取成员方法(同上)
- 获取类名
String getName()
- 获取成员变量
- Field对象的相关操作(其他类似)
- 设置值
void set(Object object, Object value) - 获取值
get(Object obj) - 忽略权限修饰符的安全检查
setAccessible(true)暴力反射
- 设置值