毕业设计网站开发题目,百度快速排名平台,想做软件开发需要学什么,互联网公司排名500强四、如何对注释进行注释这一节的题目读起来虽然有些绕口#xff0c;但它所蕴涵的知识却对设计更强大的java程序有很大帮助。在上一节讨论了自定义注释#xff0c;由此我们可知注释在J2SE5.0中也和类、接口一样。是程序中的一个基本的组成部分。既然可以对类、接口进行注释但它所蕴涵的知识却对设计更强大的java程序有很大帮助。在上一节讨论了自定义注释由此我们可知注释在J2SE5.0中也和类、接口一样。是程序中的一个基本的组成部分。既然可以对类、接口进行注释那么当然也可以对注释进行注释。使用普通注释对注释进行注释的方法和对类、接口进行注释的方法一样。所不同的是J2SE5.0为注释单独提供了4种注释。它们是Target、Retention、Documented和Inherited。下面就分别介绍这4种注释。Target这个注释理解起来非常简单。由于target的中文意思是“目标”因此我们可能已经猜到这个注释和某一些目标相关。那么这些目标是指什么呢大家可以先看看下面的代码。Target(ElementType.METHOD)interface MyAnnotation {}MyAnnotation // 错误的使用public class Class1{MyAnnotation // 正确的使用public void myMethod1() {}}以上代码定义了一个注释MyAnnotation和一个类Class1并且使用MyAnnotation分别对Class1和myMethod1进行注释。如果编译这段代码是无法通过的。也许有些人感到惊讶没错啊但问题就出在Target(ElementType.METHOD)上由于Target使用了一个枚举类型属性它的值是ElementType.METHOD。这就表明MyAnnotation只能为方法注释。而不能为其它的任何语言元素进行注释。因此MyAnnotation自然也不能为Class1进行注释了。说到这大家可能已经基本明白了。原来target所指的目标就是java的语言元素。如类、接口、方法等。当然Target还可以对其它的语言元素进行限制如构造函数、字段、参数等。如只允许对方法和构造函数进行注释可以写成Target({ElementType.METHOD, ElementType.CONSTRUCTOR})interface MyAnnotation {}Retention既然可以自定义注释当然也可以读取程序中的注释(如何读取注释将在下一节中讨论)。但是注释只有被保存在class文件中才可以被读出来。而Retention就是为设置注释是否保存在class文件中而存在的。下面的代码是Retention的详细用法。Retention(RetentionPolicy.SOURCE)interface MyAnnotation1 { }Retention(RetentionPolicy.CLASS)interface MyAnnotation2 {}Retention(RetentionPolicy.RUNTIME)interface MyAnnotation3 {}其中第一段代码的作用是不将注释保存在class文件中也就是说象“//”一样在编译时被过滤掉了。第二段代码的作用是只将注释保存在class文件中而使用反射读取注释时忽略这些注释。第三段代码的作用是即将注释保存在class文件中也可以通过反射读取注释。Documented这个注释和它的名子一样和文档有关。在默认的情况下在使用javadoc自动生成文档时注释将被忽略掉。如果想在文档中也包含注释必须使用Documented为文档注释。interface MyAnnotation{ }MyAnnotationclass Class1{public void myMethod() { }}使用javadoc为这段代码生成文档时并不将MyAnnotation包含进去。生成的文档对Class1的描述如下class Class1extends java.lang.Object而如果这样定义MyAnnotation将会出现另一个结果。Documentedinterface MyAnnotation {}生成的文档MyAnnotation // 这行是在加上Documented后被加上的class Class1extends java.lang.ObjectInherited继承是java主要的特性之一。在类中的protected和public成员都将会被子类继承但是父类的注释会不会被子类继承呢很遗憾的告诉大家在默认的情况下父类的注释并不会被子类继承。如果要继承就必须加上Inherited注释。Inheritedinterface MyAnnotation { }MyAnnotationpublic class ParentClass {}public class ChildClass extends ParentClass { }在以上代码中ChildClass和ParentClass一样都已被MyAnnotation注释了。五、如何使用反射读取注释前面讨论了如何自定义注释。但是自定义了注释又有什么用呢这个问题才是J2SE5.0提供注释的关键。自定义注释当然是要用的。那么如何用呢解决这个问题就需要使用java最令人兴奋的功能之一反射(reflect)。在以前的JDK版本中我们可以使用反射得到类的方法、方法的参数以及其它的类成员等信息。那么在J2SE5.0中同样也可以象方法一样得到注释的各种信息。在使用反射之前必须使用import java.lang.reflect.* 来导入和反射相关的类。如果要得到某一个类或接口的注释信息可以使用如下代码Annotation annotation TestAnnotation.class.getAnnotation(MyAnnotation.class);如果要得到全部的注释信息可使用如下语句Annotation[] annotations TestAnnotation.class.getAnnotations();或Annotation[] annotations TestAnnotation.class.getDeclaredAnnotations();getDeclaredAnnotations与getAnnotations类似但它们不同的是getDeclaredAnnotations得到的是当前成员所有的注释不包括继承的。而getAnnotations得到的是包括继承的所有注释。如果要得到其它成员的注释可先得到这个成员然后再得到相应的注释。如得到myMethod的注释。Method method TestAnnotation.class.getMethod(myMethod, null);Annotation annotation method.getAnnotation(MyAnnotation.class);注要想使用反射得到注释信息这个注释必须使用Retention(RetentionPolicy.RUNTIME)进行注释。总结注释是J2SE5.0提供的一项非常有趣的功能。它不但有趣而且还非常有用。EJB3规范就是借助于注释实现的。这样将使EJB3在实现起来更简单更人性化。还有Hibernate3除了使用传统的方法生成hibernate映射外也可以使用注释来生成hibernate映射。总之如果能将注释灵活应用到程序中将会使你的程序更加简洁和强大。