Java的自带注解Annotation(一)

简介: Java的自带注解Annotation(一)

Java的注解 Annotation 是在 JDK 1.5 的时候引入的。


我们在学习框架的时候,尤其是 Spring 框架的时候,会有很多很多的注解, 如 @Resource, @Autowired ,@RequestMapping 等,在类或者属性,或者方法上面,添加了这些注解,这可以标识这些类,属性,方法,使它们具有一些特殊的意义。 这就是注解。


Java 自带了 三个注解 @Override, @Deprecated ,@SuppressWarnings 三个注解。


老蝴蝶和大家学习一下,这三个注解。


一. @Override 注解


一.一 注解的定义


@Override 注解,是重写方法时使用的。


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}


@Target 表示放置的位置, 后面跟的是 METHOD, 表示只能放置在方法上面 。


@Retention 后面跟的是 SOURCE, 资源,表示只在源文件里面出现。


关于 @Target 和 @Retention 详细是什么意思,后面老蝴蝶会讲解的。


在方法上面,添加这些注解,这表示这个方法是继承父类或者父接口的。


一.二 演示注解@Override


有一个简单的抽象父类 Person, 里面有 id,name,sex,age,desc 五个属性,还有一个抽象方法 getInfo(), 一个普通方法 sayHello()


//前面的代码
...
     //返回信息
    public abstract String getInfo();
    public String sayHello(String name){
        return "你好,"+name+",我是"+getInfo();
    }
...
//后面的代码


还有一个子类 Student, 继承 Person 类,重写 getInfo() 方法 和 sayHello() 方法


  public class Student extends Person {
    @Override
    public String getInfo() {
        return "两个蝴蝶飞";
    }
    //返回 name, 重写父类的方法
    public String sayHello(String name){
        return name;
    }
}


会发现, getInfo() 方法上面这有这么一个 @Override 注解。 这个注解,表示这个方法 getInfo() 是重写父类的,如果父类没有这个方法,那么就报错。


就拿下面的 sayHello() 方法进行举例, 现在 父类里面也有 sayHello() 方法, 那么就可以在这个方法上面添加 这个注解。


 //返回 name, 重写父类的方法
    @Override
    public String sayHello(String name){
        return name;
    }


没有报错。


但如果一不小心,把 sayHello()方法写错了, 如写成了 sayhello()了, 那么这会在编译时提示报错


20200702184938738.png


Method does not override method from its superclass


因为在 sayhello()方法上面添加了这个注解,就表示这个方法是从父类或者接口那里重写过来的,并不是子类特有的,而这个sayhello()方法,父类并没有,所以报错。


简单来说, @Override 注解,就是保证重写方法的正确性,保证程序运行正确,避免方法名写错的情况。


老蝴蝶建议,重写父类方法或者实现接口时, 在方法上面都添加这么一个注解,表示这个方法的来源。


二. @Deprecated 注解


二.一 注解的定义


@Deprecated 注解,表示不建议使用的一个操作, 是对一些过时或者不安全的类,方法,属性进行提示。


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


@Documented 表示文档


@Retention 表示在执行时出现


@Target 表示放置位置 可以是 构造方法,属性,局部变量,方法,包,参数,类型上面。 标识范围比较广。


二.二 演示@Deprecated


@Deprecated 注解,可以标识 JDK 自带的,也可以是用户自定义的。 如果加上了这个注解,在后面调用时,该代码上面会有一条横线,表示过时的意思。


二.二.一 系统自带的过时


最常见的,就是 java.util.Date 类了。


2020070218494832.png


点进去,查看源代码


  @Deprecated
    public String toLocaleString() {
        DateFormat formatter = DateFormat.getDateTimeInstance();
        return formatter.format(this);
    }


会发现,该方法上面有 @Deprecated 注解。


注意,过时并不代码不能用,更不代表是错误, 但建议还是不用过时的方法。


二.二.二 用户自定义过时


如刚才的 Student 子类, 在类上面和方法上面,加上这么一个注解


//添加到类上面
@Deprecated
public class Student extends Person {
//添加到方法上
    @Deprecated
    @Override
    public String getInfo() {
        return "两个蝴蝶飞";
    }
    //返回 name, 重写父类的方法
    @Override
    public String sayHello(String name){
        return name;
    }
}


那么在实例化这个类,调用这个方法时


20200702184954610.png


上面会有这么一个横线


包下查看类时,发现也会这么一个横线


20200702184959931.png


三. @SuppressWarnings 注解


三.一 注解定义


三.一.一 定义


@SuppressWarnings, 表示 压制警告, 使警告消失(是一种自我欺骗)。


在我们写代码时,就像使用 java.util.Date 类时, 常常会有上面的过时方法使用,那么在运行程序时,就会报警告。虽然警告并不是错误,但是有些开发者,如老蝴蝶自己,就不喜欢警告,如果能够把这些常见的警告给弄消失了,不就可以了吗? @SuppressWarnings,就应用而生了。


@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
    //属性
    String[] value();
}


@Target, 表示可以应用在类型,属性,方法,参数,构造方法,局部变量上面。


@Retention 表示只出现在源文件里面。


注意,注解里面定义的是 数据类型 属性, 指 有一个 value 属性,类型是 字符串数组,并不是方法。这个特别要注解。


如果属性没有默认值,则必须放置值。


三.一.二 value 值常用取值


该 value 属性值有以下几种范围值


image.png


三.二 演示注解


三.一.一 演示 deprecation


20200702185006863.png


添加 压制注解


20200702185010979.png


三.一.二 演示 unchecked 和 rawtypes


20200702185018423.png


添加警告


2020070218502393.png


也可以直接 all


20200702185027959.png


关于Java系统自带的三个注解,就讲解这么多。


谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!

相关文章
|
2月前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
83 7
|
4月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
124 43
Java学习十六—掌握注解:让编程更简单
|
2月前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
137 5
|
3月前
|
Java 开发者 Spring
[Java]自定义注解
本文介绍了Java中的四个元注解(@Target、@Retention、@Documented、@Inherited)及其使用方法,并详细讲解了自定义注解的定义和使用细节。文章还提到了Spring框架中的@AliasFor注解,通过示例帮助读者更好地理解和应用这些注解。文中强调了注解的生命周期、继承性和文档化特性,适合初学者和进阶开发者参考。
108 14
|
3月前
|
Java 编译器
Java进阶之标准注解
Java进阶之标准注解
55 0
|
4月前
|
JSON Java 数据库
java 常用注解大全、注解笔记
关于Java常用注解的大全和笔记,涵盖了实体类、JSON处理、HTTP请求映射等多个方面的注解使用。
75 0
java 常用注解大全、注解笔记
|
5月前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
|
5月前
|
Java 编译器 程序员
Java注解,元注解,自定义注解的使用
本文讲解了Java中注解的概念和作用,包括基本注解的用法(@Override, @Deprecated, @SuppressWarnings, @SafeVarargs, @FunctionalInterface),Java提供的元注解(@Retention, @Target, @Documented, @Inherited),以及如何自定义注解并通过反射获取注解信息。
Java注解,元注解,自定义注解的使用
|
4月前
|
IDE Java 编译器
java的反射与注解
java的反射与注解
35 0
|
4月前
|
XML Java 数据格式
Java-spring注解的作用
Java-spring注解的作用
38 0