论坛首页 入门技术论坛

corejava辅导(17--1)

浏览 1241 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-03  

JAVA5.0 的注释 (Annotation)

 

描述代码的代码。给编译器看的代码,作用是规范编译器的语法。

class Student{

     @Override

     public String toString(){

         return “student”;

     }

 

}

类型(接口)

1.        标记注释

标记注释中没有属性,所以也不需要为属性赋值

@Override

 

2.      单值注释

单值注释中只能定义一个属性。

@注释名(prameter=10

       int parameter

 

特例:

@注释名 (value “134” )(当单值注释的属性名为value时,可以省略属性名,直接写值)

 

@SuperessWarning({“ddd”,”aaa”,”ccc”})  //JVM还没有实现这个注释

 

3.普通注释(多值注释)

(key1=value,……)

 

4.自定义注释

public  @interface Test{

 

}

 

在自定义注释时,要用注释来注释(描述)注释。

@Target(value={……}),用来描述自定义注释所适用的程序元素的种类单值注释

这个注释的值只能是ElementType枚举值,只能使用以下的值

ANNOTATION_TYPE 注释类型声明

CONSTRUCTOR 构造方法声明

FIELD 属性声明(包括枚举常量)

LOCAL_VARIABLE 局部变量声明

METHOD 方法声明 (常用)

PACKAGE 包声明

PARAMETER 参数声明

TYPE 类、接口(包括注释类型)或枚举声明(常用)

例:

@Target({ElementType.METHOD, ElementType .TYPE})//表示这个注释可用的范围,这个注释可以用在方法和类型及接口。

 

@Retention(value=……),描述(注释)注释能够保留到什么时候。单值注释

其中的值只能是以下的RetentionPolicy枚举的值

CLASS 编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。

RUNTIME  编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。

SOURCE 编译器要丢弃的注释。

例:

@Retention(RetentionPolicy.RUNTIME)

// 编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。

 

@Documented表示某一类型的注释将通过 javadoc 和类似的默认工具进行文档化

 

@Inherited 表示注释类型该注释会被自动继承

 

注释的属性类型可以是8种基本类型StringEnumClassAnnotation以及它们的数组

 

例:

@Test()

public class MyClass2 {

     @Test()

     public void study(String name){

         System.out.println("Study "+name);

     }

    

     @Test(value="Meal")//单值注释

     @Author(value={@Name(firstName="Liu",lastName="Chunyang"),@Name(firstName="Xue",lastName="Hiloo")})//单值注释中是用数组类型地赋值方法

     public void eat(String food){

         System.out.println("Eat "+food);

     }

}

 

自定义注释的写法

例:

import java.lang.annotation.*;

@Target({ElementType.METHOD})

//表示这个注释可用的范围,这个注释只能用在方法之上。

@Retention(RetentionPolicy.RUNTIME)

// 编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。public @interface Author {

     Name[] value();

/*

定义注释的属性,注意属性后面要价括号,这个属性既是属性又是方法,可以返回属性的值

*/

}

 

import java.lang.annotation.*;

@Target({ElementType.METHOD,ElementType.TYPE})//这个注释可用于类,接口和方法

@Retention(RetentionPolicy.RUNTIME)

public @interface Test {

     String value() default "ABC" ;//定义注释的属性及其默认值

}

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics