iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >一篇文章带你搞定JAVA注解
  • 218
分享到

一篇文章带你搞定JAVA注解

2024-04-02 19:04:59 218人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录1、注解是什么2、jdk支持的注解有哪些2.1 三种常用的注解:2.2 元注解3、注解实例1、自定义注解2、在对应的方法上增加注解3、在项目启动的时候检查注解的枚举4、总结1、注

1、注解是什么

Java 注解用于为 Java 代码提供元数据,看完这句话也许你还是一脸懵逼,用人话说就是注解不直接影响你的代码执行,仅提供信息。接下我将从注解的定义、元注解、注解属性、自定义注解、注解解析JDK 提供的注解这几个方面再次了解注解(Annotation)

2、jdk支持的注解有哪些

2.1 三种常用的注解:

@SuppressWarnings 注解的作用是阻止编译器发出某些警告信息。它可以有以下参数:  

deprecation :过时的类或方法警告。    

unchecked:执行了未检查的转换时警告。    

allthrough:当Switch程序块直接通往下一种情况而没有Break时的警告。

path:在类路径、源文件路径等中有不存在的路径时的警告。    

serial:当在可序列化的类上缺少serialVersionUID定义时的警告。 

finally:任何finally子句不能完成时的警告。   

all:关于以上所有情况的警告

@Deprecated 该注解的作用是标记某个过时的类或方法。

@Override 该注解用在方法前面,用来标识该方法是重写父类的某个方法。

2.2 元注解

元注解主要是用来注解自定义注解的注解,分别有@Retention、 @Target、 @Document、 @Inherited和@Repeatable(JDK1.8加入)五种。

下面讲两个平常最常用的注解:

@Retention 注解的生命周期,主要有

RetentionPolicy.SOURCE 仅存在于源码

RetentionPolicy.CLASS 默认的策略,在class字节码文件中存在,但运行时无法获得 RetentionPolicy.RUNTIME 在运行时可以通过反射获取到,也是最常用的。

@Target 注解的作用目标,主要有

ElementType.TYPE 作用接口、类、枚举、注解

ElementType.FIELD 作用属性字段、枚举的常量

ElementType.METHOD 作用方法

ElementType.PARAMETER 作用方法参数

ElementType.CONSTRUCTOR 作用构造函数

ElementType.LOCAL_VARIABLE 作用局部变量

ElementType.ANNOTATION_TYPE 作用于注解(@Retention注解中就使用该属性) ElementType.PACKAGE 作用于包 ElementType.TYPE_PARAMETER 作用于类型泛型,即泛型方法、泛型类、泛型接口 (jdk1.8加入)

3、注解实例

在枚举中编译器只会限制枚举的名字不能重复,在开发中经常会遇到枚举Id 重复的问题,因为每个人在开发功能的时候一般只会专注于自己的功能,做完只会直接提交代码,不会注意到枚举Id冲突,这个时候可以使用下面的代码进行枚举自检,在项目的开发阶段就能及时发现代码的问题。下面的代码稍微修改下就可以在项目中使用,拿走不写。

1、自定义注解

检测枚举的key 是否有重复


package org.pdool.anno;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CheckEnum {
}

2、在对应的方法上增加注解


package org.pdool.anno;

public enum ResType {
   GoLD(1),
   DIAMOND(2),
   //注意:此处重复
   SILVER(2);
   int type;
   @CheckEnum
   public int getType() {
       return type;
  }
   ResType(int type) {
       this.type = type;
  }
}

3、在项目启动的时候检查注解的枚举


package org.pdool.anno;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;

public class Aain {
   public static void main(String[] args) throws InvocationTargetException,IllegalAccessException {
       // 获取有注解的方法
       Method[] declaredMethods = ResType.class.getDeclaredMethods();
       Method annoMethod = null;
       for (Method declaredMethod : declaredMethods) {
           CheckEnum  annotation = declaredMethod.getAnnotation(CheckEnum.class);
           if (annotation != null){
               annoMethod = declaredMethod;
              break;
          }
      }
       Set<Object> set = new HashSet<>();
       // 遍历每个枚举的id
       Object[] oo = ResType.class.getEnumConstants();
       for (Object o : oo) {
           Object invoke = annoMethod.invoke(o);
           if (!set.contains(invoke)){
               set.add(invoke);
          }else {
               System.out.println("重复的key "+ o +" -- "+ invoke);
          }
      }
  }
}

图片

注:上面的代码只是简单的实例,只是为了展示核心代码,在项目中使用时可以修改类的获取为扫描项目下的包,遍历所有的枚举,就可以在项目中使用了。

4、总结

注解虽然不影响代码的运行,但是可以为运行中的程序提供更多的信息,注解也是很多框架的基本技术切入点,比如spring 的注解,Lombok 的各种注解,都是使用了注解做了很多事,明白了注解是怎么回事,理解框架也会轻而易举。

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: 一篇文章带你搞定JAVA注解

