java注释相关总结

[size=x-large][color=blue]
java 注释相关内容总结:
1 java的内置注释
java.lang中的内置注释:
Deprecated 用@Deprecated注释的程序元素一般不鼓励程序元使用,通常因为他很危险或者存在更好的选择

Override 表示一个方法声明打算重写写超类中的另一个方法声明,即其要覆盖超类中的方法内容
SupressWarning 指示应该在注释元素中取消显示指定的编译器警告

java.lang.Annotation中的注释
Document 指示某一类型的注释将通过javadoc和类似的默认工具ed进行文档化,这样在其他类中使用被Documented注释的注释时可以被import,否则不可以

Inherited 指示注释类型被自动继承 Retention 指示注释类型的注释要保留多久
RetentionPolicy 注释保留策略。此枚举类型的常量描述保留注释的不同策略。它们与 Retention 元注释类型一起使用,以指定保留多长的注释 CLASS 编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。 RUNTIME 编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。 SOURCE 编译器要丢弃的注释。

Target 指示注释类型所适用的程序元素种类 如果注释类型声明中不存在 Target 元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制。 例如,此元注释指示该声明类型是其自身,即元注释类型。它只能用在注释类型声明上
@Target(ElementType.ANNOTATION_TYPE)
public @interface MetaAnnotationType {
... }
ElementType 是一个枚举其常量有:
ANNOTATION_TYPE
          注释类型声明
CONSTRUCTOR
          构造方法声明
FIELD
          字段声明(包括枚举常量)
LOCAL_VARIABLE
          局部变量声明
METHOD
          方法声明
PACKAGE
          包声明
PARAMETER
          参数声明
TYPE
          类、接口(包括注释类型)或枚举声明



2 自定义注释
package Test_annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;

/*
* 元注解@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.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
*        
*     @Documented 将此注解包含在 javadoc 中
*    
*     @Inherited 允许子类继承父类中的注解
*  
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
/*
* 定义注解 Test
* 注解中含有两个元素 id 和 description
* description 元素 有默认值 "no description"
*/
public @interface Test {
public int id();
public String description() default "no description";
}

使用注解 和 解析注解的实例

package Test_annotation;

import java.lang.reflect.Method;

public class Test_1 {
/*
* 被注解的三个方法
*/
@Test(id = 1, description = "hello method_1")
public void method_1() {
}

@Test(id = 2)
public void method_2() {
}

@Test(id = 3, description = "last method")
public void method_3() {
}

/*
* 解析注解,将Test_1类 所有被注解方法 的信息打印出来
*/
public static void main(String[] args) {
Method[] methods = Test_1.class.getDeclaredMethods();
for (Method method : methods) {
/*
* 判断方法中是否有指定注解类型的注解
*/
boolean hasAnnotation = method.isAnnotationPresent(Test.class);
if (hasAnnotation) {
/*
* 根据注解类型返回方法的指定类型注解
*/
Test annotation = method.getAnnotation(Test.class);
System.out.println("Test( method = " + method.getName()
+ " , id = " + annotation.id() + " , description = "
+ annotation.description() + " )");
}
}
}

}

输出结果如下:

Test( method = method_1 , id = 1 , description = hello method_1 )

Test( method = method_2 , id = 2 , description = no description )

Test( method = method_3 , id = 3 , description = last method )

你可能感兴趣的:(java)