专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

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

  注解(Annotation)是在java1。5开始引入的,它是java中很重要的一个知识点。现在使用的很多框架,例如:SpringBoot、Hibernate等都大量的使用了注解。注解是什么
  注释是元数据的一种形式,提供有关程序的数据,而不是程序本身的一部分。注解对它们所注解的代码的操作没有直接影响。它是Java中的一种特殊标记。注解的用途
  我们说注解的用途的前提是默认它是跟反射一起使用的,不然的话注解也就失去了它本来的作用了。注解有很多用途,比如:日志、权限、Spring中IOC等等都可以用注解来完成的。但是,总的来说有以下用途:编译器信息:可用于编译器检测错误或抑制警告。编译时和部署时处理:软件工具可以处理注释信息以生成代码、XML文件等。运行时处理:可以在运行时检查一些注解。生成文档:可以通过使用Documented元注解,在需要的时候生成文档标准注解
  标准注解有10个,其中java。lang包下有5个分别是以下五个:Override:检查该方法是否是重写了父类或者接口的方法,如果父类或者接口的方法删除或者被更改,编译器将提示报错。Deprecated:标记某个类、方法、属性等是否被弃用,在不推荐使用某个方法、类、属性等时,可以使用。SuppressWarnings:告诉编译器还可以忽略这个警告。SafeVarargs:Java7开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。FunctionalInterface:Java8开始支持,表明该接口是一个匿名函数或函数式接口。元注解
  元注解也是java标准注解,只不过它们比较特殊,是作用在注解上的注解。元注解都在java。lang。annotation包下。Documented:标记这些注解是否包含在用户文档中。Target:标记注解类型适用的java元素的种类。一些可能的值是TYPE、METHOD、CONSTRUCTOR、FIELD等。如果不存在目标元注释,则可以在任何程序元素上使用注释。Inherited:表示允许子类继承父类中的注解。如果父类中使用了Inherited注解,子类也就拥有了这个注解,子类通过Class对象的getAnnotation()方法就能获取到父类中的注解。Retention:标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。它采用RetentionPolicy参数,其可能值为SOURCE、CLASS和RUNTIMERepeatable:Java8开始支持,标识某注解可以在同一个声明上使用多次。注解的分类
  注解有5类,分别是:标记注解:唯一的目的是标记一个声明。这些注释不包含任何成员,也不包含任何数据。Override是标记注解的一个示例。单值注解:顾名思义就是只有一个成员的注解,并且允许以简写形式指定成员的值。我们只需要在应用注解时指定该成员的值,不需要指定成员的名称。例如:TestAnnotation(测试)完整注解:由多个数据成员、名称、值、对组成的注解。例如:TestAnnotation(owner公众号:索玛理,valuesuncodernote)类型注解:可以应用于任何使用类型的地方的注解。例如,可以作为方法的返回类型。Target(valueElementType。TYPEUSE)publicinterfaceTypeAnnoDemo{}publicclassAnnotationTest{publicstaticvoidmain(String〔〕args){TypeAnnoDemoStringstring局部变量被类型注解注解;type();}staticTypeAnnoDemoIntegertype(){System。out。println(返回值被类型注解注解);return0;}}重复注解:重复注解指的就是被Repeatable注解进行修饰的注解。注解的定义
  注解和接口的定义差不多,只不过注解多了个符号。定义一个注解时有以下4点比较重要:注解中的方法不能有参数。注解中方法的返回值必须是基本数据类型、String、枚举、注解或者数组。注解中的方法可以有默认值注解上可以使用元注解自定义注解
  要自定义一个注解,有两个关键参数ElementType和RetentionPolicy必须要了解一下:ElementType
  ElementType是一个枚举类型,它做为数组在Target注解中出现。作用是对Java程序中注解可能出现的语法位置进行简单分类。publicenumElementType{TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCALVARIABLE,ANNOTATIONTYPE,PACKAGE,TYPEPARAMETER,TYPEUSE}
  类型可以应用的地方
  TYPE作用于类、接口(包括注解类型)或者枚举类
  FIELD作用于属性
  METHOD作用于声明的方法
  PARAMETER作用于方法参数
  CONSTRUCTOR作用于构造方法
  LOCALVARIABLE作用于局部变量
  ANNOTATIONTYPE作用于其他注解
  PACKAGE作用于包
  TYPEPARAMETERjava1。8引入的,作用于泛型参数
  TYPEUSEjava1。8引入的,作用于任何使用类型的地方
  ElementType中有些作用范围广的常量是可以替代其他常量的,就比如TYPEUSE可以可以替代PARAMETER、LOCALVARIABLE、FIELD等。RetentionPolicy
  注解的保留策略,在注解Retention中声明,它表示要保留注解到哪种地步。publicenumRetentionPolicy{SOURCE,CLASS,RUNTIME}SOURCE:源码级别,编译期就会被抛弃用不到CLASS:默认级别,编译期会被编译到类文件中,但在运行时获取不到。RUNTIME:编译期会被编译到类文件中,运行时可以获取到,可以通过反射获取到。小试牛刀自定义一个注解CustomAnnotation
  ElementType枚举一共有10常量,这里就不一一测试了,感兴趣的自己可以来回测测。自定义的注解想要在运行时获取到RetentionPolicy一定要设置成RUNTIME,否则找不到会报错。Retention(RetentionPolicy。RUNTIME)Target({ElementType。TYPE,ElementType。METHOD,ElementType。FIELD,ElementType。TYPEPARAMETER,ElementType。LOCALVARIABLE,ElementType。PARAMETER,ElementType。TYPEUSE})publicinterfaceCustomAnnotation{Stringname()default;在某个地方只有某个ElementType能起作用returnElementTypetype()defaultElementType。TYPE;能多个ElementType在同一个地方起作用的数组returnElementType〔〕types()default{};}测试使用
  下面是对上面自定义注解CustomAnnotation的使用,可以看到有的地方使用了types方法,有的使用了type方法。可以发现使用types的地方都有ElementType。TYPEUSE的身影,java8加的这个常量使用范围是真的广,能代替其他大部分常量了已经。CustomAnnotation(types{ElementType。TYPEUSE,ElementType。TYPE})publicclassAnnotationTestCustomAnnotation(name泛型参数,types{ElementType。TYPEUSE,ElementType。TYPEPARAMETER})T{CustomAnnotation(types{ElementType。TYPEUSE,ElementType。FIELD})privateStringfield;publicstaticvoidmain(String〔〕args){CustomAnnotation(types{ElementType。TYPEUSE,ElementType。PARAMETER})Stringstring局部变量被类型注解注解;}staticCustomAnnotation(types{ElementType。TYPEUSE,ElementType。METHOD})Integertype(){System。out。println(返回值被类型注解注解);return0;}CustomAnnotation(typeElementType。METHOD)staticvoidmethod(){System。out。println(作用在方法);}staticvoidparam(CustomAnnotation(types{ElementType。TYPEUSE,ElementType。PARAMETER})Integerp){}}
  在自定义注解CustomAnnotation中,将Target元注解中的ElementType。TYPEPARAMETER删除,测试类AnnotationTest不会报错,但是如果把ElementType。TYPEUSE,ElementType。TYPEPARAMETER两个都删除的话,就会看到报错,这是因为ElementType。TYPEUSE能代替ElementType。TYPEPARAMETER。具体ElementType。TYPEUSE能代替几个ElementType枚举中的常量,感兴趣的话,自己可以动手测试一下。
  获取注解
  前面说过注解要搭配着反射使用才有用,没有要注解也没啥大的用处。staticvoidgetCustomAnnotation()throwsNoSuchMethodException{AnnotationTestStringannotationTestnewAnnotationTest();finalClasslt;?extendsAnnotationTestannotationTestClassannotationTest。getClass();获取类上的注解finalCustomAnnotationclassAnnotationannotationTestClass。getAnnotation(CustomAnnotation。class);System。out。println(类上的注解Arrays。toString(classAnnotation。types()));获取泛型上的注解finalTypeVariablelt;?extendsClasslt;?extendsAnnotationTest〔〕typeParametersannotationTestClass。getTypeParameters();for(TypeVariablelt;?extendsClasslt;?extendsAnnotationTesttypeParameter:typeParameters){finalCustomAnnotationannotationtypeParameter。getAnnotation(CustomAnnotation。class);System。out。println(泛型上的注解:annotation);}获取方法上的注解finalMethod〔〕declaredMethodsannotationTestClass。getDeclaredMethods();for(MethoddeclaredMethod:declaredMethods){finalAnnotation〔〕declaredAnnotationsdeclaredMethod。getDeclaredAnnotations();for(AnnotationdeclaredAnnotation:declaredAnnotations){System。out。println(方法名declaredMethod,注解declaredAnnotation);}}}
  结果:
  总结
  注解是Java中很重要的一个知识点,用起来也简单。它是类、方法、属性等的一个标记,搭配反射使用能够出奇效。
  参考资料:
  https:www。geeksforgeeks。organnotationsinjava