本文链接: https://www.lsjlt.com/news/130442.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 一篇文章带你搞定JAVA注解
    目录1、注解是什么2、jdk支持的注解有哪些2.1 三种常用的注解:2.2 元注解3、注解实例1、自定义注解2、在对应的方法上增加注解3、在项目启动的时候检查注解的枚举4、总结1、注...
    99+
    2024-04-02
  • 一篇文章带你搞定JAVA Maven
    目录1、maven是什么,为什么存在?项目结构是什么样子,怎么定位jar2、Idea 的操作1.新建maven项目2.配置仓库3.添加依赖,添加fastjson的依赖4.打包项目3、...
    99+
    2024-04-02
  • 一篇文章带你搞定JAVA反射
    目录1、反射的概念1、概念2、获取字节码文件对象的方式2.1 元数据的概念2.2 获取class对象的方式1、访问权限2、获取方法2.1 访问静态方法2.2 访问类方法 3...
    99+
    2024-04-02
  • 一篇文章带你搞定JAVA泛型
    目录1、泛型的概念2、泛型的使用3、泛型原理,泛型擦除3.1 IDEA 查看字节码3.2 泛型擦除原理4、?和 T 的区别5、super extends6、注意点1、静态方法无法访问...
    99+
    2024-04-02
  • 一篇文章带你搞定JAVA内存泄漏
    目录1、什么是内存泄漏2、内存泄漏的原因3、内存泄漏有哪些情况3.1 代码中没有及时释放,导致内存无法回收。3.2 资源未关闭造成的内存泄漏3.3 全局缓存持有的对象不使用的时候没有...
    99+
    2024-04-02
  • 一篇文章带你搞定Python多进程
    目录1.Python多进程模块2.Python多进程实现方法一3.Python多进程实现方法二4.Python多线程的通信5.进程池1.Python多进程模块 Python中的多进程...
    99+
    2024-04-02
  • 一篇文章带你入门java注解
    目录注解什么是注解内置注解元注解自定义注解实例总结注解 什么是注解 Annotation是从JDK5.0开始引入的新技术 Annotation的作用: ...
    99+
    2024-04-02
  • 一篇文章带你搞懂Java restful 接口开发
    目录1、RESTful 简介a>资源b>资源的表述c>状态转移2、RESTful 的实现3、HiddenHttpMethodFilter4、RESTful 案例4....
    99+
    2024-04-02
  • 一篇文章带你彻底搞懂Redis 事务
    目录Redis 事务简介Redis 事务基本指令实例分析Redis 事务与 ACID总结Redis 事务简介 Redis 只是提供了简单的事务功能。其本质是一组命令的集合,事务支持一...
    99+
    2022-11-13
    redis有几种部署方式 redis事务三大特性 redis怎么做到事务回滚
  • 一篇文章带你了解Java Stream流
    目录一、Stream流引入现有一个需求:1.用常规方法解决需求2.用Stream流操作集合,获取流,过滤操作,打印输出二、Stream流的格式三、获取流四、Stream流的常用方法方...
    99+
    2024-04-02
  • 一篇文章带你搞懂Java线程池实现原理
    目录1. 为什么要使用线程池2. 线程池的使用3. 线程池核心参数4. 线程池工作原理5. 线程池源码剖析5.1 线程池的属性5.2 线程池状态5.3 execute源码5.4 wo...
    99+
    2022-11-13
    Java线程池实现原理 Java线程池原理 Java线程池实现 Java线程池
  • 一篇文章带你了解Java SpringBoot Nacos
    目录1、什么是Nacos 1.1与eureka对比1.2与zookeeper对比1.3与springcloud config 对比 2、Spring Cloud Alibaba 套件...
    99+
    2024-04-02
  • 一篇文章带你了解Spring AOP 的注解
    目录1、xml 的方式实现 AOP①、接口 UserService②、实现类 UserServiceImpl③、切面类,也就是通知类 MyAspect④、AOP配置文件 applic...
    99+
    2024-04-02
  • 一篇文章带你彻底搞懂Redis 事务
    目录Redis 事务简介Redis 事务基本指令实例分析Redis 事务与 ACID总结Redis 事务简介 Redis 只是提供了简单的事务功能。其本质是一组命令的集合,事务支持一次执行多个命令,在事务执行过程中,会顺...
    99+
    2024-04-02
  • 一篇文章带你搞懂VUE基础知识
    目录VUE是什么Vue中的核心插件  VueRouterVuexaxioselement-uiVue前端整体架构 总结VUE是什么 Vue (读音 /v...
    99+
    2024-04-02
  • 一篇文章带你入门Java Script
    目录概述特点和Java的区别弱类型语言强类型语言书写位置数组函数JS中的自定义对象(扩展内容)Object形式的自定义对象JS中的事件常用的事件:动态注册基本步骤:DOM模型总结概述...
    99+
    2024-04-02
  • 一篇文章带你了解SpringMVC数据绑定
    目录1.配置web.xml2.在resources目录下配springmvc_servlet.xml3.在WEB-INF目录下新建jsp文件夹4.在java目录下新建com.sxau...
    99+
    2024-04-02
  • 一篇文章带你深入了解Java基础
    目录1、String类1.1两种对象实例化方式1.2字符串比较1.3字符串常量是String的匿名对象1.4String两种实例化方式区别1、分析直接赋值方式2、构造方法赋值1.5字...
    99+
    2024-04-02
  • 一篇文章带你了解Java基础-抽象
    目录Java基础知识(抽象)抽象抽象定义abstract的使用定义抽象类抽象类的一些注意点总结Java基础知识(抽象) 抽象 抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃...
    99+
    2024-04-02
  • 一篇文章带你了解Java基础-多态
    目录Java基础知识(多态)多态多态的定义和存在的必要条件多态的案例多态的弊端引用类型转换总结Java基础知识(多态) 多态 多态就是指程序中定义的引用变量所指向的具体类型和通过该...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作