是什么?
- 是一个特殊标记,java程序能在源码中,字节码中或运行时获取注解中的值。
- Java编程思想 注解被称为元数据 为我们代码中添加信息提供了一种形式化的方法,我们可以在稍后的某个时刻(SOURCE,CLASS,RUNTIME)非常方便的使用这些数据。
为什么会有注解,注解解决了什么问题?
- 元数据与源代码文件结合在一起,以代替代配置文件。如像servlet,配置和代码是分开的,在Springmvc可以看见Servlet的配置文件已经不存在了,转为@RequestMapping,@PostMapping等注解了。
注解的使用
常见注解
@Depacated 标记某个方法已经过时
@Override 标记某个子类中方法覆盖了父类的方法
@SuppressWarning("uncheck")
- 告诉编译器忽略指定的警告,不用在编译完成后出现警告信息。(抑制编译警告)
- 内部参数不同,忽略的警告不同。
- 例如 注: TestSafeVarargsAnnotation.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
- @SuppressWarnings("unused")是用来忽略未使用的警告的,比如你定义了一个变量,但- - 没有使用它,就会有unused警告,如果添加在该注解就不再显示这个警告
- @SuppressWarnings("serial")是用来忽略未定义UID的警告。
- @SuppressWarnings("all")是用来忽略所有类型的警告。
- @SuppressWarnings(value={"unchecked", "serial"})忽略多类型的警告
@SafeVaragrs
- 在声明具有模糊类型(比如:泛型)的可变参数的构造函数或方法时,Java编译器会报unchecked警告。鉴于这些情况,如果程序员断定声明的构造函数和方法的主体不会对其varargs参数执行潜在的不安全的操作,可使用@SafeVarargs进行标记,这样的话,Java编译器就不会报unchecked警告。
- 开发人员必须确保这个方法的实现中对泛型类型参数的处理不会引发类型安全问题
@FunctionalInterface 声明函数式接口
注解组成
- 1.使用@Interface修饰---->非常像一个接口
- 2.String【注解元素】 value() default = “”;------->非常像接口的方法,只不过这个方法可以有默认返回值
数据元素可以包含的类型
- Java基本数据类型
- String
- 数组
- Class
- 枚举
- 注解
JDK元注解
作用?
组成?
- @Retention 指定注解的保留时间<SOURCE,CLASS,RUNTIME>
- @Target 指定注解的作用对象<TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,ANNOTATION_TYPE,PACKAGE>
- @Javadoc 指定被Javadoc工具提取文档
- @Inherited 被修饰的注解具有继承性。(注解不具有继承性,这句话的正确理解是父类中如果被某个Annotation修饰,则当该类被继承的使用自动带有父类中的注解)
自定义注解
1.声明一个注解类 @Interface
2.声明注解类的存在期间 @Rentention 指定 RetentionPolicy
3.声明注解的作用范围 @Target ElementType.ANNOTATION_TYPE
4.声明注解元素 方法
5.使用注解
6.声明注解的处理类
常见的注解应用
- 常见的注解应用一般在RUNTIME中通过反射通过反射获取方法区中的类类型对象,通过getField(),getMethod(),getAnnotation()等方法获取到注解上的注解元素进行对应的处理。
注解在编译器的作用?APT ANNOTATION PROCESS TOOL
下一篇文章中我会写一下在Java中如何使用APT的。