对于java注解的理解

java注解是学习java过程中一项非常实用的技能,很简单易懂,却不容忽视。
关于注解,我们知道,它是从JDK5及其以后JDK版本开始支持Java注解; Java注解(Annotation)也叫作元数据,以‘@注解名’在代码中存在,它是一种在源代码中标注的特殊标记,可以标注源代码中的类、属性、方法、参数等代码,主要用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。

Java注解按照是否含有参数分为三种:
1、不带参数,语法结构为:@Annotation

2、带一个参数的注解,语法结构为:@Annotation(参数)

3、带多个参数的注解,语法结构为:@Annotiation(参数1, 参数2, 参数3...)

java内置注解
1、@Override注解

@Override被用于标注方法,用于说明所标注的方法是重写父类的方法:

(为了支持@Override,需要将项目工程升级为1.6或其以上版本;如果升级后Java代码没问题,但是工程报错,可以通过如下操作解决:右键项目“Properties”——>“Project Facets”——>右边java项选择相应的版本就OK了。)

2、@Deprecated

@Deprecated 用于说明所标注元素(成员变量或方法)因存在安全问题或有更好选择而不鼓励程序员使用,如果强行使用,则编译器会发出警告。

@SuppressWarnings注解

@SuppressWarnings用于取消编译器所显示的警告,该注解常用属性值如下:

---deprecation:使用已被@Deprecated标注的程序元素;

---unused:程序含有未被使用的元素;

---serial:在可序列化的类上缺少serialVersionUID定义;

java自定义注解
注解语法结构如下:

[public] @interface 注解名 {

[属性1;]

[属性2;]

...

[属性n;]

}

为了更好理解,可以将定义注解属性理解为定义无参方法:返回值类型即为注解属性的数据类型,方法名即为注解属性名。

属性语法结构:

数据类型 属性名() [default 默认属性值];

注意: 注解属性默认没有默认值,如果注解中定义了无默认值的注解属性,则使用该注解时必须指定值:

如果注解属性名为value,使用该注解时可以直接赋值:

~如果注解属性的数据类型为数组类型,赋多个值时必须使用{}括起来;但若只赋一个值,则无需使用{}:

重头戏之一——元注解
Java提供了四个用于修饰自定义注解的元注解:@Target、@Retention 、@Documented和@Inherited

@Target:

用于指定被修饰的自定义注解只能用于修饰程序中哪些元素,该元注解有如下属性值:

ElementType.ANNOTATION_TYPE:应用于其他注解的元注解

ElementType.CONSTRUCTOR:应用于构造函数

ElementType.FIELD:应用于全局属性

ElementType.LOCAL_VARIABLE:应用于方法中的本地变量

ElementType.METHOD:应用于方法 ElementType.PACKAGE:应用于包

ElementType.PARAMETER:应用于方法的参数

ElementType.TYPE:应用于类、接口或者枚举声明

如下:

限制自定义注解@Override只能用来标注方法。注意:由前面知识可知大括号可以去掉。

@Retention:

用于指定被修饰的自定义注解可以保留多久,该元注解有如下属性值:

RetentionPolicy.SOURCE:编译器将直接丢弃被修饰的注解。

RetentionPolicy.CLASS:默认值,编译器将把注解记录在class文件中,当运行Java程序时,虚拟机不再保留注解;

RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中,当运行java程序时,虚拟机保留注解,程序可以通过反射获取该注解;

@Documented:执行javadoc命令时,被该元注解修饰的自定义注解也会生成在文档中,如下例:

@Inherited:

如果父类所使用的注解有@Inherited修饰,则子类可以继承该注解,否则不能继承。

那么那么那么,注解的工作原理到底是什么呢?
前面讲解了如何自定义注解,但是所定义的注解并没有起到应有的作用,比如@SuppressWarnings自定义注解并不会取消警告,那么注解究竟如何工作的呢?

————————————————————————————————————————————————————————

注解工作原理的实质是反射知识的应用。

自定义注解其实可以看成一个接口,如果单纯定义肯定起不到作用的,必须得通过反射对其添加属性和方法,使其丰富,该注解才有了实际作用。同样叫比尔盖茨,为啥只有那一个说怎样就怎样?同样叫@override,为什么系统自带的就能起作用,而我自定义的就不行呢?就是这个道理。

原文地址:https://www.cnblogs.com/anyiz/p/10605598.html

时间: 2024-11-10 06:42:20

对于java注解的理解的相关文章

