范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

花个几分钟,带你再了解一下Java注解

  注解(Annotation)是在java 1.5开始引入的,它是java中很重要的一个知识点。现在使用的很多框架,例如:SpringBoot、Hibernate等都大量的使用了注解。  注解是什么
  注释是元数据的一种形式,提供有关程序的数据,而不是程序本身的一部分。注解对它们所注解的代码的操作没有直接影响。 它是Java中的一种特殊标记。  注解的用途
  我们说注解的用途的前提是默认它是跟反射一起使用的,不然的话注解也就失去了它本来的作用了。注解有很多用途,比如:日志、权限、Spring中IOC等等都可以用注解来完成的。但是,总的来说有以下用途:  编译器信息:可用于编译器检测错误或抑制警告。  编译时和部署时处理: 软件工具可以处理注释信息以生成代码、XML文件等。  运行时处理: 可以在运行时检查一些注解。  生成文档:可以通过使用@Documented元注解,在需要的时候生成文档  标准注解
  标准注解有10个,其中java.lang包下有5个分别是以下五个:  「@Override」 : 检查该方法是否是重写了父类或者接口的方法,如果父类或者接口的方法删除或者被更改,编译器将提示报错。 「@Deprecated」 :标记某个类、方法、属性等是否被弃用,在不推荐使用某个方法、类、属性等时,可以使用。 「@SuppressWarnings」 :告诉编译器还可以忽略这个警告。 「@SafeVarargs」 : Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。 「@FunctionalInterface」 :Java 8 开始支持,表明该接口是一个匿名函数或函数式接口。 元注解
  元注解也是java标准注解,只不过它们比较特殊,是作用在注解上的注解。元注解都在java.lang.annotation包下。  「@Documented」 :标记这些注解是否包含在用户文档中。 「@Target」 :标记注解类型适用的java元素的种类。一些可能的值是 TYPE、METHOD、CONSTRUCTOR、FIELD 等。如果不存在目标元注释,则可以在任何程序元素上使用注释。 「@Inherited」  :表示允许子类继承父类中的注解。如果父类中使用了@Inherited注解,子类也就拥有了这个注解,子类通过Class对象的getAnnotation() 方法就能获取到父类中的注解。 「@Retention」  :标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。它采用 RetentionPolicy 参数,其可能值为 SOURCE、CLASS 和 RUNTIME 「@Repeatable」 :Java 8 开始支持,标识某注解可以在同一个声明上使用多次。 注解的分类
  注解有5类,分别是:  标记注解:唯一的目的是标记一个声明。这些注释不包含任何成员,也不包含任何数据。@Override是标记注解的一个示例。  单值注解:顾名思义就是只有一个成员的注解,并且允许以简写形式指定成员的值。我们只需要在应用注解时指定该成员的值,不需要指定成员的名称。例如: @TestAnnotation("测试")  完整注解:由多个数据成员、名称、值、对组成的注解。例如: @TestAnnotation(owner="公众号:索玛理", value="suncodernote")  类型注解:可以应用于任何使用类型的地方的注解。例如,可以作为方法的返回类型。  @Target(value = ElementType.TYPE_USE) public @interface TypeAnnoDemo { }  public class AnnotationTest {   public static void main(String[] args) {       @TypeAnnoDemo String string = "局部变量被类型注解注解";       type();   }   static @TypeAnnoDemo Integer type(){       System.out.println("返回值被类型注解注解");       return 0;   } }重复注解:重复注解指的就是被  @Repeatable 注解进行修饰的注解。 注解的定义
  注解和接口的定义差不多,只不过注解多了个  「@」  符号。定义一个注解时有以下4点比较重要: 注解中的方法不能有参数。  注解中方法的返回值必须是基本数据类型、String、枚举、注解或者数组。  注解中的方法可以有默认值  注解上可以使用元注解  自定义注解
  要自定义一个注解,有两个关键参数ElementType和RetentionPolicy必须要了解一下:  ElementType
  ElementType是一个枚举类型,它做为数组在@Target注解中出现。作用是对Java程序中注解可能出现的语法位置进行简单分类。  public enum ElementType {     TYPE,     FIELD,     METHOD,     PARAMETER,     CONSTRUCTOR,     LOCAL_VARIABLE,     ANNOTATION_TYPE,     PACKAGE,     TYPE_PARAMETER,     TYPE_USE }
  类型   可以应用的地方
  TYPE  作用于类、接口(包括注解类型)或者枚举类
  FIELD    作用于属性
  METHOD  作用于声明的方法
  PARAMETER    作用于方法参数
  CONSTRUCTOR  作用于构造方法
  LOCAL_VARIABLE    作用于局部变量
  ANNOTATION_TYPE  作用于其他注解
  PACKAGE    作用于包
  TYPE_PARAMETER  java 1.8引入的,作用于泛型参数
  TYPE_USE    java 1.8引入的,作用于任何使用类型的地方
  ElementType 中有些作用范围广的常量是可以替代其他常量的,就比如TYPE_USE可以可以替代PARAMETER 、LOCAL_VARIABLE 、FIELD等。  RetentionPolicy
  注解的保留策略,在注解 @Retention 中声明,它表示要保留注解到哪种地步。 public enum RetentionPolicy {     SOURCE,     CLASS,     RUNTIME }SOURCE:源码级别,编译期就会被抛弃用不到  CLASS:默认级别,编译期会被编译到类文件中,但在运行时获取不到。  RUNTIME:编译期会被编译到类文件中,运行时可以获取到,可以通过反射获取到。  小试牛刀自定义一个注解CustomAnnotation
  ElementType枚举一共有10常量,这里就不一一测试了,感兴趣的自己可以来回测测。 自定义的注解想要在运行时获取到RetentionPolicy一定要设置成RUNTIME,否则找不到会报错。  @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE , ElementType.METHOD , ElementType.FIELD , ElementType.TYPE_PARAMETER, ElementType.LOCAL_VARIABLE , ElementType.PARAMETER , ElementType.TYPE_USE}) public @interface CustomAnnotation {     String name() default "";      /**      * 在某个地方只有某个ElementType能起作用      * @return      */     ElementType type() default ElementType.TYPE;      /**      * 能多个ElementType在同一个地方起作用的数组      * @return      */     ElementType[] types() default {}; }测试使用
  下面是对上面自定义注解@CustomAnnotation的使用,可以看到有的地方使用了types方法,有的使用了type方法。可以发现使用types 的地方都有ElementType.TYPE_USE的身影,java 8加的这个常量使用范围是真的广,能代替其他大部分常量了已经。  @CustomAnnotation(types ={ElementType.TYPE_USE , ElementType.TYPE} ) public class AnnotationTest<@CustomAnnotation(name = "泛型参数" , types ={ElementType.TYPE_USE , ElementType.TYPE_PARAMETER} ) T> {      @CustomAnnotation(types ={ElementType.TYPE_USE , ElementType.FIELD})     private String field;      public static void main(String[] args) {         @CustomAnnotation(types ={ElementType.TYPE_USE , ElementType.PARAMETER}) String string = "局部变量被类型注解注解";              }      static @CustomAnnotation(types ={ElementType.TYPE_USE , ElementType.METHOD} ) Integer type(){         System.out.println("返回值被类型注解注解");         return 0;     }      @CustomAnnotation(type = ElementType.METHOD)     static void method(){         System.out.println("作用在方法");     }      static void param(@CustomAnnotation(types ={ElementType.TYPE_USE , ElementType.PARAMETER}) Integer p){} }
  在自定义注解 @CustomAnnotation 中,将@Targe t元注解中的ElementType.TYPE_PARAMETER 删除,测试类AnnotationTest 不会报错,但是如果把ElementType.TYPE_USE , ElementType.TYPE_PARAMETER 两个都删除的话,就会看到报错,这是因为 ElementType.TYPE_USE 能代替ElementType.TYPE_PARAMETER 。具体ElementType.TYPE_USE能代替几个ElementType枚举中的常量,感兴趣的话,自己可以动手测试一下。
  获取注解
  前面说过注解要搭配着反射使用才有用,没有要注解也没啥大的用处。  static void getCustomAnnotation() throws NoSuchMethodException {        AnnotationTest annotationTest = new AnnotationTest<>();       final Class<? extends AnnotationTest> annotationTestClass = annotationTest.getClass();       //获取类上的注解       final CustomAnnotation classAnnotation = annotationTestClass.getAnnotation(CustomAnnotation.class);       System.out.println("类上的注解"+Arrays.toString(classAnnotation.types()));        //获取泛型上的注解       final TypeVariable<? extends Class<? extends AnnotationTest>>[] typeParameters = annotationTestClass.getTypeParameters();        for (TypeVariable<? extends Class<? extends AnnotationTest>> typeParameter : typeParameters) {           final CustomAnnotation annotation = typeParameter.getAnnotation(CustomAnnotation.class);           System.out.println("泛型上的注解:"+annotation);       }        //获取方法上的注解       final Method[] declaredMethods = annotationTestClass.getDeclaredMethods();       for (Method declaredMethod : declaredMethods) {           final Annotation[] declaredAnnotations = declaredMethod.getDeclaredAnnotations();           for (Annotation declaredAnnotation : declaredAnnotations) {               System.out.println("方法名="+declaredMethod+",注解="+declaredAnnotation);           }       }   }
  结果:
  总结
  注解是Java中很重要的一个知识点,用起来也简单。它是类、方法、属性等的一个标记,搭配反射使用能够出奇效。
  参考资料:
  https://www.geeksforgeeks.org/annotations-in-java/

美版问答网中国高铁有多先进?海外网友世界学习的对象中国高铁有多先进?这是一名外国网友在美版问答网提出的问题。如果说我国有哪些让世界眼前一亮的成就,那么高铁肯定是其中之一,甚至已经达到了成为国家名片的地步。虽然高铁技术最早源自日本,十位青年科研工作者凭碳中和相关科研成果获第二届青山科技奖3月1日,第二届青山科技奖获奖名单正式揭晓,10位青年科研工作者凭借碳中和相关科研议题及成果,荣获本届青山科技奖,每位获奖科研工作者均将获得100万元资金支持。本届获奖人均为45周害怕工作被AI替代?人工智能时代,如何选择一份低危职业即使程序型工作做得再好,门口来了一排机器,这个社会也将不再需要你。一直在一个公司做行政,钱少,领导也不待见。想学财务,考证以后可以当会计但是听很多人说人工智能时代来了,很多工作都会爆冷,本想着江苏南钢能和内蒙古扳手腕,结果G1就不敌浙江稠州!WCBA里,四川远达美乐无疑是独一档的球队,赛季一场不败就是最好的证明。而其后,基本就是内蒙古农信了,而由于江苏南钢曾经战胜过内蒙古女篮,让人对她也产生期待,认为能和内蒙古扳扳手腕全国总工会党组传达学习党的二十届二中全会精神原标题全国总工会党组传达学习党的二十届二中全会精神(引题)深入学习贯彻习近平总书记重要讲话精神组织动员广大职工凝心聚力奋勇拼搏(主题)中工网北京3月2日电(工人日报中工网记者郑莉朱株洲市副公安局长凌娅投案,或许跟13年前轰动一时的太子奶案有关今天一条株洲市公安局原党委委员副局长,现任株洲市公安局二级高级警长凌娅涉嫌严重违纪违法,主动投案的新闻刷爆了各大网络。据公开资料显示,凌娅,女,1964年生,现年59岁,17岁开始江苏女孩苏晓琳身高110厘米,12年前嫁1。75米帅小伙,现状如何2011年,身高只有110厘米的江苏女孩苏晓琳嫁给了身高1。75米的河北帅小伙杨海军。婚后不久,苏晓琳怀孕了,这让家人们都很担心。苏晓琳可不是个子低那么简单,她患有罕见病,全身器官您家孩子身高体重达标吗?新标准3月1日起实施,对照看看吧来源山西晚报3月1日,新版7岁以下儿童生长标准开始实施。该标准主要起草人首都儿科研究所生长发育研究室研究员李辉表示,新标准更符合当今我国儿童自身的生长发育特征。但该标准不能作为诊断为何现在孩子动不动就抑郁,还特别叛逆?最近一段时间我出差比较少,和家里小孩待在一起的时间比较久,越发觉得现在小孩子的心思太难懂了,真的有些迷茫不知道该如何教育孩子了。现在的孩子不缺吃不缺穿,只要提出要求,家长就会尽力满保护牙齿,从乳牙开始!乳牙很重要,一定要帮孩子保护好乳牙看到一位妈妈分享从她发现娃牙齿有问题到必须要进行治疗这期间仅仅用了3周的时间。她的孩子需要洁牙然后涂氟最后做窝沟封闭,这过程期间孩子是比较痛苦的,可以选择用小毛巾把孩子包裹住,医生贵州农村女孩,1岁烧伤半边脸,小学学历嫁给北大高材生身价千万好内容我来评贵州农村女孩,1岁烧伤半边脸,小学学历嫁给北大高材生,如今身价千万,她就是童话故事里的女主角作者田祥玉来源婚姻与家庭杂志IDhunyinyujiating992022年
怎么看待朱之文的书法?我本来就不喜欢朱之文此人二不挂武,他根本没有什么功底,仅凭出道时假装老实和嗓子,在其人的吹虚下,走到了现在,其实演艺圈没有什么标准来给他们扣在个人身上,如果他写的4个字就要买20万批评和指责李铁有用吗?国足沦落是李铁一个人的过错吗?中国足球到今天是足协的责任!怎么说都不没过,要不就是中国国情不适合有足球这项运动,如果有,作为娱乐项目可以,竞赛就不要去想了!国家为了发展足球运动浪费了多少纳税人的钱啊!换来的是沮美轮美奂的连江浦口郑氏宗祠连江县位于福建省东南沿海闽江口北岸,是福州下辖县。其东与台湾马祖列岛一衣带水,西傍省会福州,南扼闽江入海口,北控闽浙通道,连江南部琯头重镇与琅岐岛隔江相望,西部与福州市马尾区长安村广州至神农架恢复直航雪中的神农架天燕景区羊城晚报讯记者许张超李志文,通讯员南宣摄影报道26日,广州至神农架直飞航班正式复航,该航班即日起每周三周五周日各执行一个往返航班,广州至神农架航班为7时35分出海南免签政策不明确新加坡旅客感困惑作者刘柳中国3月15日恢复海南入境免签政策,但这项政策却让一些想要说走就走去海南的新加坡民众困惑,有人被告知要免签去海南仍须参加旅行团,但也有人在未办签证情况下顺利入境海南。海南入频频被张家界惊艳!港澳来湘踩线团不虚此行湖南日报新湖南客户端3月27日讯(记者刘涛)今天上午,在考察完张家界桑植县中国工农红军第二方面军长征出发地纪念馆后,疫后首个来湘港澳旅行商踩线团结束了首站行程,频频被张家界惊艳到的高校最美春色大比拼!你想和谁一起欣赏?大学里的春天,从来不会让人失望。东南大学校园内,粉白的樱花随风摇曳,阳光从花间倾洒在课桌上,如梦似幻浙江农林大学校园内,枝头缀满的花团锦簇将本就如画的校园装点得更为动人武汉大学校园肾不好,在什么时候表现的最明显?肾不好,肯定是会影响夫妻生活的,但是肾不好,真的是在夫妻生活时候表现最明显吗?这是在很多男性面临肾不好时候,会经常问及我们医生的问题,会不会影响夫妻生活?感觉不一样?或者直接就没了前几天又听说一个很有钱的抑郁症病人跳楼了,为什么一些人有钱后就容易抑郁呢?抑郁和有钱没钱关系不大。我一个好哥哥,有钱不说自己还很有能力很有才艺,大家都羡慕他。当时我们关系比较近一点,还有另外一个玩艺术的老大哥。经常都会在酒吧聊聊天。他经常对我说,他说也不买卖基金,你都踩过哪些奇葩的大坑?我踩过的大坑如下1前海开源基金经理曲杨的所有基金全是大坑我踩中了其中的8只基金它们分别是0011020016790020790018370018750054540107170107股票如何做T解套?我可以负责任的告诉你,股票被套后做T的,都不是高手!如果是做短线,那么高手会在达到一定跌幅后止损出局,而做中长线,会进行逢低分批吸纳,说做T摊低成本解套的都不是高手,靠的也不是多高