注解
注解Annotation
注解基本知识
-
注解与注释(Comment)相似,都可以为程序做出解释
-
注解可以被其他程序读取(如编译器),注解权限控制为public
-
注解是从jdk1.5开始引进的,之前的版本虽然也可以用,但是不能被其他程序读取
-
注解的使用格式
- @注释名[(参数=参数值)],如@SuppressWarnings(value=“unchecked”)
-
注解的使用范围
- package(包)
- class(类)
- method(方法)
- field(字段)
内置标准注解
-
@Override 表明此方法是重写方法
-
@Deprecated 已废止的,不建议使用的
-
@Supresswarnings 抑制警告
- Supresswarnings 传参数unchecked代表忽略未检查的警告
- @Supresswarnings (“all”)忽略所有警告
-
举例说明
//创建一个测试类 public class Test1 { @Deprecated public static int gettest(){ return 10; } public int gettest1(){ return 1; } public static void main(String[] args) { } } //另外一个类调用 public class Test { //@SuppressWarnings( "all") public static void main(String[] args) { System.out.println(Test1.gettest()); } class T0 extends Test1{ @Override public int gettest1() { return super.gettest1(); } }
在编译器中会有删除线提示:
当我们在方法上面加上@SuppressWarnings( “all”)时,删除线没了:
写个内部类继承Test1,注解Override代表我们的gettest1方法重写了父类方法
元注解(注解的注解)
-
@Target 用于描述注解的使用范围
可以看到@Target的参数类型为ElementType,往下看看ElementType是神马情况:
ElementType是一个枚举类型,其中包括:
** TYPE:包括类、接口、注解和枚举类型
FIELD:字段
METHOD:方法
PARAMETER:参数
CONSTRUCTOR:构造器
LOCAL_VARIABLE:局部变量
ANNOTATION_TYPE:注解类型
PACKAGE:包
TYPE_PARAMETER:参数类型
TYPE_USE:使用类型 -
@Retention 用于描述注解的生命周期,表示什么级别保存该注释信息(SOURCE<CLASS<RUNTIME)
- SOURCE 注解会被编译器抛弃
- CLASS 注解将由类文件保留,但是VM不会在运行时保留
- RUNTIME 注解将由类文件保留,并由VM在运行时保留,所以可以被反射读取
-
@Documented 表示该注解会被Javadoc文档读取
-
@Inherited 表明该注解可以被子类继承
自定义注解
-
格式
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; //元注解 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) //自定义注解Anno public @interface Anno { //注解参数value String value(); //注解参数num int[] num(); //注解参数retent RetentionPolicy retent(); }
当自定义注解只有一个参数时,参数名写为value,在传参时只传参数值即可