java注解基础入门

前言 这篇博客主要是对java注解相关的知识进行入门级的讲解,包括**,核心内容主要体现在对java注解的理解以及如何使用.希望通过写这篇博客的过程中让自己对java注解有更深入的理解,在工作中可以巧妙的使用注解,完善自己对基础知识的理解和使用. 目录 1.注解概述 2.注解作用 3.java常见的注解 4.如何自定义注解       5.元注解       6.注解反射 1.注解的概述 注解,告诉编译器如何运行程序! 2.注解的作用 1)告诉编译器如何运行程序:         2)跟踪代码依

深入理解Java注解类型(@Annotation)

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 深入理解Java注解类型(@Annotation) - zejian的博客 - 博客频道 - CSDN.NET zejian的博客 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅的Python,终于等到你!    &am

深入理解java 注解(Annotation)重版

近期项目需要做权限验证,高手们写了一个权限验证的框架,看了一遍代码,还是和高手有差距啊~ 权限框架用到了一些注解反射啥的,所以回头看看以前写的文章<深入理解java 注解(Annotation)>,转过来,再做一些补充,做备忘使用. 一.什么是注解? 懒得去打了,搞一份wiki上的解释,自己看吧(以前可能会翻译一下,现在懒了) Annotation的使用方式及自定义注解 首先扫下盲,元注解就是Annotation的元注解一共有4个,分别为:@Target.@Retention.@Documen

深入理解java注解的实现原理

今天将从以下4个方面来系统的学习一下java注解 什么是注解 注解的用途 注解使用演示 注解的实现原理 1,什么是注解 注解也叫元数据,例如我们常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包.类.接口.字段.方法参数.局部变量等进行注解 一般常用的注解可以分为三类: 一类是Java自带的标准注解,包括@Override(标明重写某个方法).@Deprecated(标明某个类或方法过时)和@SuppressWarnings(

深入理解Java注解

什么是注解(Annotation): Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息或者任何元数据(metadata)的途径和方法.Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据. Annotation(注解)是JDK5.0及以后版本引入的.它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查.从某些方面看,annotation就像修饰符一样被使用,并应用于包

Java注解(2)-注解处理器(运行时|RetentionPolicy.RUNTIME)

如果没有用来读取注解的工具,那注解将基本没有任何作用,它也不会比注释更有用.读取注解的工具叫作注解处理器.Java提供了两种方式来处理注解:第一种是利用运行时反射机制:另一种是使用Java提供的API来处理编译期的注解. 反射机制方式的注解处理器 仅当定义的注解的@Retention为RUNTIME时,才能够通过运行时的反射机制来处理注解.下面结合例子来说明这种方式的处理方法. Java中的反射API(如java.lang.Class.java.lang.reflect.Field等)都实现了接

Java注解(3)-注解处理器(编译期|RetentionPolicy.SOURCE)

注解的处理除了可以在运行时通过反射机制处理外,还可以在编译期进行处理.在编译期处理注解时,会处理到不再产生新的源文件为止,之后再对所有源文件进行编译. Java5中提供了apt工具来进行编译期的注解处理.apt是命令行工具,与之配套的是一套描述"程序在编译时刻的静态结构"的API:Mirror API(com.sun.mirror.*).通过Mirror API可以获取到被注解的Java类型元素的信息,从而提供自定义的处理逻辑.具体的处理工具交给apt来处理.编写注解处理器的核心是两个

java注解(Annotation)解析

注解(Annotation)在java中应用非常广泛.它既能帮助我们在编码中减少错误,(比如最常见的Override注解),还可以帮助我们减少各种xml文件的配置,比如定义AOP切面用@AspectJ模式代替Schema模式,特别是最近接触了一点Spring MVC,每次编写Controller的时候用@RequestMapping(),@RequestParam,@ResponseBody等等. 我们所用的java中自带的注解都是定义好了的,直接拿来用,它就能发挥作用.当然了,自己也可以定义注

Java注解介绍

原文链接: Java Annotations: An Introduction原文日期: 2005年10月14日翻译日期: 2014年07月20日翻译人员: 铁锚 翻译完后,感觉这篇文章是不是在http://www.developer.com被挖坟了? Java注解介绍 基于注解(Annotation-based)的Java开发无疑是最新的开发趋势.[译者注: 这是05年的文章,在2014年,毫无疑问,多人合作的开发,使用注解变成很好的合作方式,相互之间的影响和耦合可以很低]. 基于注解的开发将