ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java中注解的作用

2022-10-30 12:51:35  阅读:160  来源: 互联网

标签:javaJDK java 虚拟机 布局 数据 代码 程序


一、什么叫java注解
注释,说白了,注释,便是对某一事情开展添加注释表明,会储放一些信息,这些数据很有可能对将来某一时间段而言还是非常有用处。Java注释也叫java标注,java带来了一套体制,促使我们能对方法、类、主要参数、包、域及其自变量等加上规范(即另附一些信息内容)。且在日后某一时间段根据反射面将注明的数据抓取出去以便应用。

二、自定Java标注

1为何要自定义注解
Java从1.5版本号之后默认设置内嵌三个标明:
@Override:可以用在方式之上的,用于让别人知道这一个方法是什么改变成员变量的。
@Deprecated:提议他人尽量不要用老旧API时用的,编译程序的时候就会用造成警告信息,能够设定为程序流程中的每一个原素上.
@SuppressWarnings:这一个种类能来临时把一些警告信息信息关掉.
可是,只是这三个标明是无法满足大家开发设计时一些的需求。因此java容许大家自定义注解来用。

2怎样自定义注解
自定流程主要分为二步:1),根据@interface关键词(留意,不是interface,是@interace)申明注释名字,及其注释中的一员特性或是称为注释的主要参数。2),使用java内嵌的四个元注释对于这个自定注明的性能和范畴进行一些限定那么问题来了,什么叫元注释?

3什么叫元注释
元注释,便是界定注释的注解,换句话说这种元注释是的作用是专门用于管束其他注释的注解。请差别上边那三个注释,她们都是通过元注释界定而成的。元注释都有哪些呢,主要包括四个@Target,@Retention,@Documented,@Inherited
元注释有:@Target,@Retention,@Documented,@Inherited
@Target表明该注释用以哪些地方,可能性的ElemenetType主要参数包含:
ElemenetType.CONSTRUCTOR构造器申明
ElemenetType.FIELD域申明(包含enum案例)
ElemenetType.LOCAL_VARIABLE静态变量申明
ElemenetType.METHOD方式申明
ElemenetType.PACKAGE包申明
ElemenetType.PARAMETER主要参数申明
ElemenetType.TYPE类,插口(包含注释种类)或enum申明
@Retention表示在什么级别储存该注释信息内容。可供选择的RetentionPolicy主要参数包含:
RetentionPolicy.SOURCE注释要被编译程序丢掉
RetentionPolicy.CLASS注释在class文件中可以用,却会被VM丢掉
RetentionPolicy.RUNTIMEVM将于运行期也保存注解,因而能通过反射机制载入注释的数据。
@Documented将这一注释包含于javadoc中
@Inherited容许子类继承父类里的注释
4自定和使用注释实例
自定一个类级别标明Description
packagelighter.javaeye.com;
importjava.lang.annotation.Documented;
importjava.lang.annotation.ElementType;
importjava.lang.annotation.Retention;
importjava.lang.annotation.RetentionPolicy;
importjava.lang.annotation.Target;
@Target(ElementType.TYPE)//这一标明用于类
@Retention(RetentionPolicy.RUNTIME)//标明会一直保存到运行中
@Documented//将这一注释包含于javadoc中
public@interfaceDescription{
Stringvalue();
}
再定义个方法级别注释Name
packagelighter.javaeye.com;
importjava.lang.annotation.Documented;
importjava.lang.annotation.ElementType;
importjava.lang.annotation.Retention;
importjava.lang.annotation.RetentionPolicy;
importjava.lang.annotation.Target;
//留意这儿的@Target与@Description里的差异,主要参数组员也不尽相同
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public@interfaceName{
Stringoriginate();
Stringcommunity();
}
随后应用上述2个注释
packagelighter.javaeye.com;
@Description(value="javaeye,做最出色的开发软件交流社区")
publicclassJavaEyer{
@Name(originate="创办人:robbin",community="javaEye")
publicStringgetName()
{
returnnull;
}
@Name(originate="创办人:江南白衫",community="springside")
publicStringgetName2()
{
return"使用二位的cd一用,写这一个事例,请见谅!";
}
}
表明:在其中标明“@Description(value=“javaeye,做最出色的开发软件交流社区”)”,能够写出“@Description(“javaeye,做最出色的开发软件交流社区”)”,结论也是一样的。由于Description标明界定时其主要参数(换句话说特性)为value。而value比较特别,它被特定主要参数的时候也可以无需标注的表达出来。不过如果界定时参数名不是value反而是其他的例如des,那样应用注释时,务必表明写下参数名,然后取值:@Description(Des=”xxx”)
获取出注释的数据
packagelighter.javaeye.com;
importjava.lang.reflect.Method;
importjava.util.HashSet;
importjava.util.Set;
publicclassTestAnnotation{
/**
*authorlighter
*表明:实际关天Annotation的API用法请参阅javaDoc文档
*/
publicstaticvoidmain(String[]args)throwsException{
StringCLASS_NAME="lighter.javaeye.com.JavaEyer";
Classtest=Class.forName(CLASS_NAME);
Method[]method=test.getMethods();
booleanflag=test.isAnnotationPresent(Description.class);
if(flag)
{
Descriptiondes=(Description)test.getAnnotation(Description.class);
System.out.println("叙述:"+des.value());
System.out.println("-----------------");
}
//把JavaEyer这一类有运用到@Name的所有方式储存到Set中来
Setset=newHashSet();
for(inti=0;i{
booleanotherFlag=method[i].isAnnotationPresent(Name.class);
if(otherFlag)set.add(method[i]);
}
for(Methodm:set)
{
Namename=m.getAnnotation(Name.class);
System.out.println(name.originate());
System.out.println("建立的小区:"+name.community());
}
}
}

标签:javaJDK,java,虚拟机,布局,数据,代码,程序
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有