当前位置: 首页 > article >正文

注解(Java程序的一种特殊“注释”,用于工具处理的标注)

1.使用注解

a.含义

        i.注解是放在类,字段,方法,参数前的一种特殊“注释”。
        ii.注释会被编译器直接忽略,注解则可以被编译器打包带进class文件,因此,注解是一种用于标注的“元数据”。
        iii.从JVM角度看,注解对代码逻辑没有任何影响,如何使用注解完全由工具决定。

b.三类注解

        i.由编译器使用的注解,不会编译进.class文件,编译后被编译器扔掉;如:@Override、@SuppressWarnings。
        ii.由工具处理.class文件使用的注解,有些工具在加载class的时候,对class动态处理实现特定功能。这类注解会被编译进.class文件,加载结束后不会加载进JVM,被底层库使用,无需处理。
        iii.程序运行期读取的注解,加载后一直存在于JVM中,最常用的注解。(Java代码读取注解实现功能,JVM并不识别该注解)

c.注意

        i.定义注解时,配置参数类型:
                1.所有基本类型;
                2.String;
                3.枚举;
                4.所有基本类型,String,枚举以及Class的数组。
        ii.注解配置参数必须是常量,所以定义注解时就确定了所有参数的值,正常每个参数都有默认值,如果不设置就使用默认值。
        iii.如果参数名称是value且只有一个参数,那么可以省略参数名称。

2.定义注解

a.含义     

        用@interface来定义注解。注解的参数类似无参方法,用default设定一个默认值(强烈推荐),最常用的参数应命名为value(有且只有它时可以省略参数名称)。

b.元注解(修饰其他注解的注解)

        i.@Target(最常用)
                定义源码被应用于哪些位置。
                1.ElementType.TYPE:类或接口或枚举或Record。
                2.ElementType.FIELD:成员变量字段。
                3.ElementType.METHOD:方法。
                4.ElementType.CONSTRUCTOR:构造方法。
                5.ElementType.PARAMETER:方法参数。
                6.ElementType.LOCAL_VARIABLE:局部变量。
                7.ElementType.ANNOTATION_TYPE:注解。
                8.ElementType.PACKAGE:包。

        ii.@Retention(默认CLASS期间)
                定义了注解的生命周期。
                1.RetentionPolicy.SOURCE:仅编译期间。
                2.RetentionPolicy.CLASS:仅class文件。
                3.RetentionPolicy.RUNTIME:程序运行期(自定义常用!)

        iii.@Documented
                是否将注解信息添加到javadoc文档中。
        iv.@Repeatable(注解可重复,不常用)
                修饰的注解,可在同位置使用多个同样的注解。

        v.@Inherited(继承)
                定义子类是否可继承父类定义的注解。仅针对@Target(ElementType.TYPE)类型的注解有效,并且仅针对class的继承,对interface的继承无效。

c.如何定义注解

        i.使用@interface定义注解类。
        ii.添加参数、默认值;把最常用的参数定义为value(),所有参数都尽量设置默认值。
        iii.添加元注解;必须设置@Targer和@Retention,@Retention一般设置为RUNTIME。

3.处理注解

a.注意

        i.所有注解都是class,都继承自java.lang.annotation.Annotation。
        ii.读取注解,要使用反射,反射API通过Class实例封装了类的所有信息。

b.获取注解 

        i.判断某个注解是否存在于Class、Field、Method或Constructor。
                1.Class.isAnnotationPresent(注解.Class)
                2.Field.isAnnotationPresent(注解.Class)
                3.Method.isAnnotationPresent(注解.Class)
                4.Constructor.isAnnotationPresent(注解.Class)
        ii.用反射API获取注解。
                1.Class.getAnnotation(注解.Class)
                2.Field.getAnnotation(注解.Class)
                3.Method.getAnnotation(注解.Class)
                4.Constructor.getAnnotation(注解.Class)

c.使用注解

        i.定义了注解,本身对逻辑程序没有任何影响,我们自己编写代码来使用注解,JVM不会自动给注解添加任何处理逻辑。
                1.定义注解。

                2.使用注解。

                3.编写代码来使用注解。

4.常用注解

a.@RequestBody和@RequestParam()

        i.@RequestParam()
                1.一般与get请求一起使用,一个方法中可以有多个,用来接收普通参数。
                2.加上该注解,表示参数必传,并且指定前端传过来的参数名。
                3.可以通过required = false设置参数为非必传,非必传时可设置默认值defaultValue = "0"。
        ii.@RequestBody
                1.一般与post请求一起使用,一个方法中只能有一个,用来接收json格式的数据。
                2.将json数据转化成Map形成的key-value键值对
        iii.注意
                1.如果不是放在请求体里可以用@RequestParam()接收,也可以什么都不写。


http://www.kler.cn/a/304170.html

相关文章:

  • GIS空间分析案例---城市公共设施配置与服务评价
  • ABC334
  • 如何用WordPress和Shopify提升SEO表现?
  • Wireshark
  • RS®SZM 倍频器
  • 计算机网络易混淆知识点串记
  • 每日一问:C++ 中重写和重载的区别
  • vue3 5个常用的API
  • SpringBoot开发——整合Spring Data MongoDB
  • [数据集][目标检测]车油口挡板开关闭合检测数据集VOC+YOLO格式138张2类别
  • 凸优化学习(2)——梯度类方法求解(gradient descent)
  • 构建有温度的用户关系:开源 AI 智能名片、链动 2+1 模式与 S2B2C 商城小程序的作用
  • 华为SMU02B1管理模块WEB登录与账户密码信息
  • HTB-Archetype(winPEAS枚举工具,mssql xp_cmdshell)
  • Linux - make/Makefile工具的基础使用
  • Java的发展史与前景
  • 贪吃蛇项目实现(C语言)——附源码
  • JavaScript知识点3
  • JMeter脚本开发
  • 人工智能领域的性能指的是什么
  • Unity3D类似于桌面精灵的功能实现
  • JDK 17 微服务启动JVM参数调优实战
  • 自学前端靠谱吗?
  • onRequestPermissionsResult详解
  • 多账号注册脚本不会被平台监控吗
  • 写论文还在卡壳?教你用ChatGPT轻松搞定过渡段落!