注解
注解 ( Annotation ) 可以增强我们的java代码,同时利用反射技术可以扩充实现很多功能。它们被广泛应用于三大框架底层。传统我们通过xml文本文件声明方式,而现在最主流的开发都是基于注解方式,代码量少,框架可以根据注解去自动生成很多代码,从而减少代码量,程序更易读。例如最火爆的SpringBoot就完全基于注解技术实现。
注解的出现优化了程序的编程,减少了代码的编写。注解Annotation的标志是@ ,每个注解都有不同的功能。
注解分类
分为JDK自带注解, 元注解 和 自定义注解 (常用注解背景为深色)
JDK自带注解
@Override
重写方法注解 (常用)@Deprecated
去除已过时横线@SuppressWarnings(“deprecation”)
忽略警告woring@SafeVarargs
jdk1.7出现,堆污染,不常用@FunctionallInterface
jdk1.8出现,配合函数式编程拉姆达表达式,不常用
元注解
-
@Target
:用来描述注解的存在位置。他的值被维护在了ElementType.class
中。ElementType是一个枚举类参数(可传入多个):
参数 描述 ElementType.TYPE 应用于类的元素 ElementType.METHOD 应用于方法级 ElementType.FIELD 应用于字段或属性 ElementType.ANNOTATION_TYPE 应用于注解上 ElementType.CONSTRUCTOR 应用于构造方法 ElementType.LOCAL_VARIABLE 应用于局部变量 ElementType.PACKAGE 应用于包声明 ElementType.PARAMETER 应用于方法的参数 -
@Retention
:用来描述注解的生命周期。值被维护在了RetentionPolicy.class
中参数(只能传入一个):
参数 说明 SOURCE 在源文件中有效(即源文件保留 CLASS 在class文件中有效(即class保留) RUNTIME 在运行时有效(即运行时保留) -
@Inherited
允许子注解继承 -
@Documented
生成javadoc时会包含注解,不常用 -
@Repeatable
注解为可重复类型注解,可以在同一个地方多次使用,不常用
自定义注解
定义格式:
@interface 注解名 {
// 定义注解属性等...
}
属性:
例如自定义注解体中写入 String name();
或者 int age();
,
也可以设置默认值: String name() default "jack";
如果属性的名称是value
则使用注解的时候可以不写属性名
示例代码:
// 自定义注解 : @interface 注解名
// @Target指定注解可以出现的位置
@Target({ElementType.TYPE, ElementType.FIELD}) // 类上和属性上
// @Retention 指定注解声明周期
@Retention(RetentionPolicy.SOURCE) // 源码的时候有效
@interface Test {
// 给注解加功能
String name();
// 属性设置默认值
int age() default 22;
}
// 使用注解
@Test(name = "HelloTest")
class HelloTest {
@Test(name = "HelloTest")
String name;
// @Test 不能在这里使用
public void test() {
System.out.println("test");
}
}