您的位置:首页 > 编程语言 > Java开发

java注释

2015-06-17 13:45 399 查看
 java用  @interface Annotation{ } 定义一个注解类。
@Override,@Deprecated,@SuppressWarnings为常见的3个注解。

注解相当于一种标记,在程序中加上了注解就等于为程序加上了某种标记,以后,

JAVAC编译器,开发工具和其他程序可以用反射来了解你的类以及各种元素上有无任何标记,看你有什么标记,就去干相应的事。

      注解@Override用在方法上,当我们想重写一个方法时,在方法上加@Override,当我们方法

的名字出错时,编译器就会报错,如图:



       注解@Deprecated,用来表示某个类的属性或方法已经过时,不想别人再用时,在属性和方法

上用@Deprecated修饰,如图:



 

  注解@SuppressWarnings用来压制程序中出来的警告,比如在没有用泛型或是方法已经过时的时候,

 如图:
  


注解@Retention可以用来修饰注解,是注解的注解,称为元注解。

Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,

这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 RententionPolicy使用。RetentionPolicy有3个值:CLASS  RUNTIME   SOURCE

用@Retention(RetentionPolicy.CLASS)修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,但不会被虚拟机读取在运行的时候;

用@Retention(RetentionPolicy.SOURCE )修饰的注解,表示注解的信息会被编译器抛弃,不会留在class文件中,注解的信息只会留在源文件中;

用@Retention(RetentionPolicy.RUNTIME )修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时,一般使用这个才能在运行时被其他类识别

所以他们可以用反射的方式读取。RetentionPolicy.RUNTIME 可以让你从JVM中读取Annotation注解的信息,以便在分析程序的时候使用.

package com.Annotation;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
* 定义注解类
* @author dream
*
*/
@Retention(RetentionPolicy.RUNTIME)          //这样才能在运行时识别
public @interface MyAnnotation {     //在这个注解类下定义属性
String k1();         //其实是属性
String k2() default "hello";
int[] arr() default {1, 2, 3};
}


package com.Annotation;

import java.lang.reflect.Method;

/**
* 测试自定义注解类(MyAnnotation)
* @author dream
*
*/
@MyAnnotation(k1="zhang")
public class Test {
@MyAnnotation(k1="zhang123")
public void test(){
System.out.println("testing");
}

public static void main(String[] args) {
// TODO Auto-generated method stub
Class c = Test.class;
try {
Test a1 = (Test)c.newInstance();
Method method = c.getMethod("test", new Class[]{});
if(Test.class.isAnnotationPresent(MyAnnotation.class)){
System.out.println("MyAnnotation");
}else{
System.out.println("No MyAnnotation");
}
if(method.isAnnotationPresent(MyAnnotation.class)){
System.out.println("method yes");
MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
System.out.println(annotation.k1());
System.out.println(annotation.k2());
int a12[] = annotation.arr();
for(int k:a12){
System.out.println(k);
}
}else{
System.out.println("method no");
}

} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: