java中几个常见的注解(Annotation)

目录

简述注解作用

常见的注解以及它们的作用

        @Override

        @Deprecated

        @SuppressWarnings

        @Retention

        @Target       

        @Documented

        @Inherited

自定义注解测试        



简述注解作用

        注解(Annotation),注解是jdk5加入的一种注释机制,并且编译之后虚拟机还能识别这些注解;简单的来说就是注释和解读,注释是给编写程序的人看的,解读是交给java来解读的,框架中也类似的有很多的注解例如(Spring中的Service,Compent等)。


常见的注解以及它们的作用

        代码中的注解

        @Override:方法重写的注解

        @Deprecated:废弃标识注解

        @SuppressWarnings:镇压提醒注解

        元注解(注解的注解)

        @Documented:标注注解是否标注在文档中

        @Inherited:标记注解是继承与哪个类

        @Retention:标注注解怎么保存

        @Target:标注注解能在哪里生效


         作用说明

        @Override

        这个比较常见我们经常重写一些方法时就会默认生成这样的注解,该注解就是表示该方法是重写的方法,该注解能发现其父类,或者是引用的接口中有没有该方法时,没有就会报编译错误。

                重写Object类的toString()方法。

        @Deprecated

         这个注解用在方法上表示该方法是过时的方法,不推荐使用,但是可以使用。多见于一些过时的方法上,例如下面图片中的java.lang.String类中。

                

         @SuppressWarnings

          代码中经常会有些提示,例如变量定义之后没有使用就会出现浅色,某些语句下面会有黄色波浪线,这些都是提醒,如果不想让它一直提醒就可以加上该注解。如下图使用前和使用后。

        -------------->

         


        

        @Retention

        @Target       

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}

        通过jdk中的@Override和@Deprecated来学习元注解

        Override中的Target中表示该注解能作用的地方,例如和这个Override的作用范围是方法上对应的参数就是ElementType.METHOD也就是只能作用在方法上,对应的Deprecated的Target是一个字符串数组包含构造器、文件、方法、包等等,所以该Deprecated注解可以写在更多的不同类型上。

        Retention表示的是该注解其中RetentionPolicy 是一个枚举类型,源码如下只有三个值。

        SOURCE:表示源代码中

        CLASS:表示在class字节码中,但LVM运行时不保留

        RUNTIME:表示由编译器记录在类文件中,JVM运行时保留,并且能通过反射读取

public enum RetentionPolicy {
    /**
     * Annotations are to be discarded by the compiler.
     */
    SOURCE,

    /**
     * Annotations are to be recorded in the class file by the compiler
     * but need not be retained by the VM at run time.  This is the default
     * behavior.
     */
    CLASS,

    /**
     * Annotations are to be recorded in the class file by the compiler and
     * retained by the VM at run time, so they may be read reflectively.
     *
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME

        @Documented

                标注注解是否生成在文档中

        @Inherited

                标记注解是继承与哪个类,注解类上时表示子类会继承该注解


自定义注解测试        

        这里自定义了两个注解(myAnnotation 和 myAnnotation2)

        自定义注解格式  修饰符  @interface  <注解名字>

package org.example.test;

import java.lang.annotation.*;

@myAnnotation()
public class TestAnnotiation {

    //@myAnnotation()  出错因为该注解只能用于class上
    public void test01(){
        int a = 1;
    }

   @myAnnotation2(value = 999,name = "这是我自定义的注解2")
    public void test02(){
        System.out.println("这是测试自定义注解的一个方法");
    }

}

/**
 * 该注解只能用在类上
 * 该注解最大限度的有效
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented()
@interface myAnnotation{ }

/**
 * 该注解能用在方法上还能用在类上
 * 该注解只能在源代码中有效
 */
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
@interface myAnnotation2{
    int value();
    String name();
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值