安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

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

9月17日 栀璃鸢投稿
  注解(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()在某个地方只有某个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})privateSpublicstaticvoidmain(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();finalC?extendsAnnotationTestannotationTestClassannotationTest。getClass();获取类上的注解finalCustomAnnotationclassAnnotationannotationTestClass。getAnnotation(CustomAnnotation。class);System。out。println(类上的注解Arrays。toString(classAnnotation。types()));获取泛型上的注解finalTypeV?extendsC?extendsAnnotationTest〔〕typeParametersannotationTestClass。getTypeParameters();for(TypeV?extendsC?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
投诉 评论 转载

索汉谈和莫里斯争论比赛有点激烈,我们都很有对抗性虎扑01月18日讯马刺在比赛中10698击败篮网。赛后,马刺球员杰里米索汉接受了采访。比赛进行过程中,索汉和马基夫莫里斯出现争执。谈到和莫里斯之间的争论,索汉说:比……整活真有效果!小春晚IG20击败RNG,他每年都能找到这种上新赛季新气象,咱们LPL新赛季已经开启有几天了,最近的比赛真是一场比一场精彩!同时在选手的登场方式上面,咱们LPL竟然开始卷起来了!刚开始大家还都是简单的整一下活,摆几个Pos……大罗发福小贝植发昔日巨星来看球,各色人生抓人眼来源:环球时报【环球时报综合报道】据英国广播公司4日报道,现年82岁的巴西足坛传奇巨星贝利于近日因呼吸道感染入院接受治疗,目前医院方面称其病情稳定。埃及《消息报》说,贝利……我们的十年故事2022生机大会及我们的十年故事翻了下自己发的朋友,才记起许多事,2017年之前每天为生活忙碌!从2017年开始我决定每年给自己放一个月假,独自旅行,就这样2017……花个几分钟,带你再了解一下Java注解注解(Annotation)是在java1。5开始引入的,它是java中很重要的一个知识点。现在使用的很多框架,例如:SpringBoot、Hibernate等都大量的使用了注……遍地尽是残血版,选择骁龙8手机小心掉坑RedmiK60、iQOONeo7竞速版、荣耀80GT盘一下最近发布的这些新机,不难发现老旗舰骁龙8好似被重新发布了一遍,下到2499元,上至8999元,价位覆盖相当丰富,大有……新的一年,你能抛弃的东西越多,就越富有作家李娟在《阿勒泰的角落》一书中说:生活永远都是在一边抛弃,一边继续。生存于世,越往前走,背负的东西越多,活得越累。很多时候,越是舍得抛弃,越是懂得留白,生活也就越……12月安全月报蔚来遭数据勒索阿里云史诗级宕机乒联被泄信息在头条看见彼此导语:随着数字化的深入普及,业务愈加开放互联。企业的关键数据、用户信息、基础设施、运营过程等均处于边界模糊且日益开放的环境中,涉及利益流和高附加值的业务面临……这个冬天没有雪郝有花(图片来自网络)研一滴淡墨用痴情的笔墨写下唇间的念让疯狂的文字在没有雪的冬天筑起一堵雪墙,阻隔唇间的一抹红我盖过章子的领域在谁的……还想赖掉?这次换中国来,给美国当头一棒,扔下4个大字曝光真凶最近,美国在对中国西北工业大学实行的网络攻击中,被中国抓个正着。根据消息显示,国家计算机病毒应急处理中心以及360公司分别发布了西北工业大学遭境外网络攻击的调查报告,而两份报告……长豆角你就按照这个方法做,绝对嘎嘎的下饭超级美味又好吃现在正是吃豆角的季节,基本上农村的家家户户都中了,不仅是因为豆角的季节性,更是因为豆角吃起来特别好吃,美味。而且我们种植的长豆角就算是生的也可以吃,在小的时候,记得家长去……未来房价涨跌的最理性分析前几天公布了金融16条措施支持房地产市场政策,很多小西装又在朋友圈开始吹房地产即将起飞的风了。具体的政策内容,这里就不给大家说了,浪费时间而已,毕竟来来去去都是那几套。……
足协追罚广东省运会假球案6人终身禁赛,暂停广州足协会员资格卫健委发布恶性肿瘤患者膳食指导探访佛山的状元村2023年汽车行业投资策略聚焦中端市场,寻找边际增量瞬息全宇宙之冥古代扎克伯格会把meta带上元宇宙的不归路吗?2022年戛纳最佳电影R级尺度,开放式结局11。11马来西亚线上对接会精准云对接,助推云洽谈工信部111月份电信业务收入累计完成14504亿元Science重磅!老树开新花,看美颜神器透明质酸如何登上顶夏天容易中毒的6种食物,千万别吃妻子的选择用得真好,孙莉高智商和高情商的表现,值得看吗?弓形虫对胎儿发育的影响公厕偷窥行为违法吗春之美物业公司通知西安一轿车失控连撞多人现场什么情况??白云边12年多少钱一瓶(12年白云边有几种包装)交通事故民事赔偿责任标准是什么?中国移动官方信息也成诈骗帮凶剖析移动诈骗新手段他10岁初入华尔街,11岁购买了人生首只股票,16岁攒到了一美丽的鼓浪屿作文400字金庸小说堪称一代人回忆,哪些经典台词,让你记忆犹新?秦淮八艳玻璃渣里找糖吃的董小宛,让人又怜又恨(2)

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利