1.注解分类
(1).按运行机制分类
1.源码注解 只在源码中存在 元注解@Retention(生命周期)中为SOURCE
2.编译注解 存在源码和class文件中 @Retention 中为CLASS
3.运行注解 运行阶段起作用,影响运行编辑 @Retention 中为RUNTIME
(2).按来源分类
1.jdk注解
2.第三方注解
3.自定义注解
2.注解使用
1.定义一个注解类
再注解类上添加源注解
@Target 定义注解的作用域 ElementType.
CONSTRUCTOR 构造方法声明
FIELD 字段声明
LOCAL_VARIABLE 局部变量声明
METHOD 方法声明
PACKAGE 包声明
PARAMETER 多线声明
TYPE 类、接口声明
@Retention 定义注解生命周期 RetentionPolicy.
SOURCE 源码注解
CLASS 编译注解
RUNTIME 运行注解
@Inherited 有代表允许子类继承,标识性注解(不存在成员变量的注解)可有可无
@Documented 代表生成java doc文件的时候包含此注解
2.注解类定义
标识性注解:不存在成员变量的注解;
只有一个成员变量的注解,这个成员必须是value,使用是时候可以省略value和等于符号;
成员类型:八大基本类型及String、Class、Annotation、Enumeration等原始类型
注解成员无参数无异常;
成员可以通过 default给定默认值;
3.解析注解
概念:通过反射获取类、函数或成员上的运行注解性息,从而实现动态空值程序的运行逻辑。
步骤:
1.使用类加载器获取需要解析的类
Class c=Class.forName("my.test.Usser"); Usser注解使用类
2.找到类上面的注解,拿到注解实例
boolean isExist=c.isAnnotationPresent(User.class); User.class注解类名,判断类是否存在注解
User user=(User) c.getAnnotation(User.class);
3.通过注解成员获取成员值
(1).按运行机制分类
1.源码注解 只在源码中存在 元注解@Retention(生命周期)中为SOURCE
2.编译注解 存在源码和class文件中 @Retention 中为CLASS
3.运行注解 运行阶段起作用,影响运行编辑 @Retention 中为RUNTIME
(2).按来源分类
1.jdk注解
2.第三方注解
3.自定义注解
2.注解使用
1.定义一个注解类
再注解类上添加源注解
@Target 定义注解的作用域 ElementType.
CONSTRUCTOR 构造方法声明
FIELD 字段声明
LOCAL_VARIABLE 局部变量声明
METHOD 方法声明
PACKAGE 包声明
PARAMETER 多线声明
TYPE 类、接口声明
@Retention 定义注解生命周期 RetentionPolicy.
SOURCE 源码注解
CLASS 编译注解
RUNTIME 运行注解
@Inherited 有代表允许子类继承,标识性注解(不存在成员变量的注解)可有可无
@Documented 代表生成java doc文件的时候包含此注解
2.注解类定义
标识性注解:不存在成员变量的注解;
只有一个成员变量的注解,这个成员必须是value,使用是时候可以省略value和等于符号;
成员类型:八大基本类型及String、Class、Annotation、Enumeration等原始类型
注解成员无参数无异常;
成员可以通过 default给定默认值;
3.解析注解
概念:通过反射获取类、函数或成员上的运行注解性息,从而实现动态空值程序的运行逻辑。
步骤:
1.使用类加载器获取需要解析的类
Class c=Class.forName("my.test.Usser"); Usser注解使用类
2.找到类上面的注解,拿到注解实例
boolean isExist=c.isAnnotationPresent(User.class); User.class注解类名,判断类是否存在注解
User user=(User) c.getAnnotation(User.class);
3.通过注解成员获取成员值
String name=user.name();
package my.excal;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface User {
String name() default "你好";
int age();
}
package my.test;
import my.excal.User;
@User(name="你妹",age=33)
public class Usser {
}
package my.test;
import my.excal.User;
public class Test1 {
public static void main(String[] args) {
try {
Class<?> c=Class.forName("my.test.Usser");
boolean isExist=c.isAnnotationPresent(User.class);
if(isExist){
User user=c.getAnnotation(User.class);
String name=user.name();
Integer age=user.age();
System.out.println(name);
System.out.println(age);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}