注解

jdk中三种常见的注解:(注解与类、接口平级存在)
  1. Override:用于描述方法重写,描述该方法是从父类继承的
  2. SuppressWarnings:压制警告的意思
  3. Deprecated:用于描述方法过期了
注解属性的类型可以是哪些?
  1. 基本数据类型都可以:byte、short、int、long、float、double、char、boolean
  2. String
  3. 注解类型
  4. Class类型
  5. 枚举类型
  6. 以上类型的一维数组
@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation02 {
	String str();
	int num() default 10;
	MyAnnotation01 anno();
	Class clazz();
	Color color();
	String[] value();
}
使用注解

如果使用的那个注解有注解属性,那么使用的时候就要为这些注解属性赋值。

@MyAnnotation02(anno = @MyAnnotation01, clazz = TestAnno03.class, color = Color.GREEN, str = "qwe", value = { "asd" })
public class TestAnno03 {
	@MyAnnotation03(value = "qwe")
	public String name = "张三";
	
	@MyAnnotation03(value = "qwe")
	public TestAnno03() {
	}
	
	@MyAnnotation03(value = "qwe")
	@MyAnnotation01
	public void fn1(){
		@MyAnnotation03(value = "qwe")
		int num = 20;
	}
}
元注解就是定义在注解上的注解
  • @ Target:表示该注解能使用在什么东西上面

    • 如果取值为:METHOD表示可以用在方法上,TYPE表示可以用在类、接口、注解、枚举上
    • LOCAL_VARIABLE表示可以用在局部变量上,
    • FIELD表示可以用在成员变量上
    • CONSTRUCTOR表示能够用在构造函数上
  • @ Retention:表示该注解保留到什么阶段

    • SOURCE:源码阶段
    • CLASS:编译阶段
    • RUNTIME:运行阶段
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = { ElementType.METHOD,ElementType.TYPE,ElementType.LOCAL_VARIABLE,ElementType.FIELD,ElementType.CONSTRUCTOR })
public @interface MyAnnotation03 {
	String value();
}
解析注解
  • 获取TestAnno03类上的所有注解 -> Annotation[]
// 获取该类字节码文件对象,Class类实现了AnnotatedElement接口,所以就有该接口的的那四个方法
Class<?> clazz = Class.forName("com.itheima.annotation.meta.TestAnno03");
Annotation[] annotations = clazz.getAnnotations();
  • 判断name成员变量上有没有@MyAnnotation03注解 -> boolean
// 获取字节码文件对象
Class<?> clazz = Class.forName("com.itheima.annotation.meta.TestAnno03");
// 获取所有的字段
Field field = clazz.getField("name");
boolean flag = field.isAnnotationPresent(MyAnnotation03.class);
System.out.println(flag);
  • 获取fn1方法上的MyAnnotation01注解的对象
Class<?> clazz = Class.forName("com.itheima.annotation.meta.TestAnno03");
//获取fn1方法
Method method = clazz.getMethod("fn1");
		
MyAnnotation01 annotation = method.getAnnotation(MyAnnotation01.class);
System.out.println(annotation);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值