首页 > 其他分享 >day30-注解

day30-注解

时间:2022-09-01 18:57:28浏览次数:33  
标签:day30 public 修饰 Override 注解 警告 Annotation

Java注解

1.注解的理解

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

基本的Annotation介绍:

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

  • 三个基本的Annotation:

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

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

    • @SuppressWarnings:抑制编译器警告

2.@Override注解

例子:

package li.annotation;

public class Override_ {
    public static void main(String[] args) {

    }
}
class Father{//父类
    public void fly(){
        System.out.println("Father fly ...");
    }
}

class Son extends Father{//子类

    //@Override 放在fly方法上,表示子类的fly方法重写了父类的fly方法
    //即使这里没有写@Override,其实还是重写了父类方法
    //但是如果写了@Override注解,编译器就会检查该方法是否整的重写了父类的方法。
    //如果的确重写了就编译通过,如果没有构成重写则编译错误
    //它的意义就在于语法的校验
    @Override
    public void fly(){
        System.out.println("Son fly ...");
    }
}

@Override使用说明:

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

点击@Override进去可以看到Override的定义:

image-20220901154657712

补充说明:@interface的说明

@interface不是接口,是注解类 ,在JDK1.5之后加入的

3.@Deprecated注解

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

例子:

package li.annotation;

public class Deprecated_ {
    public static void main(String[] args) {
        AAA a = new AAA();
        a.hi();
        System.out.println(a.n1);

    }
}

// @Deprecated 修饰某个元素,表示该元素已经过时
// 即 不再推荐使用,但是仍然可以使用
@Deprecated
class AAA{

    @Deprecated
    public int n1 = 10;
    
    @Deprecated
    public void hi(){
    }
}

查看@Deprecated注解类的源码:

image-20220901162251698

@Deprecated使用说明:

  1. 用于表示某个程序元素(类、方法等)已过时
  2. @Deprecated可以修饰CONSTRUCTOR(构造器), FIELD(属性), LOCAL_VARIABLE(局部变量), METHOD(方法), PACKAGE(包), PARAMETER(参数), TYPE(类型)
  3. @Deprecated的作用可以做到新旧版本的兼容和过渡

3.@SuppressWarnings注解

@SuppressWarnings属性介绍及属性说明:(部分)

属性 属性说明
all 抑制所有警告
boxing 抑制装箱、拆箱操作时候的警告
cast 抑制映射相关的警告
dep-ann 抑制启用注释的警告
deprecation 抑制过期方法警告
fallthrough 抑制确在switch中缺失breaks的警告
finally 抑制finally模块没有返回的警告
hiding 抑制与隐藏变数的区域变数相关的警告
incomplete-switch 忽略没有完整的switch语句
nls 忽略非nls格式的字符
null 忽略对null的操作
rawtypes 忽略没有指定泛型的警告(传参时没有指定泛型的警告错误)
restriction 抑制使用不建议或禁止参照相关的警告
serial 抑制与实现序列化的类遗漏serialVersionUID的的警告
static-access 抑制不正确的静态访问方式警告
synthetic-access 抑制子类没有按最优方法访问内部类的警告
unchecked 抑制没有进行类型检查操作的警告
unqualified-field-access 抑制没有权限访问的域的警告
unused 抑制没被使用过的代码的警告

例子:

package li.annotation;

import java.util.ArrayList;
import java.util.List;

// 1.当我们不希望看到警告时,可以使用@SuppressWarnings注解来抑制警告信息
// 2.在{""}中,可以写入你希望抑制(不显示)的警告信息
// 3.@SuppressWarnings的作用范围和你放置的位置有关
// 比如 @SuppressWarnings放置在main方法,那么抑制警告的范围就是main方法

public class SuppressWarnings_ {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("jack");
        list.add("mary");
        list.add("Bob");
        System.out.println(list);//[jack, mary, Bob]

    }
}

查看@SuppressWarnings源码:

