Java基础-注解

注解

注解(Annotation)是从JDK1.5开始引入的新技术。

注解的作用:

  • 注解不是程序本身,但是它能对程序作出解释(可以理解类似于注释)。
  • 注解可以被其他程序读取,比如可以被编译器读取。
  • 注解可以检查和约束程序。

注解的格式:
@注解名,它还能添加参数@注解名(参数=值),例如@SuppressWarnings(value="all"),它就是一个镇压警告的注解。

注解的使用位置:
注解可以使用在package(包),class(类),method(方法),field(字段)等上面,添加注解之后,相当于给它们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。

内置注解

Java中内置了很多注解,每个注解都有它自己的独特作用,博主这里介绍几个常见的内置注解:

  • @Override:这个注解只能加在方法上面,表示该方法是一个重写的方法,它会检查该方法是不是重写的方法,如果不是,则会报错。
  • @Deprecated:这个注解可以加在构造器声明上、字段声明上、局部变量声明上、方法声明上、包声明上、形式参数声明上和类声明上,表示这个是不推荐使用的(它只是表示不推荐使用,并不是不能使用)。
  • @SuppressWarnings("值")或者@SuppressWarnings(value="值"):这个注解可以加在类声明、字段声明、方法声明、形式参数声明、构造器声明和局部变量声明上,它就是用来镇压警告的,可以将警告强行去掉,使用这个注解需要传入参数,不然会报错,参数类型是String,但是传入的值可以随意编写,甚至可以采用空字符串,使用“all”可以镇压所有警告,其他值暂时也没弄清楚(不知了解这个的大佬可否在评论区进行指点),当然这个注解博主也不建议经常使用,警告可以帮助我们识别代码的正确与否。

当然其他注解还有很多,这三个博主认为是比较常见的。

元注解

元注解(meta-annotation)就是负责注解其他注解的,Java定义了4个标准的元注解类型,它们被用来提供对其他注解(annotation)类型做解释说明的。

  • @Target:目标,用于描述注解的使用范围,就是说明该注解能在那些地方使用,它的参数是一个ElementType数组。
    这个注解中的参数是枚举类型(ElementType),其中包括:
枚举值含义
TYPE可定义在类、接口、注解类和枚举上
FIELD可定义在字段上(包含枚举常量)
METHOD可定义在方法上
PARAMETER可定义在形式参数上
CONSTRUCTOR可定义在构造器上
LOCAL_VARIABLE可定义在局部变量上
ANNOTATION_TYPE可定义在注解类上
PACKAGE可定义在声明包上
TYPE_PARAMETER可定义在类型参数上(1.8)
TYPE_USE可定义在类型的使用上(1.8)
  • @Retention:保留,用于描述注解需要在什么级别下保存该注解信息,用于描述注解的生命周期,它的参数是一个RetentionPolicy类的值。
    这个注解的参数也是枚举类型(RetentionPolicy),其中包括:
枚举值含义
SOURCE表示该注解仅仅在源代码有效
CLASS表示该注解在编译为class文件的时候还有效(包含SOURCE )
RUNTIME表示该注解在运行时期还有效(包含SOURCE 和CLASS)
  • @Document:文档,说明该注解将包含在生成的javadoc文档中,只要添加了该元注解的注解就表示生成javadoc文档时,会将该注解包含进去。
  • @Inherited:继承,说明子类可以继承父类中的该注解。

以下为博主对@Override源代码中元注解的解释。

//表示该注解可存在于方法上,如果可存在于多个位置,可用@Target({CONSTRUCTOR, FIELD, METHOD, PACKAGE, TYPE})
@Target(ElementType.METHOD)
//表示该注释的生命周期只到源代码时期
@Retention(RetentionPolicy.SOURCE)
//无@Document表示在生成javadoc文档时该注释不会被包含。
//无@Inherited表示子类不能继承父类中的该注解
public @interface Override {
}

上述解释可能有不对的地方,还望看到的大佬及时指出,十分感谢,[/抱拳]

自定义注解

自定义注解使用@interface来定义,自定义的注解自动继承了java.lang.annotation.Annotation接口。

  • @interface用来声明一个注解,格式:public @interface 注解名{定义内容}
  • 说明解释注解使用元注解。
  • 注解配置参数的方式参数类型 参数名();
  • 注解中参数的类型只能是基本类型,Class、String、enum等。
  • 可以通过default来声明参数的默认值。
  • 如果注解中只有一个参数成员,一般将参数名定义为value(当注解中只有一个参数,并且参数名为value时,使用该注解时可以简化@注解名(value=值)–>@注解名(值))。
  • 注解元素必须要有值,一般在定义注解元素是,常使用空字符或者0作为默认值。

下面博主随便定义了一个自定义的注解:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//表示该注解可以加在类和方法上
@Target({ElementType.TYPE, ElementType.METHOD})
//表示该注解在程序运行时有效,一般自定义注释的声明周期都会声明为RUNTIME
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {

    //注解的参数
    String name() default "默认值";//默认值为"默认值"的String类型的名为name的参数

    int age();//无默认值的int类型的名为age的参数

    int id() default 0;//默认值为0的int类型的名为id的参数

    String[] hobby() default {"写代码"};//默认值为{"写代码"}的String数组类型的名为hobby的参数

}

我们在使用自定义的注释时,没有默认值的参数,我们必须要在使用注解时,为其传值,否则会报错。比如上述自定义注解,我们在使用时至少要为age参数赋值,其他参数可选。

@MyAnnotation(age = 20)
public void method() {
    //。。。
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值