`
long_yu2
  • 浏览: 334429 次
社区版块
存档分类
最新评论

java 高新技术【8】 注解

 
阅读更多
注解Annotation
JDK1.5出现的新特性。在java.lang.annotation包中。

对于过时的语句,java会提示过时了,通过@SuppressWarnings("Deprecation")在DOS中取消提示,但Eclipse无法取消。

这就是注解,相当于标记。编译器、开发工具、javac通过反射获得注解里的内容,进而明确应该做什么、不应该做什么。注解可以加在包、类、属性、方法、参数及局部变量之上。

一个注解就是一个类。@SuppressWarnings,取消警告。@Deprecated,已过时,老版可以用,新版无法用。


HashSet集合中,对象必须覆盖Object类的equals()方法,否则会继续使用Object类的equals()方法进行比较,错误的比较方法。覆盖equals()方法,参数必须一致,为了防止错误写入本类的对象,加入@Override,必须正确覆盖父类方法,不是创建新方法。

注解的应用
在源程序中,调用一个类,这个类会用到注解,需要先准备好注解类,类在调用注解类的对象。注解类的写法类似接口,@interface。先写好注解类A,将注解放在类B中,类C在调用类B时通过反射获得注解类A的内容,进而明确该做什么、不该做什么。可以加上多个注解,加上的实际是注解类的对象:@interfaceA。
main()方法必须放在一个类下,但与这个类不一定有所属关系。
在注解类A上加注解B,这个注解B只为这个注解类A服务,B称为“元注解”。类似的还有元信息、元数据。元注解有2个:Rentention和Target。对注解类的注解,可以理解为注解类的属性。


(1) Rentention注解类

注解的生命周期:Java源文件—》class文件—》内存中的字节码。编译或者运行时,都有可能会取消注解。Rentention的3种取值意味让注解保留到哪个阶段,RententionPolicy.SOURCE、RententionPolicy.CLASS(默认值)、RententionPolicy.RUNTIME。


@Override、@SuppressWarnings是默认保留到SOURCE阶段;

@Deprecated是保留到RUNTIME阶段。


Rentention相当于注解类的一个属性,因为Rentention的值不同,注解类保留到的阶段不同。注解类内部Rentention的值使用value表示,例如,@Deprecated中,value=Runtime。
Rentention的值是枚举RententionPolicy的值,只有3个:SOURCE、CLASS、RUNTIME。

(2)Target注解类

性质和Rentention一样,都是注解类的属性,表示注解类应该在什么位置,对那一块的数据有效。例如,@Target(ElementType.METHOD)


Target内部的值使用枚举ElementType表示,表示的主要位置有:注解、构造方法、属性、局部变量、函数、包、参数和类(默认值)。多个位置使用数组,例如,@Target({ElementType.METHOD,ElementType.TYPE})。
类、接口、枚举、注解这一类事物用TYPE表示,Class的父类,JDK1.5的新特性。

注解的基本属性
属性,给注解提供更加详细的信息。
注解相当于接口,属性相当于方法。例如,@ItcastAnnotation(color="red"),给属性赋值,取值时类似调用方法,例如,System.out.println(annotation.color());。


所有的属性必须全部出现,除非有缺省值。


如果只有value属性,没有其他属性,可以不写=,只针对value,例如,@SuppressWarnings("Deprecation")。或者有其他属性而且有缺省值,
例如,String color() default "blue";,此时value单独出现,不用=。



获得注解的属性的值,例如
if(AnnotationDemo.class.isAnnotationPresent(ItmAnnotation.class)){
ItmAnnotation annotation =
(ItmAnnotation)AnnotationDemo.class.getAnnotation(ItmAnnotation.class);
System.out.println(annotation.color());
}
}
利用反射获得注解的对象,在让该对象调用属性对应的方法。注意类型转换。


Rentention和Target也是属性,都是value对应的值,值的类型分别是RententionPolicy和ElementType,例如,@Retention(value=RetentionPolicy.RUNTIME)。





注解的高级属性

给注解增加高级属性,数组、枚举、注解。


【1】数组类型的属性

例如,int[] arr() default {3,7,5};,MyAnnotation(arr={3,7,6})。如果数组只有1个元素,可以不加{}。

@Target({ElementType.METHOD,ElementType.TYPE})也是数组类型的属性。

枚举类型的属性


//注解类内部的内容
EnumerationDemo.TrafficLamp lamp() default EnumerationDemo.TrafficLamp.RED;
//调用注解的类上
@ItcastAnnotation(lamp=EnumerationDemo.TrafficLamp.YELLOW)
//对注解进行操作

System.out.println(annotation.lamp().nextLamp().name());


注解类型的属性
将一个注解类作为属性加入到另一个注解类中。

MetaAnnotation annotationAtt() default @MetaAnnotation("Jobs")
@ItcastAnnotation(annotationAtt=@MetaAnnotation("Kim"))
annotation.annotationAtt().value()
注解的返回值可以是8个基本类型、String、Class、枚举以及前面类型的数组,内部还有属性。

需要详细学习注解,可以通过java语言规范,即languagespecification。






还有一个 不错的例子:

http://www.iteye.com/topic/400085

分享到:
评论

相关推荐

    Java高新技术8

    Java高新技术8涵盖了许多Java开发中的高级主题和技术,这些技术对于提升软件工程的效率、性能以及可维护性至关重要。以下是对这些高新技术的详细说明: 1. **多线程编程**:Java以其强大的多线程支持而闻名。通过...

    Java高新技术2

    Java高新技术2是一个涵盖Java编程语言高级特性和技术的专题,这些技术对于开发高效、可扩展且维护性强的应用程序至关重要。以下是一些Java高新技术的关键点: 1. **多线程编程**: - Java提供了内置的多线程支持,...

    Java高新技术3

    Java高新技术3涵盖了许多Java开发中的高级主题和技术,这些技术对于提升软件工程的效率、性能以及可维护性至关重要。以下是对这些技术的详细说明: 1. **多线程编程**:Java以其强大的多线程支持而闻名。通过实现...

    张孝祥Java高新技术_源代码

    在“张孝祥Java高新技术_源代码”这个压缩包中,我们主要聚焦的是Java编程语言的高级技术。Java作为一种广泛使用的面向对象的编程语言,它的高级特性为开发者提供了强大的工具和丰富的功能,使得软件开发更加高效和...

    张孝祥Java高新技术_73_源代码

    在"张孝祥Java高新技术_73_源代码"这个资源中,包含了许多Java基础知识的实践应用,对于初学者来说是宝贵的参考资料。以下是根据标题和描述中提及的关键技术点的详细解释: 1. **反射(Reflection)**:反射是Java...

    张孝祥老师Java基础加强(高新技术PPT课件)ppt

    【Java基础加强——高新技术在编程中的应用】 Java作为一款广泛应用的高级编程语言,其基础知识的扎实程度直接影响到程序员的开发效率和代码质量。张孝祥老师的"Java基础加强"课程,旨在通过高新技术PPT课件的形式...

    张孝祥高新技术PPT和源码

    1. **张孝祥_Java_基础加强_高新技术.ppt**:这是一个关于Java高新技术的PowerPoint演示文稿,由张孝祥老师编排。通常,这样的PPT会涵盖以下内容: - **Java高级特性**:可能包括多线程、并发控制、设计模式、反射...

    java高新面试题+++

    对于希望换工作并进入Java领域的新人来说,掌握好Java的核心概念和技术至关重要。面试时,面试官往往会通过一系列高难度的问题来评估候选人的专业能力和技术深度。以下是一些可能在Java高薪面试中遇到的关键知识点:...

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

    企业架构师必备技能(JAVA核心技术反射) JavaWeb之基础(手写实现Tomcat服务器) java多线程编程 纯手写实现SpringIOC实现过程 JEE企业级开发(企业级项目开发权威指南) 网络爬虫之JAVA正则表达式 手写springMVC框架 老...

    java android

    - 张孝祥Java高新技术教程 - **知识点详解** - **Java语法**:包括变量、数据类型、流程控制语句等基本概念。 - **面向对象**:类与对象的概念、封装、继承、多态等面向对象的核心特性。 - **常见API**:如...

    java-hibernate笔记(讲义).rar

    在面试或制作简历时,掌握Hibernate技术能显著提升Java开发者的技能水平,尤其是在申请高新职位时,熟悉并能熟练运用Hibernate是很多公司对J2EE开发者的基本要求。通过深入学习和实践这个讲义,不仅可以了解...

    张孝祥_高级j2se代码

    "张孝祥Java高新技术_73_源代码"这部分可能涵盖Java的高级技术,可能是第73个主题或章节的代码示例。这可能包括Java集合框架的深入使用,如HashMap、LinkedList、TreeSet等数据结构的实现和优化;也可能包括I/O流的...

    张孝祥老师基础加强源代码和ppt

    这份资料集包含了张孝祥老师2009年精心录制的Java高新技术视频课程,旨在为学习者提供深入浅出的基础加强教程,同时也适合作为2010年的技术贺岁之作。 Java作为一种广泛使用的编程语言,其基础知识和高级技术的掌握...

    ( Hibernate 学习笔记.rar )面试资料

    【Hibernate 学习笔记】是针对Java开发人员的一份面试准备资料,主要涵盖了J2EE企业级应用开发中的重要框架Hibernate。...对于J2EE开发者来说,精通Hibernate框架无疑能增加求职的成功率,特别是在高新技术领域。

    struts+spring+hibernate笔试题

    综上所述,Struts、Spring 和 Hibernate 是三个重要的 Java Web 开发框架和技术,它们各自有着独特的功能和优势,同时也可以相互配合使用,为开发者提供强大的工具集来构建复杂的企业级应用系统。掌握这些技术对于...

Global site tag (gtag.js) - Google Analytics