`
风车车
  • 浏览: 1021 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

基础技能之注解

 
阅读更多

定义

  • 也叫作元数据。一种代码级别的说明。他是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以生命在包、类、字段、方法、局部变量、方法参数等的前面,用于对这些元素进行说明,注释。

作用的分类

  • 编写文档:通过代码里标识的元数据生成文档
  • 代码分析:通过代码里标识的元数据对代码进行分析
  • 编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查

如何定义一个注解

    示例如下

@interface 注解名称{

}

  

一、可以为其添加相应的参数,参数的定义为:【类型  参数名称()  default  属性值】或者【类型  参数名称()】。如果没有为参数定义默认值,则使用该注解时,此参数为必填项。

 

@interface Style{
	String background() default "blue"; //设置默认值
	int fontSize() ;  //没有设置默认值,则使用本注解时,该参数必填
	String[] padding() default {"0"};
	enum Color{ BULE,RED,GREEN};
	boolean gnore() default false;
}

@Style(fontSize=1)
class Table{	
	
}

public class ZhujieTest {

	public static void main(String[] args) {
	Method m;
	try {
                 //获取方法上的注解。获取字段、类的注解的方式和获取方式的注解方式类似。 
		m = Table.class.getMethod("a",null);
		System.out.println(m);
		System.out.println(m.getDeclaredAnnotations().length);
		System.out.println(m.getAnnotations().length);		
		System.out.println(m.getAnnotation(Style.class));//获取指定的注解

	} catch (NoSuchMethodException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SecurityException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}	
	}
}

 

 

 

注解参数可以支持的数据类型:

  1. 所有的基本类型(int,float,boolean,byte,double,char,long,short)
  2. String类型
  3. Class类型
  4. enum类型
  5. Annoatation类型
  6. 以上所有类型的数组

注:基本类型的包装类也不支持。

 

二、4个标准的meta-annotation类型,它们被用来提供对其他annotation类型作说明。它们分别是

  1. @Target  用来说明注解所修饰的对象范围
  2. @Retention  定义了该注解所保留的时间长短
  3. @Documented  用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化
  4. @Inherited  元注解的一个标记注解。该是否能被子类所继承。

@Target,若未使用添加该注解,则使用位置不受限制。其取值(ElementType)如下:

CONSTRUCTOR 用于描述构造器
FIELD 用于描述域
LOCAL_VARIABLE 用于描述局部变量
METHOD 用于描述方法
PACKAGE 用于描述包
PARAMETER 用于描述参数
TYPE 用于描述类、接口(包括注解类型) 或enum声明

 

@Retention,被描述的注解在什么范围内失效。其取值(RetentionPoicy)如下

 

SOURCE 在源文件中有效(即源文件保留)
CLASS 在class文件中有效(即class保留)
RUNTIME 在运行时有效(即运行时保留)

 

其关系:RUNTIME 包含CLASS,CLASS 包含SOURCE。

注:若不添加该注解,则默认是保留在class文件内有效。只有设置为RUNTIME,才能通过反射获取到。

 

@Documented

     用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。

 

@Inherited

    是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。

 

注意:@Inherited annotation类型是被标注过的class的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。

 

当@Inherited annotation类型标注的annotation的Retention是RetentionPolicy.RUNTIME,则反射API增强了这种继承性。如果我们使用java.lang.reflect去查询一个@Inherited annotation类型的annotation时,反射代码检查将展开工作:检查class和其父类,直到发现指定的annotation类型被发现,或者到达类继承结构的顶层。

 

 

 

总结:若希望通过反射获取注解,请添加  @Retention(RetentionPolicy.RUNTIME);

           若希望指定注解的使用范围,请使用注解@Target,后面指定范围属性;

           若希望类的注解能被子类应用,则使用@Inherited ;方法的注解重载后不能被继承。

           若参数只有一个,则可以将参数名称设置为value;在使用该注解时,参数名称可以忽略不写。如下示例:

     

 

@interface V{
	String value();
}

@interface V2{
	String val();
}

@V("") //可以忽略参数名
@V2(val="") //参数名必填
class CV{
	
	@V(value ="")
	public void v1(){}
}

 

分享到:
评论

相关推荐

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    尽量不在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,而且是整个应用的基础常量。 单选 10.集合在遍历过程中,有时需要对符合一定条件的元素进行删除,下列哪些说法是正确的:B A .在 foreach ...

    Java零基础 - Java中的注释.md

    本文档详细介绍了Java中的注释类型,包括单行注释、多行注释和文档注释。示例代码演示了如何在Java程序中使用这些注释。通过学习本文,您将了解以下内容: 不同类型的注释及其用途; 如何在Java程序中正确使用注释...

    零基础学C#全彩扫描明日科技出版

    《零基础学C#》是针对零基础编程学习者全新研发的C#入门教程。...书中所有知识都结合具体实例进行讲解,设计的程序代码给出了详细的注释,可以使读者轻松领会C#程序开发的精髓,快速提高开发技能。

    [.Net] 零基础学C#(全彩版) 明日科技

    书中所有知识都结合具体实例进行讲解,设计的程序代码给出了详细的注释,可以使读者轻松领会C#程序开发的精髓,快速提高开发技能。 本书通过大量实例及一个完整项目案例,帮助读者更好地巩固所学知识,提升能力;随...

    零基础学C#课后源码

    自购零基础学C#课后源代码从初学者角度出发,通过通俗易懂的语言、流行有趣的实例,...书中所有知识都结合具体实例进行讲解,设计的程序代码给出了详细的注释,可以使读者轻松领会C#程序开发的精髓,快速提高开发技能。

    Java基础课程全套笔记.zip

    《Java基础课程全套笔记.doc》是一份珍贵的学习资源,专为那些希望深入研究和掌握Java编程高级概念的学习者和开发者而创建。以下是对这个资源的详细描述: 全面的高级主题覆盖:这份文档涵盖了Java编程的高级主题,...

    python基础实验报告答案-20192221实验一《Python程序设计》实验报告.pdf

    python基础实验报告答案_20192221实验⼀《Python程序设 计》实验报告 学号 2019-2020-2 《Python程序设计》实验x报告 课程:《Python程序设计》 班级:1922班 姓名:叶蕊馨 学号:20192221 实验教师:王志强⽼师 ...

    零基础学C#+代码+视频+光盘资料 提取码4xvw

    《零基础学C#》是针对零基础编程学习者全新研发的C#入门教程。...书中所有知识都结合具体实例进行讲解,设计的程序代码给出了详细的注释,可以使读者轻松领会C#程序开发的精髓,快速提高开发技能。

    java技能总结.docx

    掌握Java语法和基础:掌握Java的语言特性、数据类型、运算符、控制结构、面向对象编程等基础知识点。 掌握Java标准库:掌握Java标准库中的重要类和接口,如String、ArrayList、HashMap、Thread、Socket等。 掌握Java...

    教学在线留言答疑系统,JavaWeb基础,servlet jsp filter,原生jdbc.zip

    它包含了从基础到高级的完整知识体系,以及实际项目操作的全部流程。具体内容包括: 项目背景与目标:详细介绍了“系统管理”项目的起源、目的和核心功能。 技术栈概览:涵盖了Spring、SpringMVC、MyBatis等主流...

    JAVA高并发高性能高可用高扩展架构视频教程

    JavaWeb之基础(手写实现Tomcat服务器) java多线程编程 纯手写实现SpringIOC实现过程 JEE企业级开发(企业级项目开发权威指南) 网络爬虫之JAVA正则表达式 手写springMVC框架 老司机带你透析springMVC内部实现方式 打造...

    《Java程序设计案例教程》教学课件02Java语言基础.pptx

    技能目标 能够在MyEclipse IDE中定义标识符、变量和常量;使用关键字及分隔符。 01 能够在MyEclipse IDE中编写适当的Java注释。 02 能够在MyEclipse IDE中运用基本数据类型并进行数据类型转换。 03 能够在MyEclipse...

    基础课程,《程序设计基础(C语言)》课程仓库.zip

    确保所选主题既具有挑战性又能够展示你的C语言编程技能。 进行问题分析:一旦确定了项目主题,你需要对问题进行深入分析。这包括确定问题的输入和输出、理解问题的要求和限制条件,以及将复杂问题分解为更小的子问题...

    编程技能训练与等级考试辅导:程序设计基础.ppt

    * * 程序设计基础 1 程序设计的方法和风格 2 结构化程序设计 3 面向对象方法 程序设计的方法与风格 良好的程序设计风格:书写源程序的习惯、程序代码的逻辑结构与习惯的编程技术。 1.源程序文档化 命名要见名知意:...

    新手学Java7编程(第5版)

    首先从基础讲起,介绍了如何编译和运行java程序,然后讨论了关键字、语法和一些结构,它们共同构成了java语言的核心。之后,《新手学java7编程(第5版)》介绍了java的一些高级特性,包括多线程程序设计和泛型。最后以...

    基于HTML+CSS实现2024新年烟花绽放(源码)

    通过本项目,您可以学习到如何利用前端技术创建动态烟花效果,从而为网页...通过本资源的学习和实践,你不仅能够为新年增添精彩的烟花效果,还能在此过程中提升自己的前端开发技能,为未来的更多创意项目奠定坚实的基础

    基于Python+OpenCV实现的之人机交互打地鼠源码+超详细注释+实验报告+演示视频.zip

    基于Python+OpenCV实现的之人机交互打地鼠源码+超详细注释+实验报告+演示视频.zip 实验报告 ### 实验类别 勇于创新类 ### 实验主题 其他 ### 实验内容 手势识别版打地鼠 ![myImg](56600791D64D4136BEBE86266721...

    Java高级工程师简历模板18k+

    1.具有扎实的Java基础,对面向对象编程有深刻的理解,熟练掌握java IO流、集合、多线程、反射,泛型,注解,网络编程等基础开发技术; 2.熟练使用常用的java集合类以及常用集合的源码,熟悉多线程以及同步容器以及...

    Spring Boot RESTful 投票系统服务端(具有注解驱动的鉴权功能).zip

    毕业设计是高等教育阶段学生在完成学业前所进行的一项...总的来说,毕业设计是高等教育中的一项重要环节,通过此过程,学生不仅能够巩固所学知识,还能培养独立思考和解决问题的能力,为将来的职业发展奠定坚实的基础。

    C#从入门到精通 .pdg电子书下载

    这本电子主要包括C#从基础到高级,从零开发学C#。所有知识都结合具体实例进行介绍,涉及的程序代码给出了详细的注释,可以使读者轻松领会C#应用程序开发的精髓,快速提高开发技能。

Global site tag (gtag.js) - Google Analytics