Java5版本之后可以在源码中嵌入一些补充信息,这些补充信息即为“注解” 。
注解可用“元数据”描述,是一种描述数据的数据。
注解以@符号开头(方法重写的@Override),同Class和Interface一样,注解也属于一种类型。
注解不改变程序的运行结果,也不影响程序运行的性能。有些注解可以在编译时给用户提示或警告,有些注解可以在运行时读写字节码文件信息。
注解常见的作用有以下几种:
@Override注解用来指定方法重写,只能修饰方法且只能用于方法重写,不可修饰其他元素。
下例中第一个toString为方法重载,第二个为方法重写
class Test{ public String toString(String s) { return s; } @Override public String toString() { return super.toString(); }
}
@Deprecated可以用来注解类、接口、成员方法和成员变量等,表示某个元素已过时。其他程序使用已过时元素时编译器会给出警告。
Java9为@Depercated注解增加了两个属性forRemoval和since
eg.@Deprecated(since = "1.2", forRemoval = true)
使用的已过时元素会被画上删除线test.toString()
@SuppressWarnings 注解指示被该注解修饰的程序元素(以及该程序元素中的所有子元素)取消显示指定的编译器警告,且会一直作用于该程序元素的所有子元素。
主要作用在于取消一些编译器产生的警告对代码左侧行列的遮挡(影响断点调试),需配合关键字使用。
eg.@SuppressWarnings({"deprecation"})
忽略过时警告
不太理解;详见: https://blog.csdn.net/qq_40341361/article/details/80433006
注:@SafeVarargs注解不适用于非 static 或非 final 声明的方法,对于未声明为 static 或 final 的方法,如果要抑制 unchecked 警告,可以使用 @SuppressWarnings 注解。
@FunctionalInterface 就是用来指定某个接口必须是函数式接口,所以 @FunInterface 只能修饰接口,不能修饰其它程序元素。
Lambda 表达式中,如果接口中只有一个抽象方法(可以包含多个默认方法或多个 static 方法),那么该接口就是函数式接口。