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系统自带的三个注解,就讲解这么多。


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

相关文章
|
17天前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
83 43
Java学习十六—掌握注解:让编程更简单
|
11天前
|
Java 开发者 Spring
[Java]自定义注解
本文介绍了Java中的四个元注解(@Target、@Retention、@Documented、@Inherited)及其使用方法,并详细讲解了自定义注解的定义和使用细节。文章还提到了Spring框架中的@AliasFor注解,通过示例帮助读者更好地理解和应用这些注解。文中强调了注解的生命周期、继承性和文档化特性,适合初学者和进阶开发者参考。
34 14
|
11天前
|
前端开发 Java
[Java]讲解@CallerSensitive注解
本文介绍了 `@CallerSensitive` 注解及其作用,通过 `Reflection.getCallerClass()` 方法返回调用方的 Class 对象。文章还详细解释了如何通过配置 VM Options 使自定义类被启动类加载器加载,以识别该注解。涉及的 VM Options 包括 `-Xbootclasspath`、`-Xbootclasspath/a` 和 `-Xbootclasspath/p`。最后,推荐了几篇关于 ClassLoader 的详细文章,供读者进一步学习。
26 12
|
5天前
|
Java 编译器
Java进阶之标准注解
Java进阶之标准注解
17 0
|
1月前
|
JSON Java 数据库
java 常用注解大全、注解笔记
关于Java常用注解的大全和笔记,涵盖了实体类、JSON处理、HTTP请求映射等多个方面的注解使用。
34 0
java 常用注解大全、注解笔记
|
2月前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
|
23天前
|
IDE Java 编译器
java的反射与注解
java的反射与注解
14 0
|
2月前
|
Java 编译器 程序员
Java注解,元注解,自定义注解的使用
本文讲解了Java中注解的概念和作用,包括基本注解的用法(@Override, @Deprecated, @SuppressWarnings, @SafeVarargs, @FunctionalInterface),Java提供的元注解(@Retention, @Target, @Documented, @Inherited),以及如何自定义注解并通过反射获取注解信息。
Java注解,元注解,自定义注解的使用
|
1月前
|
XML Java 数据格式
Java-spring注解的作用
Java-spring注解的作用
20 0
|
2月前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit