注解(Annotation)
1、注解的作用
-对程序做出解释,但不是程序的本身。(与注释相似)
-可以被其他程序读取。(可以参与反射的使用)
2、注解的格式
注解以"@注解名"在代码中存在,有些注解也可以添加参数值,例如:@Override 是没有参数值,表示是重写;@SuppressWarnings(value = {“1”}) 是有参数值的,表示是压制警告信息的出现
3、注解的使用范围
可以使用在package(包),class(类),method(方法),field(字段)等上面,可以视为给他们添加了一些辅助信息,我们也可通反射机制对这些元数据进行访问。
常见内置注解
(1)@Override:定义在java.lang.Override里,只能用于方法上,表示该方法声明打算重写父类中的另一个方法。
(2)@Deprecated:定义在java.lang.Deprecated里,可以用于方法、属性、类上,表示不鼓励程序员使用该元素(该元素已过时),因为它可能会存在危险或者存在更好的选择。
(方法上有该横线代表被@Deprecated修饰)
(3)@SuppressWarnings:定义在java.lang.SuppressWarnings里,可以用于大部分地方,表示抑制编译时的警告信息
·该注解必须要添加一个参数才能正常使用
元注解
1、作用
负责注解其他注解,java定义了4个标准的meta-annotation类型,它们用来对其他的注解进行说明。
2、类型
可以在java.lang.annotation包中找到
需要设置参数
-@Target:用于描述注解的使用范围(即可在什么地方被使用)
(@Target中设置了哪些参数,就能在哪个地方进行使用)
*Type(类型),FIELD(字段),METHOD(方法),PARAMETER(参数),CONSTRUCTOR(构造器),LOCAL_VARIABLE(局部变量),ANNOTATION_TYPE(注释类型),PACKAGE(包),TYPE_PARAMETER(参数类型,1.8之后)
-@Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期
*SOURCE(源码级别)<CLASS(类级别)<RUNTIME(运行时级别)
无参数
-@Documented:说明该注解包含将包含在javadoc中
-@Inherited:说明子类可以继承父类中的该注解
自定义注解
使用@interface自定义注解,会自动继承java.lang.annotation.Annotation接口
(1)语法:
public @interface 注解名{内容}
(2)声明参数:
数据类型 参数名(); //这是个变量,并不是方法
(3)返回值类型(参数类型)
基本数据类型,Class,String,enum,数组
(4)默认值
通过default设置,如果参数设置了默认值,使用注解时就不需要显示赋值了,参数没有默认值则必须显示赋值(多个值以逗号隔开)
(5)如果只有一个参数成员,一般参数名为value(可以直接进行赋值,不需要写参数名)