注解和反射
1、注解Annotation
1.1、@Document注解
详细可以查看这篇博客:@Document元注解的使用 - 春晨 - 博客园 (cnblogs.com)
作者的简单解释为:在类上面加了@Document注解,在使用JavaDoc命令生成说明文档时,相关注解内容也会加载进去,否则不会加载进去。
1.2、@Target注解
| 枚举变量 | 类型 |
|---|---|
| ElementType.TYPE | 针对类、接口 |
| ElementType.FILED | 针对字段、成员变量 |
| ElementType.METHOD | 针对方法 |
| ElementType.PARAMETER | 针对方法参数 |
| ElementType.PACKAGE | 针对包 |
| ElementType.ANNOTATION_TYPE | 针对注解 |
1.3、Retention指定注解的保留域
RetentionPolicy
| 类型 | 说明 |
|---|---|
| RetentionPolicy.SOURCE | 源代码级别,由编译器处理,处理之后就不再保留 |
| RetentionPolicy.CLASS | 注解信息保留到类对应的class文件中 |
| RetentionPolicy.RUNTIME | 由JVM读取,运行时使用 |
1.4、代码展示:
InitMethod方法注解
import java.lang.annotation.*;
//@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface InitMethod {
}
InitDemo类
public class InitDemo {
@InitMethod
public void func(){
System.out.println("func....");
}
@InitMethod
public void test01(){
System.out.println("test....");
}
}
测试类
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class TestMain {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
Class<?> cls = Class.forName("com.bubaiwantong.bilibili.InitDemo");
Method[] methods = cls.getMethods();
for (Method method : methods) {
boolean isAnnotation = method.isAnnotationPresent(InitMethod.class);
System.out.println(method.getName() + " :" +isAnnotation);
if(isAnnotation){
method.invoke(cls.getConstructor(null).newInstance(null), null);
}
}
}
}
2、反射
2.1、Class类
student类
public class Student {
private String name;
}
测试类
public class TestClass {
public static void main(String[] args) throws ClassNotFoundException {
// 通过静态属性 类.class获得
Class cls1 = Student.class;
System.out.println(cls1.hashCode());
// 通过对象获得Class对象
Student student = new Student();
Class cls2 = student.getClass();
System.out.println(cls2.hashCode());
// 通过包名获得Class对象
Class<?> cls3 = Class.forName("com.bubaiwantong.reflection.Student");
System.out.println(cls3.hashCode());
}
}