Annotation


Annotation:在JDK 1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK 1.5之后称为注释,即:使用注释的方式加入一些程序的信息。java. lang. annotation. Annotation接口是所有的Annotation 都必须实现的接口。

系统内建的Annotation

在这里插入图片描述
在这里插入图片描述

1.@Override

@Overide表示方法覆写的正确性,

class Person{
	public String getInfo(){		// 取得信息
		return "这是一个Person类。" ;
	}
};
class Student extends Person{	// 继承此类
	@Override
	public String getinfo(){	// 覆写方法
		return "这是一个Student类。" ;
	}
};
public class OverrideAnnotationDemo01{
	public static void main(String args[]){
		Person per = new Student() ;
		System.out.println(per.getInfo()) ;	// 输出信息
	}
};

此时,可能存在某种失误,将方法名称编写错误。
在这里插入图片描述
所以使用Override注释就可以保证程序的正确性

2.@Deprecated

使用@Deprecated注释的Annotation 本身是不建议使用的一个操作。

class Demo{
	@Deprecated			// 声明不建议使用的操作
	public String getInfo(){
		return "这是一个Person类。" ;
	}
};
public class DeprecatedAnnotationDemo01{
	public static void main(String args[]){
		Demo d = new Demo() ;
		System.out.println(d.getInfo()) ;
	}
};

以上的程序编译并没有错误,而是出了一个错误的安全警告信息。
注: DeprecatedAnnotationDemo01.java使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。

@Deprecated不但可以声明一个方法,还可以声明一个类

@Deprecated			// 声明不建议使用的操作
class Demo{
	public String getInfo(){
		return "这是一个Person类。" ;
	}
};
public class DeprecatedAnnotationDemo02{
	public static void main(String args[]){
		Demo d = new Demo() ;
		System.out.println(d.getInfo()) ;
	}
};

3.@SuppressWarnings

用于压制警告信息。
以之前的泛型操作为例,在泛型中如果没有指定泛型类型,则使用时肯定出现安全警告。

class Demo<T>{
	private T var ;
	public T getVar(){
		return this.var ;
	}
	public void setVar(T var){
		this.var = var ;
	}
};
public class SuppressWarningsAnnotationDemo01{
	@SuppressWarnings("unchecked")
	public static void main(String args[]){
		Demo d = new Demo() ;
		d.setVar("张三") ;
		System.out.println("内容:" + d.getVar()) ;
	}
};

出现安全经过信息
注: SuppressWarningsAnnotationDemo01.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。

此时就可以使用SuppressWarnings 这个Annontation将这种警告信息进行压制。
在这里插入图片描述
以上只是压制了一个警告信息,当然,也可以同时压制多个警告信息,只需要以数组的形式出现即可。。
在这里插入图片描述
在这里插入图片描述
通过刚才发现SuppressWarnings注释可以发现里面是使用value 的字符串数组接收的,所以,在传入注释参数的时候也可以明确的指出要传给那个变量接收。。
在这里插入图片描述

自定义的Annotation

在这里插入图片描述
定义一个简单的Annotation
在这里插入图片描述
之后就可以直接在程序中使用“@Annotation名称”的格式。
在这里插入图片描述
此时就表示在Demo类上使用Annotation。

在这里插入图片描述
在使用的时候就必须清楚的指名,变量的内容。
在这里插入图片描述
或者也可以使用明确的标记,表示内容赋给哪个参数
在这里插入图片描述
以上的参数是要赋给value属性的。。

既然可以设置一个参数,则也就可以同时设置多个参数。
在这里插入图片描述
此Annotation在使用的时候需要设置两个参数,一个是key,另外一个是value。
在这里插入图片描述

也可以数组一个数组进去
在这里插入图片描述
接收的内容本身是一个数组类型, 要传递数组,类似与之前的SuppressWarmings
在这里插入图片描述
以上所定义的全部的Anotation 中有一个特点,所有的参数内容需要在使用注释的时候设置上去,
那么也可以为一个参数设置默认的内容,在声明的时候使用default 即可。
在这里插入图片描述
当在去使用此Annotation的时候就可以不用设置内容。
在这里插入图片描述
没有设置内容,编译也不会出现任何的错误

在操作中,对于一个Annotation 而言有时候会固定其取值范围,只能取固定的几个值,那么这个时候实际上就需要依靠枚举。
在这里插入图片描述
以后的Annotation的取值,只能从这三个值中取走。
在这里插入图片描述
此时以上的Annotation 已经设置好了一个枚举中的内容作为默认值,那么外部使用此Annotation 的时候也需要从枚举固定内容
在这里插入图片描述

Retention和RetentionPolicy

在这里插入图片描述
在这里插入图片描述
在三个范围中,最需要的关心的就是RUNTIME范围,因为在执行的时候起作用。使用Rentention指定一个Annotation的范围,范围为RUNTIME范围。
在这里插入图片描述
此Annotation可以在运行时起作用,而且在以后要讲解反射与Annotation的操作中,也必须使用此种范围
在这里插入图片描述

反射与Annotation

一个Annotation 如果要是想让其变得有意义,则必须结合反射机制取得Annotation 中设置的全部内容
在这里插入图片描述
在这里插入图片描述
同时设置了三个Annotation, 那么此时注意,只有Depreacted的Annotation的定义范围是RUNTIME范围,所以此时通过反射的话只能取得一个。 。
在这里插入图片描述
此时,已经取得了一个Annotation。
以上的操作代码实际上是通过三个系统内建的Annotation完成的,那么也可以自定义一个Annotation.
在这里插入图片描述
以上的Annotation范围是在运行时依然有效,下面定义-一个类使用此Annotation.
在这里插入图片描述
下面使用反射取得指定的Annotation, 因为现在唯一设置内容的就是 MyDefault AnnotationRelfect.
在这里插入图片描述

深入理解Annotation

之前定义的Annotation,如果没有明确的说明可以在任意的位置上使用。
在这里插入图片描述
如果现在需要指定其使用的范围的话,则就必须使用@Target 注释。

@Targe

在这里插入图片描述
在这里插入图片描述
现在定义一个Annotation,只能在类上使用,类型是TYPE
在这里插入图片描述
此时在SimpleBean的类及方法的声明上使用此Annotation
在这里插入图片描述
编译错误,因为声明的是使用到类上…
如果现在希望一个Annotation 可以在类及方法上同时使用的话,则必须设置多个范围:
在这里插入图片描述

@Documented

@Documented可以用在任何的Annotation. 上 使用。所有的Annotation 默认情况下都是使用@Documented进行注释的,而且在生成java doc 的时候可以通过@Documented设置-些说明信息。
在这里插入图片描述
成功之后,在使用此Annotation的时候就可以增加一些信息上去。
在这里插入图片描述
之后通过java doc 命令,生成java的doc文档…
在这里插入图片描述

@Inherited

@Inherited注释,此注释表示一个 Annotation是否可以被继承下来。
在这里插入图片描述
定义一个父类,在父类上使用此Annotation
在这里插入图片描述
定义子类,继承父类
在这里插入图片描述
按照所解释的,使用Inherited 声明的Annotation 是可以被子类继承下来的。
在这里插入图片描述
可以去得Annotation的内容,所以验证成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值