image-20220901170202904
  1. @SuppressWarnings可以放置的位置有:TYPE(类型), FIELD(属性), METHOD(方法), PARAMETER(参数), CONSTRUCTOR(构造器), LOCAL_VARIABLE(局部变量)

  2. 该注解类有一个数组String[] value(),通过该数组可以在@SuppressWarnings({""})中设置多个属性,如@SuppressWarnings({"rawtypes","unchecked","unused"});

4.元注解

元注解的基本介绍:

JDK的元Annotation用于修饰其他Annotation

元注解的种类:

  1. Retention:指定注解的作用范围,三种:SOURCE,CLASS,RUNTIME

  2. Target:指定注解可以在哪些地方使用

  3. Documented:指定该注解是否会在javadoc中体现

  4. Inherited:子类会继承父类注解

4.1@Retention注解

说明:

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

​ @Rentention的三种值:

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

关于Retention

4.2@Target注解

基本说明:

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

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

@Documented
@Retention(RetentionPolicy.RUNTIME)//它的作用范围是RUNTIME
@Target(ElementType.ANNOTATION_TYPE)//这里的ANNOTATION_TYPE 说明@Target只能修饰注解
public @interface Target {//注释类
    /**
     * Returns an array of the kinds of elements an annotation type
     * can be applied to.
     * @return an array of the kinds of elements an annotation type
     * can be applied to
     */
    ElementType[] value();
}

4.3@Documented注解

基本说明:

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

PS:定义为@Documented的注解必须设置Retention值为RUNTIME

image-20220901183358662

4.4@Inherited注解

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

image-20220901184643934

标签:day30,public,修饰,Override,注解,警告,Annotation
From: https://www.cnblogs.com/liyuelian/p/16647530.html

相关文章

  • 【Spring Boot】Spring 最常用的 7 大类注解,史上最强整理!
    原文:https://mp.weixin.qq.com/s/q7hVf1VluD8vPs7srRU2dA 随着技术的更新迭代,Java5.0开始支持注解。而作为java中的领军框架spring,自从更新了2.5版本之后也开始慢慢舍......
  • Day30static
    staticpackageoop.demo2;//static静态publicclassStudent{privatestaticintage;//静态的变量多线程privatedoublescore;//非静态的变量p......
  • @RequestMapping注解详解
    功能RequestMapping注解是一个用来处理请求地址映射的注解,可用于类或方法的上方,用于类的上方可以作为父路径value属性 @RequestMapping(value={"/index","/hello"})p......
  • 注解@RequestParam和注解@RequestBody的作用
    Springboot注解@RequestParam和@RequestBody@RequestParam@RequestMapping(value="test")@ResponseBodypublicObjecttest(@RequestParamIntegerus......
  • Java easy_trans字典绑定,Java字典注解绑定
     ================================©Copyright蕃薯耀 2022-08-31https://www.cnblogs.com/fanshuyao/ 一、引入Maven依赖基于<mybatisPlus.version>3.4.3.3</my......
  • SpringBoot使用@Async和@Transactional注解优化接口
    1、业务背景:项目上有一个接口需要按照前端传递的时间段范围修改6个表的数据,接口V1版本开发完成是使用的同步方式全局@Transactional注解的方式去做的,但存在一个问题就......
  • MyBatis常用注解及基本增删改查的注解实现
    MyBatis的常用注解注解可以减少Mapper文件的编写,常用注解如下;@Insert:实现新增@Update:实现更新@Delete:实现删除@Select:实现查询@Result:实现结果集封装@Results:可......
  • jsp_注解和jsp内置对象
    注释  HTML注释:<!-- -->只能注释HTML片段   jsp推荐使用<%-- --%>可以注释所以片段<!--<h1>hello</h1>--><%--System.out.ptintl......
  • 注解
    publicclassWxJwtFilterimplementsFilter{@AutowiredprivateIUcUserServiceuserService;@AutowiredRequestMappingHandlerMappingrequestMappingH......
  • 注解-解析注解以及注解案例
    解析注解在程序中使用(解析)注解:获取注解中定义的属性值​1.获取注解定义的位置的对象(Class,Method,Field)​2.获取指定的注解:getAnnotation(Class)//其实就......