• 非零基础自学Java (老师:韩顺平) 第11章 枚举和注解 【2 注解】


    非零基础自学Java (老师:韩顺平)

    ✈【【零基础 快速学Java】韩顺平 零基础30天学会Java】

    第11章 枚举和注解

    11.12 注解的理解
    • 注解 Annotation 也被称为元数据( Metadata ),用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息。
    • 和注释一样,注解不影响程序逻辑,但是注解可以被编译或运行,相当于嵌入在代码中的补充信息。
    • 在Java SE中,注解的使用目的比较简单,例如标记过时的功能、忽略警告等
    • 在Java EE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替Java EE旧版中所遗留的繁冗代码和XML配置等。
    11.13 基本的 Annotation 介绍

    使用 Annotation 时要在其前面增加 @ 符号, 并把该 Annotation 当成一个修饰符使用。用于修饰它支持的程序元素

    【三个基本的 Annotation】

    • @Override: 限定某个方法,是重写父类方法, 该注解只能用于方法
    • @Deprecated: 用于表示某个程序元素(类, 方法等)已过时
    • @SuppressWarnings: 抑制编译器警告
    11.14 基本的Annotation 应用案例
    11.14.1 @Override 注解的案例

    【举个栗子】

    package com.dingjiaxiong.annotation_;
    
    /**
     * ClassName: Override_
     * date: 2022/9/4 14:01
     *
     * @author DingJiaxiong
     */
    
    public class Override_ {
        
    }
    
    class Father{ //父类
        public void fly(){
            System.out.println("Father fly...");
        }
        
        public void say(){}
    }
    
    class Son extends Father{ //子类
        
        //如果没有写,其实还是重写了父类的fly
        //如果写了,编译器会去检查方法是否真的重写了父类的,重写了,编译通过,没有构成重写,编译错误
        @Override
        public void fly(){
            System.out.println("Son fly...");
        }
        
        @Override
        public void say(){
            
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    【@Override使用说明】

    • @Override表示指定重写父类的方法(从编译层面验证),如果父类没有fly方法,则会报错
    • 如果不写@Override 注解,而父类仍有public void fly(){},仍然构成重写
    • @Override只能修饰方法,不能修饰其它类,包,属性等等
    • 查看@Override注解源码为@Target(ElementType.METHOD),说明只能修饰方法
    • @Target是修饰注解的注解,称为元注解。
    11.14.2 @Deprecated 注解的案例

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

    【举个栗子】

    package com.dingjiaxiong.annotation_;
    
    /**
     * ClassName: Deprecated_
     * date: 2022/9/4 14:06
     *
     * @author DingJiaxiong
     */
    
    public class Deprecated_ {
        public static void main(String[] args) {
            A a = new A();
            a.hi();
            System.out.println(a.n1);
        }
    }
    
    @Deprecated
    class A{
        @Deprecated
        public int n1 = 10;
        @Deprecated
        public void hi(){
            System.out.println("过时的hi");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    编辑器提示

    在这里插入图片描述

    运行结果

    在这里插入图片描述

    【@Deprecated的说明】

    • 用于表示某个程序元素(类,方法等)已过时可以修饰方法,类,字段,包,参数等等
    • @Target(value={CONSTRUCTOR,FIELD, LOCAL_VARIABLE,METHOD,PACKAGE, PARAMETER, TYPE))
    • @Deprecated的作用可以做到新旧版本的兼容和过渡
    11.14.3 @SuppressWarnings 注解的案例

    @SuppressWarnings: 抑制编译器警告

    【举个栗子】

    package com.dingjiaxiong.annotation_;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * ClassName: SuppressWarnings_
     * date: 2022/9/4 14:10
     *
     * @author DingJiaxiong
     */
    
    @SuppressWarnings({"rawtypes", "unchecked", "unused"})
    rawtypes,抑制与使用 raw 类型相关的警告
    //unchecked,抑制与未检查的作业相关的警告
    //unused,抑制与未用的程式码及停用的程式码相关的警告
    public class SuppressWarnings_ {
        public static void main(String[] args) {
            List list = new ArrayList();
            list.add("Jack");
            list.add("Tom");
            list.add("Mary");
            int i;
            System.out.println(list.get(1));
        }
    
        public void f1() {
            @SuppressWarnings({"rawtypes"})
            List list = new ArrayList();
    
            list.add("Jack");
            list.add("Tom");
            list.add("Mary");
            @SuppressWarnings({"unused"})
            int i;
            System.out.println(list.get(1));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    运行结果

    在这里插入图片描述

    【@SuppressWarnings 注解】

    说明各种值

    • unchecked是忽略没有检查的警告
    • rawtypes是忽略没有指定泛型的警告(传参时没有指定泛型的警告错误)
    • unused是忽略没有使用某个变量的警告错误
    • @SuppressWarnings可以修饰的程序元素为,查看@Target
    • 生成@SupperssWarnings 时,不用背,直接点击左侧的黄色提示,就可以选择(注意可以指定生成的位置)
    11.15 JDK的元Annotation(元注解【了解】)
    11.15.1 元注解的基本介绍

    JDK 的元 Annotation 用于修饰其他 Annotation

    元注解: 本身作用不大,讲这个原因韩老师希望同学们,看源码时,可以知道它是干什么

    11.15.2 元注解的种类
    • Retention //指定注解的作用范围,三种 SOURCE,CLASS,RUNTIME
    • Target // 指定注解可以在哪些地方使用
    • Documented //指定该注解是否会在 javadoc 体现
    • Inherited //子类会继承父类注解
    11.15.3 @Retention 注解

    【说明】

    只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留多长时间, @Rentention 包含一个 RetentionPolicy类型的成员变量, 使用 @Rentention 时必须为该 value 成员变量指定值:

    @Rentention 的三种值

    • RetentionPolicy.SOURCE: 编译器使用后,直接丢弃这种策略的注释
    • RetentionPolicy.CLASS: 编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 不会保留注解。 这是默认值
    • RetentionPolicy.RUNTIME:编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 会保留注解. 程序可以通过反射获取该注解
    11.15.4 @Target 注解

    【基本说明】

    用于修饰Annotation定义,用于指定被修饰的 Annotation能用于修饰哪些程序元素.

    @Target 也包含一个名为value的成员变量。

    11.15.5 @Documented

    【基本说明】

    @Documented:用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档,即在生成文档时,可以看到该注解。

    说明:定义为Documented的注解必须设置Retention值为RUNTIME.

    11.15.6 @Inherited 注解

    被它修饰的Annotation将具有继承性.

    如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解

  • 相关阅读:
    STM32输出SPWM波,HAL库,cubeMX配置,滤波后输出1KHz正弦波
    基于 vue-element-template 框架添加 tagsview
    带你了解什么是 Web3.0
    函数计算|如何使用层解决依赖包问题?
    计算机毕业设计 基于微信小程序的“共享书角”图书借还管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
    Go语言学习笔记——配置管理库viper
    电商秒杀解决方案
    HS6621Cx 一款低功耗蓝牙SoC芯片 应用于键盘、鼠标和遥控器消费类产品
    统一最小二乘标准问题形式
    Jenkins 真得牛逼,只怪你不会用而已~
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126913719