内置注解:
@Override:重写,用于检查代码格式
@Deprecated:废弃。调用时可以显示注释(建议其他方法)
@FunctionalInterface:函数式接口
@SuppressWarnings:忽略警告信息
元注解:作用在其他注解的注解
@Retention(RetentionPolicy.RUNTIME): 标示注解的持久策略,1、只在代码中,2、编入class,3、RUNTIME ——时间
@Documented:标示注解是否包含在用户文档中
@Target(ElementType.TYPE):
标注注解应用在哪些Java成员中。通过ElementType 枚举类 ——地点
@Inherited:标记这个注解是自动继承的
自定义注解:(注解接口)
每 1 个 Annotation 对象,都会有唯一的 RetentionPolicy 属性;至于 ElementType 属性,则有 1~n 个。
定义格式:@Interface 注解名{ }
1.
定义的注解,自动继承了
java.lang,annotation.Annotation
接口
2.
注解中的每一个(抽象)方法,实际是声明的注解配置参数
方法的名称就是 配置参数的名称
方法的返回值类型,就是配置参数的类型。只能是:基本类型/Class/String/enum
3.
可以通过
default
来声明参数的默认值
4.
如果只有一个参数成员,一般参数名为
value
5.
注解元素必须要有值,我们定义注解元素时,经常使用空字符串、
0
作为默认值。
反射:动态编程,获取类对象,创建对象,得到方法属性,执行方法属性
Demo1.class.getClassLoader()获取类加载器.getResoutceAsStream("config.txt"); //获取配置文件的输入流
有resource root文件夹加载resource文件夹下的配置文件,没有则加载src下的配置文件
得到Class:
获取构造方法Constructor:
用Constructor创建对象:
获取方法Method:
通过newInstance创立的对象执行方法:
获取属性Field:
通过反射获取注解信息:
获取类/属性/方法的所有注解对象:
Annotation[] annotations01 = Class/Field/Method.getAnnotations();
for (Annotation annotation : annotations01) {
System.out.println(annotation);
}
根据类型获取类/属性/方法的注解对象:
注解类型 对象名
= (
注解类型
) c.getAnnotation(
注解类型.class); //注解类型就是注解类名
内省Introspector:针对JavaBean获取get和set方法的API(反射)
Introspector 类 获取
Bean类信息的方法
:
static BeanInfo getBeanInfo(Class cls)
通过传入的类信息, ——得到这个Bean类的封装对象 BeanInfo
BeanInfo类的方法:
PropertyDescriptor[] getPropertyDescriptors():
——获取bean类的 get/set方法 数组 PropertyDescriptor[ ]
PropertyDescriptor类的方法:
1. Method getReadMethod();
——获取PropertyDescriptor的一个get方法
2. Method getWriteMethod();
——获取PropertyDescriptor的一个set方法
3. String getName();
——获取PropertyDescriptor的name
4.Type getPropertyType();
——获取PropertyDescriptor的数据类型
有可能返回null 注意 ,加判断 !