注解的概念
官方:java注解用于为java代码提供元数据,作为元数据,注解不直接影响你的代码执行
但也有一些类型的注解实际上可以用于着一目的,java注解是从java5开始添加到java的
我理解:我感觉注解就像是一个标记,表名了被标记的东西是一个意思
注解可以标记任何地方,但是我们还是可以使用一些手段进行限制
注解分为两大类:普通注解、元注解
普通注解就是用来注解:方法、属性、类的
元注解则是用来注解:普通注解
普通注解
注解声明
public @interface name{
}
注解使用:(就是@注解类名),可以写到(方法、属性、类)
@name
public class a{ }
注意:这个注解并没有多大的作用,顶多算是一个标记
如果要有作用的话,就需要使用元注解
常用注解
@Override
表示一个方法的声明是否重写了父类的方法,但是只能出现在方法之上
@Deprecated
这个注解是用来表示过时的元素
@SuppressWrnings
表示屏蔽jvm提示的异常信息
注解属性
注解的属性也叫做成员变量。注解只有成员变量,没有方法
注解的成员变量在注解的定义中以“无参的方法”形式来申明,
语法
声明语法
类型 名字() [ default 值 ];
注意:必须声明在注解类当中
类型限制:8种基本数据类型、类、接口、注解、他们的数组
多个之间使用分号隔开,
声明数组的形式
类型 []名字();
注意在赋值的时候只能是数组,单个值不需要进行数组化
使用语法
@注解名(名字=值,……)
被注解的(方法,类,属性)
注意
如果注解当中只有一个value属性时,可以直接在括号里面填写值,不需要指定名字
在使用的时候,有属性的注解后面必须加上“()”括号,没有则不需要
在使用的时候,必须全部进行赋值,除了赋了默认值的
代码示例
注解类
//元注解
@Retention(RetentionPolicy.CLASS )//注解生存的时长
@Documented
//没有属性的注解
public @interface Annotations {
}
//有属性的注解
@Target(ElementType.CONSTRUCTOR)//指定注解运用的地方
@interface Annotation2{
String name() default "1" ;//声明单个属性,赋默认值
String []age();//声明数组的形式
}
注解测试类
@Annotations//没有属性的注解类
public class AnnotationsTask {
@Annotations//注解方法
public void a () {
@Annotations//注解局部变量
String name="";
if(true) {
}
}
@Annotations//注解成员变量
public String name;
@Annotation2(name="",age = { "" })//赋值数组必须赋数组
public AnnotationsTask() {
}
}
元注解
元注解就是可以使用到普通注解上面的注解
元注解分为
@Retention、@Documented、@Target、@Inherited、@Repeatable
@Retention()括号取值
RetentionPolicy枚举类型当中的其中一个
SOURCE:注解只在源码阶段保留
CLASS:注解只被保留在编译进行的时候
RUNTIME:注解可以保留在程序运行的时候,可以通过程序来获取注解信息
@Documented
这个不需要值,它的作用是能够将注解信息包含到javadoc当中去
@Target:表示注解能够注解的位置
Target是目标的意思,@Target指定了注解运用的地方
就是注解这个东西是可以写到任何地方的
那么我们就可以使用@Target,这个注解来进行限制
取值
ElementType是一个枚举,以下的都是枚举值
ANNOTATION_TYPE:可以给一个注解进行注解
CONSTRUCTIOR:可以给构造方法进行注解
FIELD:可以给属性进行注解
LOCAL_VARIABLE:可以给局部变量进行注解
METHOD:可以给方法进行注解
PACKAGE:可以给一个包进行注解
PARAMETER:可以给一个方法内的参数进行注解
TYPE:可以给一个类型进行注解,例如:类、接口、枚举
@Inherited:子类继承父类的注解
inherited是继承的意思,而是说一个父类被@Inherited注解过的注解进行主机的话
那么如果子类没有被任何注解应用的话,这个子类就继承了父类的注解
@Repeatable:可重复
Repeatable是可重复的意思,@Repeatable是java 1.8才加进来的
它里面必须要有一个 value 的属性,属性类型是一个被 @Repeatable 注解过的注解数组