黑马程序员--Java学习加强22--Annotation
来源:互联网 发布:手机ssh连接linux 编辑:程序博客网 时间:2024/06/18 05:46
一、注解(Annotation)简介
Annotation(注解)是JDK1.5及以后版本引入的一个新特性,注解是Java的一个新的类型(与接口很相似),它与类、接口、枚举是在同一个层次,它们都称为Java的一个类型(TYPE)。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。它的作用非常的多,例如:进行编译检查、生成说明文档,代码分析等。
JDK提供的几个基本注解
- @SuppressWarnings
该注解的作用是阻止编译器发出某些警告信息。
它可以有以下参数:
deprecation:过时的类或方法警告
unchecked:执行了未检查的转换时警告
fallthrough:当Switch程序块直接通往下一种情况而没有Break时的警告
serial: 当在可序化的类上缺少serialVersionUID定义时的警告。
finally:任何finally子句不能完成时的警告。
all:关于以上所有情况的警告。
- @Deprecated
该注解的作用是标记某个过时的类或方法。
- @Override
该注解用在方法前面,用来标识该方法是重写父类的某个方法。
二、元注解
元注解是定义在注解类的前面,注释注解的。
- @Retention
它是被定义在一个注解类的前面,用来说明该注解的生命周期。
它有以下参数:
RetentionPolicy.SOURCE:指定注解只保留在一个源文件当中。
RetentionPolicy.CLASS:指定注解只保留在一个class文件中。
RetentionPolicy.RUNTIME:指定注解可以保留在程序运行期间。
- @Target
它是被定义在一个注解类的前面,用来说明该注解可以被声明在哪些元素前。它有以下参数:
ElementType.TYPE:说明该注解只能被声明在一个类前。
ElementType.FIELD:说明该注解只能被声明在一个类的字段前。
ElementType.METHOD:说明该注解只能在一个类的方法前。
ElementType. PAEAMENTER:说明该注解只能被声明在一个方法参数前。
ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。
ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。
ElementType.ANNOTATION_TYPE:该注解可以声明在一个注解类前。
ElementType.PACKAGE:该注解可以声明在一个包前。
三、注解的生命周期
一个注解可以有三个声明周期,它默认的声明周期是保留在一个CLASS文件。但它也可以有一个@Retetion的元注解来指定它的声明周期。
- Java源文件
当在一个注解前定义了一个@@Retention(RetentionPolicy.SOURCE) 的注解,那么说明该注解只保留在一个源文件当中,当编译器将原文件编译成CLASS文件时,他不会将源文件中定义的注解保留在CLASS文件中。
- CLASS文件
当在一个注解前定义了一个@Retention(RetentionPolicy.CLASS)的注解,那么说明该注解只能保留在一个CLASS文件当中当加载CLASS文件到内存时,虚拟街会将注解去掉,从而在程序中不能访问。
- 程序运行期间
当在一个注解类前定义了一个@Retention(RetentionPolicy.RUNTIME)的注解,那么说明该注解在程序运行期间都会存在内存当中。此时,我们可以通过反射来获得定义在某个类上的所有注解。
四、注解的应用
例: 注解的定义以及反射的调用和为注解增加基本属性
import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import javax.lang.model.element.Element;@Retention(RetentionPolicy.RUNTIME)//说明注解的生命周期@Target({ElementType.METHOD,ElementType.TYPE})//说明注解声明的位置public @interface MyAnnotation {//为注解增加属性String color() default "Green";String value();int[] arrayAccet();}
public class AnnotationTest1 {@MyAnnotation(color="BULLOW",value="haha",arrayAccet={1,2,3})//自定义带属性的注解public static void main(String[] args)throws Exception{if(AnnotationTest1.class.getMethod("main", String[].class).isAnnotationPresent(MyAnnotation.class)){MyAnnotation myAnnotation=(MyAnnotation)AnnotationTest1.class.getMethod("main", String[].class).getAnnotation(MyAnnotation.class);System.out.println(myAnnotation);System.out.println(myAnnotation.color());System.out.println(myAnnotation.value());System.out.println(myAnnotation.arrayAccet().length);}}}
运行结果:
- 黑马程序员--Java学习加强22--Annotation
- 黑马程序员--Java学习加强22--反射
- 【黑马程序员】java基础加强-------注解(annotation)
- 黑马程序员——java加强学习
- 黑马程序员-->Java基础加强-->内省(Introspector)与注解(Annotation)
- 黑马程序员---java学习笔记之java加强(一)
- 黑马程序员---java学习笔记之java基础加强二
- 黑马程序员---java学习笔记之java加强(三)
- 黑马程序员-Java基础加强
- 黑马程序员--java多线程加强
- 黑马程序员-java加强-注解
- 黑马程序员-java加强-代理
- 黑马程序员---基础加强【java】
- 黑马程序员--java加强-注解
- 黑马程序员Java基础加强
- 黑马程序员--------Java基础加强
- 黑马程序员*****java高新技术加强
- 黑马程序员*****java高新技术加强
- ACE网站
- 设计模式第四讲:建造者模式
- 内部类 问题
- WebKit入门篇之cygwin的资源获取
- 黑马程序员:集合
- 黑马程序员--Java学习加强22--Annotation
- Counting Stars 全中国最准确的翻译!
- 黑马程序员:多线程
- IT网站
- 黑马程序员:异常
- ubuntu9.10 apt-get 问题
- 《自己动手写操作系统》—— 工作环境搭建
- 黑马程序员:内部类
- asp.net参数传递