(一)注解
注解:在源代码中嵌入一些补充信息,这种补充信息称为注解
(二)注解与注释的区别:
注解虽然与注释一样,对代码有着解释作用,但是注解在程序在编译的时候,会被忽略掉。而注解可以被系统读取。
注解的分类:
- 基本注解
- 元注解
无论是哪一种注解,本质上都一种数据类型,是一种接口类型。到Java 8为止Java SE提供11种内置注 解。其中有5是基本注解,它们来自于java.lang包。有6个是元注解 (Meta?Annotation),它们来自于 java.lang.annotation包。
(三)、基本注解
基本注解包括:
- @Override:只能用于方法,如重写父类的方法
- @Deprecated:用来指示接口已经过时了
- @SuppressWarnings:用来抑制编译器警告
- @SafeVarargs:抑制编译器警告
- @FunctionalInterface:声明接口是函数式接口
具体案例如下
1、@Override:
基础Runnable接口,用于创造线程,需要重写run方法,@Override就是提示,run方法是继承于父类方法
2、@Deprecated:用来指示接口已经过时了
例如,Date对象的getDate方法已经过时了。进入函数里面,看到有@Deprecated注解
3、 @SuppressWarnings:用来抑制编译器警告
SuppressWarnings({ "deprecation" })注解中的deprecation 表示要抑制接口已经过时了,其他参数如下:
4、@SafeVarargs:抑制编译器警告
5、@FunctionalInterface:声明接口是函数式接口
(四)、元注解:
元注解是用来注释其他注解的注解,
- @Documented:注解可以修饰代码元素
- @Target:解用来指定一个新注解的适用目标
- @Retention:解用来指定一个新注解的有效范围
- @Inherited:用来指定一个新注解可以被继承
- @Repeatable:允许在相同的程序元素中重复注释
- @Native:可以被本地代码引用
(1)@Documented:注解可以修饰代码元素(类、接口、 成员变量和成员方法等),javadoc等工具可以提取这些注解信息
(2)@Target:解用来指定一个新注解的适用目标
@Target注解用来指定一个新注解的适用目标。@Target注解有一个成员(value)用来设置适用目标,value是java.lang.annotation.ElementType枚举类型的数组,ElementType描述Java程序元素 类型,它有10个枚举常量:
(3)@Retention:解用来指定一个新注解的有效范围
@Retention注解用来指定一个新注解的有效范围,@Retention注解有一个成员(value)用来设 置保留策略,value是java.lang.annotation.RetentionPolicy枚举类型,RetentionPolicy描述注解保留 策略,它有3个枚举常量
(4)@Inherited:用来指定一个新注解可以被继承
@Inherited注解用来指定一个新注解可以被继承。假定一个类A被该新注解修饰,那么这个A类 的子类会继承该新注解。
(5)@Repeatable:允许在相同的程序元素中重复注释
@Repeatable注解是Java 8新增加的,它允许在相同的程序元素中重复注释,可重复的注释必须 使用@Repeatable进行注释。
(6)@Native:可以被本地代码引用
@Native注解一个成员变量,指示这个变量可以被本地代码引用。常常被代码生成工具使用
(五)、自定义注解:Annotation
1、声明:@interface关键字
public @interface 注解名 {
//
}
自己创建的注解:
利用元注解Target,value是java.lang.annotation.ElementType枚举类型的数组,采用METHOD
package one;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target(value = ElementType.METHOD)
public @interface MyAnnotation {
}
使用:新建Student类,在类中使用注解
package one;
public class Student {
public String name;
@MyAnnotation
public void Say() {
System.out.println("大家好");
}
}
结果,在Target中,ElementType.METHOD只能用于方法中,结果如图,当用于方法中,无报错,当用于属性,报错