一.反射的好处:
- 1. 可以在程序运行过程中,操作这些对象。
- 2. 可以解耦,提高程序的可扩展性。
二.反射获取Class对象的三种方式
- 1.Class.forName("全类名")
- 2.类名.class
- 3.对象.getClass()
三. 反射的方法创建对象和获取与执行方法
1.无参构造
Class class=Class.forName("全类名");
Object object=class.newInstance();
2.有参构造
Class class=Class.forName("全类名");
Constructor constructor= class.getConstructor(Class...构造方法的参数类型);
Object object = constructor.newInstance();
3.获取方法
Method method=class.getMethod(String "方法名",Class...方法的参数类型);
4.执行方法
method.invoke(类对象,...方法的实际参数); //返回的参数类型与方法一致
1.定义注解格式
public @interface 注解名称{
属性列表;
}
2.属性列表格式
- 格式1:数据类型 属性名();
- 格式2:数据类型 属性名() default 默认值;
3.元注解(限制注解的使用位置)
@Target
作用:指明此注解用在哪个位置,如果不写默认是任何地方都可以使用
可选的参数值在枚举类 ElemenetType**中包括:
TYPE: 用在类,接口上
FIELD:用在成员变量上
METHOD: 用在方法上
PARAMETER:用在参数上
CONSTRUCTOR:用在构造方法上
LOCAL_VARIABLE:用在局部变量上
@Retention
作用:定义该注解的生命周期(有效范围)
可选的参数值在枚举类型RetentionPolicy中包括
SOURCE:注解只存在于Java源代码中;
CLASS:注解存在于Java源代码、编译以后的字节码文件中;
RUNTIME:注解存在于Java源代码中、编译以后的字节码文件中、运行时内存中;
4.注解中常用的方法
boolean isAnnotationPresent(注解的类名.class) 判断是否有注解
getAnnotation(注解.class) 获取注解对象