志在指尖
用双手敲打未来

Java注解的使用

一,基本概念
Java注解是JDK5.0引进的注释机制,能够被运用在类,办法,参数等当地中,并且能够经过Java的反射机制获取注解中的内容,
注解相当于标签,能够标识办法,类或特点具有某些特征,在编译器生成的类文件时,能够被嵌入到字节码中。别的用户能够自界说注解,完成定制化的开发,尤其是在运用springboot进行项目开发时,咱们会经常运用注解办理spring容器的bean,从而大大提高了开发的效率。Java
二,常用注解
在开发过程中,咱们能够经常看到一些内置的注解:
@Override:用于校验该办法是否是重载办法,假如不是重载办法,而且仍是运用这个注解则会报错。
@Deprecated:用于过时的用法,假如持续运用,编译器会给出正告
@SuppressWarnings:用于指示编译器疏忽注解中声明的正告
在编写自界说注解时,也会运用一些元注解:
1,@Retention:界说了注解的保留战略(RetentionPolicy)
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)public@interfaceRetention{/***Returnstheretentionpolicy.
*@returntheretentionpolicy*/RetentionPolicyvalue();
}
其间RetentionPolicy是一个枚举类型,共有三种枚举值
(1)CLASS:此注解的缺省行为,标明在程序运转期间,注解能够被编译器保存在类文件中,但不会被虚拟机保留。
(2)RUNTIME:标明在程序运转期间,既能够被编译器保存在类文件中,也被虚拟机保留,所以注解的内容能够经过反射机制读取
(3)SOURCE:注解会被编译器丢弃
2,@Target:界说了注解的效果方针
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)public@interfaceTarget{/***Returnsanarrayofthekindsofelementsanannotationtype
*canbeappliedto.
*@returnanarrayofthekindsofelementsanannotationtype
*canbeappliedto*/ElementType[]value();
}
其间ElementType是一个枚举类型,并且标明@Target注解拥有的是枚举类型的数组,能够被指定多个值。
(1)TYPE:答应效果在类,接口或许枚举声明上
(2)FIELD:答应效果在特点字段上
(3)METHOD:答应效果在办法上
(4)PARAMETER:答应效果在参数上
(5)CONSTRUCTOR:答应效果在构造器上
(6)LOCAL_VARIABLE:答应效果在本地变量上
(7)ANNOTATION_TYPE:答应效果在注解类型上
(8)PACKAGE:答应效果在包上
JDK1.8之后,新增TYPE_PARAMETER和TYPE_USE两个特点
(9)TYPE_PARAMETER:答应效果在类型参数上
(10)TYPE_USE:答应效果在运用类型的当地上
3,@Documented界说注解能够包含在javadoc中
4,@Inherited:标明注解能够被子类集成运用
三,自界说注解
1,运用关键字@interface进行自界说注解,注解内容能够指定注解特点的类型,缺省值等
1@Documented2@Retention(RetentionPolicy.RUNTIME)3@Target({ElementType.METHOD,ElementType.FIELD})4public@interfaceMyAnnotation{56intid()default0;78String[]value();9}
自界说的注解MyAnnotation包含id和value两个特点,其间特点id的类型为int,且缺省值为0,特点value的类型为String数组。
注意,在声明特点时,特点名后跟的小括号一定要加上。@MyAnnotation标明能够被运用在办法或特点字段上,并且被编译器保存在类文件中,一直驻留在JVM虚拟机中,所以能够经过反射访问到注解中的内容。
2,运用办法
1publicclassUser{23@MyAnnotation(value={“male”,”female”})4publicvoidgetUser(Stringname,intage){56System.out.println(“user:[“+name+”,”+age+”]”);7}8}
@MyAnnotation被运用在getUser办法上,并且指定注解的vlue特点值为male和female
3,运用反射获取注解
1publicclassMyAnnotationTest{23publicstaticvoidmain(String[]args)throwsException{456Useruser=newUser();7//经过返回获取实例8ClassuserClass=User.class;910Methodmethod=userClass.getMethod(“getUser”,String.class,int.class);11//运用反射调用办法12method.invoke(user,”Rose”,24);1314//获取办法上的MyAnnotation注解15if(method.isAnnotationPresent(MyAnnotation.class)){1617//获取办法上的注解实例18MyAnnotationannotation=method.getAnnotation(MyAnnotation.class);1920String[]value=annotation.value();2122for(Stringv:value){23System.out.printf(“%s”,v);24}25}else{26System.out.println(“没有应用MyAnnotation注解”);27}2829System.out.println();3031//获取办法上的一切注解32Annotation[]annotations=method.getAnnotations();33for(Annotationannotation:annotations){34System.out.println(annotation);35}3637}3839}
运用Java的反射机制获取办法上的注解内容,经过Method类的getAnnotation办法能够获取到指定的注解,getAnnotations办法能够获取到办法上的所用注解。
运转成果:
四,小结
注解相当于标签,运用反射机制能够获取到注解中的内容,能够效果在类,办法,参数等当地,使其具有某些特点,经过注解对程序进行标识来完成特定的处理,让编写的程序更加简练。

未经允许不得转载:IT技术网站 » Java注解的使用
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载