Java从入门到放弃36---内置注解/元注解/自定义注解

Java从入门到放弃36—内置注解/元注解/自定义注解

01 注解的概念

  • Annotation是从JDK5.0开始引入的技术
  • Annotation的作用:
    • 可以对程序做出解释(这一点和注释comment没什么区别)
    • 可以被其他程序读取
  • 格式:
    • @注解名(value=""),还可以添加一些参数值
  • 位置:
    • 可以附加在package class method field等上面

##02 内置注解

@Override

  • 定义在java.lang.Override中,此注释只适用于修辞方法,用于声明此方法将要重写父类方法

@Deprecated

  • 可用于修辞方法,属性,类,被修辞的即为不鼓励程序员使用的程序元素。表示不推荐使用,但是可以使用。如被修辞的方法即为已过时的方法,不鼓励使用,但是可以使用。

@SuppressWarnings( )

  • 用来取消显示指定的编译器警告。与前两个内置注解有所不同的是,该注解需要添加一个参数才可以正确使用。参数是已经定义好的,选择后使用即可。如下所示:

    • @SuppressWarnings("all")  //镇压全部警告 不建议使用 因为使用该注解后,IDEA不再智能提示黄色警告
      @SuppressWarnings("unchecked") 
      @SuppressWarnings(value={"unchecked","deprecation"})
      //等等...
      

03 元注解

  • 用于注释其他注解,Java定义了4个标准的meta-annotation

    • Target 注释作用域,用于描述注解的使用范围(格式示例:@Target(value = {ElementType.TYPE,ElementType.METHOD}))
    ElementType.ANNOTATION_TYPE 注释类型声明 
    ElementType.CONSTRUCTOR 构造方法声明 
    ElementType.FIELD 字段声明(包括枚举常量) 
    ElementType.LOCAL_VARIABLE 局部变量声明 
    ElementType.METHOD 方法声明 
    ElementType.PACKAGE 包声明 
    ElementType.PARAMETER 参数声明 
    ElementType.TYPE 类、接口(包括注释类型)或枚举声明 
    
    • Retention 用于描述注解的生命周期,表示需要在什么级别保存该注释信息(描述注解在哪个地方有用)
    RetentionPolicy.CLASS 编译器将把注释记录在类文件中,但在运行时 JVM 不需要保留注释。 
    RetentionPolicy.RUNTIME 编译器将把注释记录在类文件中,在运行时 JVM 将保留注释,因此可以反射性地读取。 
    RetentionPolicy.SOURCE 编译器要丢弃的注释 
    
    • Ducument 说明该注解将被包含在javadoc中,生成Doc文档时使用
    • Inherited 声明子类可以继承父类的注解

##04 自定义注解

  • 使用@interface自定义注解,将自动继承Annotation接口
    • 格式:用@interface声明一个注解,public @interface 注解名{定义内容}
    • 定义的内容:返回值类型 方法名();
    • 每一个方法实际上是声明了一个配置参数,方法的名称就是参数的名称,返回值类型就是参数的类型(注意:返回值只能是基本类型和Class,String,enum)
    • 注解元素必须要有值,我们定义注解元素时,经常使用空字符串,0作为默认值,通过default声明参数的默认值,被default""声明的参数在使用注解时可以不赋值
    • 只有一个参数的时候,默认使用value当做参数名字,使用的时候可以省略参数名

自定义注解程序示例

@MyAnnotation1(num=10)//
public class Test2 {
    @MyAnnotation1(num=10)
    public void test0(){}

    @MyAnnotation2("A")
    public void test1(){}

}

//元注解写在自定义注解之上注释该自定义注解

@Target(value = {ElementType.TYPE,ElementType.METHOD})//声明作用域为类、接口和方法
@Retention(RetentionPolicy.RUNTIME)

@interface MyAnnotation1{
    String name() default"";
    //返回值类型 方法名();==参数类型 参数名();
    //被default声明的可以不赋值
    int num();
}

@Target(value = {ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)

@interface MyAnnotation2{
    String value();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值