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注解的信息,以便在分析程序的时候使用.
@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(); } } }
相关文章推荐
- code::Blocks生成的dll 在 java jni 调用遇到的问题
- 随笔:spring+quartz定时任务(1)
- 由于对必需的库\jdk1.7.0\jre\lib\rt.jar 具有一定的访问限制问题 解决方法
- Hashtable 删除元素, 抛出异常 java.util.ConcurrentModificationException
- 三大框架(SSH)关于URL转发乱码问题(最简单暴力的一种解决办法)
- Spring+MyBatis多数据源配置实现
- Spring+MyBatis多数据源配置实现
- maven环境搭建、Eclipse安装
- Java生成和操作Excel文件
- mybatis+springmvc缓存设置
- 从URL获取文件保存到本地的JAVA代码
- Java并发编程-16-线程执行器-Executor Framework
- java.net.SocketException: Connection reset 硬件防火墙也有罪?
- myeclipse内存溢出
- JDK自带VM分析工具jps,jstat,jmap,jconsole
- 【javaweb】左边选择右边展现的tld
- JAVA语法基础之函数的使用说明
- JAVA:当数据库重启后连接池没有自动识别的解决办法
- Java_Web三大框架之Struts2
- day05 Java基础