腾盛博药连续大跌,多位股东提前出逃,发生了什么?记者李科文编辑谢欣2月14日与15日,港股上市创新药企腾盛博药连续两日大跌。在此之前,腾盛博药已连续7个交易日下跌。截止目前,该公司从2月6日以来累计下跌超40。消息面上,腾盛博药沈北新区民政局开展婚姻家庭危机干预项目探索多元化解家庭纠纷新路径沈北新区民政局婚姻登记处作为省级婚俗文化改革试点,积极推进婚俗改革,深入开展婚姻家庭辅导服务。近日,沈北新区民政局沈北新区妇联沈阳施宇心港心理咨询有限公司,在沈北新区民政局婚姻登记发生了什么,比特币又疯涨!新年比特币强势回升,加密货币市场有所升温。2月16日,比特币交易价格持续上行,逼近25000美元关口,24小时涨幅更是超过11,引起广泛关注。这也是自2022年8月以来比特币的最高CBA一日三消息,巩大师出山,王治郅重返国青,蒋兴权化身及时雨就在刚刚,中国篮协曝出重磅消息。巩大师巩晓彬正式出山,将担任U15男篮的总经理及顾问。此前,山东和许多巩晓彬的球迷,都盘点着巩晓彬如果重新执教球队,会加盟CBA哪支球队。如今巩晓彬此人是匈奴单于后代为何自称刘邦后裔?建国号汉意欲何为?大家好我是小酱油之前头疼的十六国历史慢慢的有了些深入的了解之后发现了很多有意思的人和事。比如有个叫刘渊的都过了几十年了又想起了我们的阿斗刘禅还要追赠他为皇帝。这又是怎一回事呢?那么大贪官和珅风光半生,他被嘉庆赐死后,他的子孙后代结局又如何?嘉庆四年(1799年)正月十三,清朝历史上第一大贪官和珅被清仁宗嘉庆皇帝公布二十条大罪抄家赐死,那么和珅被赐死之后,嘉庆有没有追究他的后人呢?其实和珅算是个绝户,要不是他的儿媳给他安顺市5条旅游精品路线发布,带您感受ampampquot天下山水之秀聚于黔中ampampquot的好风光!2月14日,从安顺全域旅游产品推介会暨安旅通平台上线仪式上获悉,安顺市发布5条2023年全域旅游精品路线。据了解,此次发布的5条旅游精品新线路将以黄果树为核心,整合全市资源,推动黄天性乐观的人,总能给自己找到最好的台阶我有一个朋友,她性格很好,平时做事情不急不躁,说话总是乐呵呵的,和她在一起,再浮躁的心情也能瞬间被她抚平。她的人生哲学是凡事自有天定,你只需好好努力就行。单位的评先评优,她不争不抢足坛劲爆一夜那不勒斯21,西甲第11名62北京时间2月18日凌晨,意甲联赛法甲联赛西甲联赛沙特联赛结束了多场关键之战,那不勒斯在意甲第23轮客场20击败萨索洛,里昂在法甲第24轮爆冷12被欧塞尔逆转,赫罗纳在西甲第22轮6说说球场外的一些事随着陈戌源落马,球场外的一些事已进入高潮。这充分体现了足球主管部门在深入推进反腐斗争的坚强决心和坚定意志,以及反腐败无禁区全覆盖零容忍,不管涉及什么人什么职务,坚决一查到底绝不姑息滑行向下人生向上因为热爱,所以值得你知道张嘉豪在冬奥之后的新目标吗?了解去崇礼滑雪应该选哪种雪蜡吗?想学习直升机滑雪技巧吗?懂得如何带娃开始亲子滑雪吗?近日,张嘉豪X队长小蜗牛等雪友们熟悉的面孔首次梦幻联动,同框出
20,曼联太难了!英超豪门爆发,62控球狂轰21脚,创59年纪录热刺踢完第11轮联赛,对阵埃弗顿,孔蒂的球队以20的比分获胜,各项赛事4场不败。此役,热刺全面占优,控球率达到62,全场狂轰21脚,成功拿下3分。这场较量,哈里凯恩打进点球,赫伊别新赛季首战捷报!库里带队大胜湖人开篇大问号No。1各位看官老爷你们觉得本场湖人输球最主要的原因归根于哪一点?No。2勇士赢球最大的惊喜是什么?比赛精简北京时间上午1000坐镇主场的金州勇士迎来洛杉矶湖人的挑战,熟CBA新疆队急需调整好小外援杰克逊的状态看了新赛季新疆队的4场比赛,总体感觉新疆队今年的状态不错,说明休赛新疆队从上到下做了大量的工作,而这些工作也是卓有成效的,为新疆队重回强队行列打下了坚实的基础。但就4场比赛中出现的一裁一签!火箭核心阵容出炉,19届新秀创纪录,球队薪资榜公布随着新赛季的到来,各支球队都在为最终的阵容做充足的准备,火箭当然也不例外,而且球队在季前赛的表现不错,具备了冲击季后赛的实力。一夜过去了,火箭管理层也做出了重要决定,先是和后卫核心辟谣!网传中国女排悍将退役,本尊发声征战排超,成人气担当距离新赛季女排超级联赛开幕还有半个月的时间,中国女排的球员们结束世锦赛之后回国隔离,然后就要回归俱乐部,备战排超联赛。此前有传闻称中国女排的球员刘晏含将会退役,她在网络上非常活跃,凶多吉少!詹姆斯回应湖人开局连战6大豪强,戴维斯透露受伤真因北京时间10月18日,新赛季常规赛将于明天正式拉开帷幕,洛杉矶湖人队在揭幕战中将客场挑战上赛季的总冠军勇士队。根据最新消息显示,小特洛伊布朗托马斯布莱恩特以及施罗德将携手缺阵明天的WTT澳门冠军赛梁靖崑林高远首轮死磕,张本智和半决赛才遇国乒WTT澳门冠军赛的冠军奖金35000美元和1000积分,吸引力十足!男女单各32位球员已于昨日陆续抵达澳门,获得成都世乒赛男女团冠军的十位中国乒团成员也全部获得参赛资格!男单前八号考验陈梦的时候到了!WTT澳门冠军赛,她与伊藤美诚争半决赛名额成都世乒赛的余温还未彻底散去,WTT澳门冠军赛便火热来袭,在这个璀璨多姿的十月,来自全世界各国的乒乓球运动员,将为我们送上一场场精彩纷呈的比赛,其中,国乒选手们的比赛,自然是最让人詹姆斯签约达成!浓眉放下豪言,湖人任重而道远,老詹表态太无奈尽管有一万个不愿意,湖人球迷也必须接受他们的主队带着如今的这套阵容进入新赛季的常规赛。流言传了一整个休赛期,佩林卡也四处谈了很久,但最终,威少还是出现在了湖人的新赛季阵容大名单上。NBA新赛季来啦!那熟悉的5个字还会对湖人喊吗?这个夏天过完了,各个球队定妆照也拍完了。你喜爱的球队留下的人是你心里希望的那群人吗?说说湖人吧,湖人球迷夏天最关心的威少的去留狗头在新赛季开始前的结果肯定让很多人无可奈何,只能祈祷科比令我最难防守的球星只有两人,不是詹姆斯更不是韦德科比是NBA历史上比较少有的,既能进攻也能防守的超级巨星,可能在很多球迷心中,都会记得科比出神入化的得分场面,但也别忘了,他也是联盟顶级的防守者,在整个职业生涯,科比一共获得9次最
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网