Java注解

目录

1.什么是注解

2. 基本的注解

        2.1 @Override 

        2.2 @Deprecated

        2.3 @SuppressWarnings 

        2.4 @FunctionInterface

3. 元注解

        3.1 @Target 

        3.2 @Retention 

        3.3  @Documented 

        3.4  @Inherited 

4. 自定义注解


1.什么是注解

        注解(Annotation):也被称为元数据,用于修饰、解释 包、类、方法、属性、构造器、局部变量等数据信息。

        和注释一样,注解不银行程序的逻辑,但是注解可以被编译或运行,相当于嵌入到代码中的补充信息。注释是写个程序员看的,而注解则是需要程序解析的。

        在 JavaSE 中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。(在 JavaEE 中注解占据了更重要的角 色,例如用来配置应用程序的任何切面,代替 java EE 旧版中所遗留的繁冗代码和 XML 配置等)

2. 基本的注解

        使用注解时要在前面加上 @ 符号,用于修饰它支持的程序元素

        四个基本的Annotation:

1) @Override: 限定某个方法,是重写父类方法, 该注解只能用于方法

2) @Deprecated: 用于表示某个程序元素(类, 方法等)已过时

3) @SuppressWarnings: 抑制编译器警告

4) @FunctionInterface: 表示函数式接口。表示该接口中有且仅有一个抽象方法

        2.1 @Override 

        @Override 表示指定重写父类的方法(从编译层面验证),如果父类没有对应的方法,则会报错。

        如果不写@Override注解,但实际上依旧构成重写也不会报错。但是如果写了该注解,而没有构成重写,那么编译器就会报错。

        @Override只能修饰方法。

        2.2 @Deprecated

        @Deprecated 可以修饰方法,类,字段, 包, 参数 等等,当修饰某个元素时,表示该元素已经过时,不推荐使用但任然可以使用。可以用作版本升级过度使用

        2.3 @SuppressWarnings 

        @SuppressWarnings:抑制编译器警告

@SuppressWarnings({"rawtypes", "unchecked", "unused"}) //{}数组,可填入需抑制的警告
// @SuppressWarnings("all") all直接抑制全部
public class SuppressWarnings_ {
}
//1. 当我们不希望看到这些警告的时候,可以使用 SuppressWarnings 注解来抑制警告信息
//2. 在{""} 中,可以写入你希望抑制(不显示)警告信息
//3. 可以指定的警告类型有(不需要记)
//all,抑制所有警告
 //boxing,抑制与封装/拆装作业相关的警告
 //cast,抑制与强制转型作业相关的警告
 //dep-ann,抑制与淘汰注释相关的警告
 //deprecation,抑制与淘汰的相关警告
 //fallthrough,抑制与 switch 陈述式中遗漏 break 相关的警告
 //finally,抑制与未传回 finally 区块相关的警告
 //hiding,抑制与隐藏变数的区域变数相关的警告
 //incomplete-switch,抑制与 switch 陈述式(enum case)中遗漏项目相关的警告
 //javadoc,抑制与 javadoc 相关的警告
 //nls,抑制与非 nls 字串文字相关的警告
 //null,抑制与空值分析相关的警告
 //rawtypes,抑制与使用 raw 类型相关的警告
 //resource,抑制与使用 Closeable 类型的资源相关的警告
 //restriction,抑制与使用不建议或禁止参照相关的警告
 //serial,抑制与可序列化的类别遗漏 serialVersionUID 栏位相关的警告
 //static-access,抑制与静态存取不正确相关的警告
 //static-method,抑制与可能宣告为 static 的方法相关的警告
 //super,抑制与置换方法相关但不含 super 呼叫的警告
 //synthetic-access,抑制与内部类别的存取未最佳化相关的警告
 //sync-override,抑制因为置换同步方法而遗漏同步化的警告
 //unchecked,抑制与未检查的作业相关的警告
 //unqualified-field-access,抑制与栏位存取不合格相关的警告
 //unused,抑制与未用的程式码及停用的程式码相关的警告

关于 SuppressWarnings 作用范围是和你放置的位置相关

        1. 比如 @SuppressWarnings 放置在 main 方法,那么抑制警告的范围就是 main

        2. 通常我们可以放置具体的语句, 方法, 类.

        3. 该注解类有数组 String[] values() 设置一个数组比如 {"rawtypes", "unchecked", "unused"}

        2.4 @FunctionInterface

        @FunctionInterface: 表示函数式接口。相当于校验,如果写入了改注解,但你的你的接口中不是有且仅有一个抽象方法,就会报错。

3. 元注解

        JDK 的元注解是用于修饰其他注解的注解

1. @Target(value=可以取下面这些内容): 作用限制注解使用得位置。

2. @Retention:  注解什么时候生效。默认时源码 java经历了那些阶段。
3. @Documented 当生产API文档时该注解还存在。 

4. @Inherited 是否运行被子类继承。

        3.1 @Target 

        @Target 用于指定被修饰的注解可以修饰哪些程序元素(可以在什么地方使用),入@Override只能用于修饰方法,是因为被@Target修饰指定了

@Target(value=可以取下面这些内容): 作用限制注解使用得位置。


    /** 表示可以作用在类,接口,枚举 */
    TYPE,

    /** 属性 */
    FIELD,

    /** 普通方法上 */
    METHOD,

    /** 方法参数 */
    PARAMETER,

    /** 构造方法上 */
    CONSTRUCTOR,

    /** 局部变量 */
    LOCAL_VARIABLE

        3.2 @Retention 

 源码阶段-->字节码阶段--->运行阶段
      /**
     * 源码时生效,编译器编译后不会写入到class字节码文件中

        

@Retention(RetentionPolicy.SOURCE)

     */

    /**
     * 字节码时生效,编译器编译后会写入到class字节码文件中,但在java程序运行时会丢弃,注解默认是该状态

@Retention(RetentionPolicy.CLASS)

     */

    /**
     * 运行时生效。
     * 在JVM内存中还有该注解。
     都会被设置为运行时有效

@Retention(RetentionPolicy.RUNTIME)

     */

        3.3  @Documented 

        用于指定被@Documented修饰的的注解(Annotation)

        去修饰一个类时

        当这个类被javadoc工具提取成api文档时,是否可以看到修饰的注解(Annotation)

        注意:定义为@Documented的注解必须设置@Retention的值为RUNTIME,因为只有这样java运行时才会保留注解,否则将会丢弃,那么提取成 api 时注解也无法保留了

        3.4  @Inherited 

         被@Inherited 修饰的注解(Annotation)修饰一个 类A 的时候,当这个 类B 继承了 类A,那么也会继承修饰 类A 的注解(Annotation)

4. 自定义注解

public @interface 注解名{
   //注解属性
}

 

eg:

//定义好注解了
@interface My{
   //注解属性
}

//使用注解
@My
class Info{
    @My
    public String name;

    @My
    public void show(){
        System.out.println("show================="+name);
    }
}

注解本身没有任何意义,它只有被解析了,才会赋予真正的意义。

我们以后会使用反射来对象注解进行解析。

像:@Override 它被JVM解析,从而使其具有相应的意义。

@Controller @RequestMapping 它被Spring框架解析,所以具有相应的意义

注解属性定义 

 数据类型 属性名();           例如 int age();

 数据类型 属性名() default 默认值;             String name() default "张三"

其中数据类型必须为

数据类型: 基本类型,字符串类型,枚举类型【常量】,注解类型,

数组类型【必须是上面这些类型的数组】

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝可乐的灵麟鲤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值