Java注解(1)-注解基础
注解(Annotation)是在JAVA5中开始引入的,它为在代码中添加信息提供了一种新的方式。注解在一定程度上把元数据与源代码文件结合在一起,正如许多成熟的框架(Spring)所做的那样。那么,注解到底可以做什么呢?
1、注解的作用。
- 提供用来完整地描述程序所需要的信息,如编译期校验程序信息。
- 生成描述符文件,或生成新类的定义。
- 减轻编写“样板”代码(配置文件)的负担,可以使用注解自动生成。
- 更加干净易读的代码。
- 编译期类型检查。
2、Java提供的注解
Java5内置了一些原生的注解,它们仅次于java.lang包下(不止于此):
- @Override,表示当前的方法定义将覆盖超类中的方法。
- @Deprecated,标识元素为弃用的,如果程序员使用了注解为它的元素,编译器会发出警告信息。
- @SuppressWarnings,关闭不当的编译器警告信息。
以上注解均为源码级别注解(即为RetentionPolicy.SOURCE标注,需要注意的是,虽然@Deprecated是由RetentionPolicy.CLASS标注,但是所起的作用主要还是在编译期),仅编译器可读取,编译成class将会舍弃,当然,运行时就更不会存在了。
Java还提供了一些元注解,用于自定义注解(meta-annotations),如@Target、@Retention、@SupportedSourceVersion等。java.lang.annotation包中的元注解:
@Retention 指定标识的注解如何保存。
RetentionPolicy.SOURCE
– 注解将仅保存在源代码级别,将会被编译器丢弃。RetentionPolicy.CLASS
– 将会在编译时期使用,并保存在class中,但JVM不会识别此。RetentionPolicy.RUNTIME
– 此注解将会被JVM识别,理论上将会在任意时期都会存在。
@Documented 表明该注解标识的元素所使用的注解应该出现在javadoc中。
@Target 指定哪种JAVA元素可以使用当前定义的注解,指定类型(ElementType)如下:
ElementType.ANNOTATION_TYPE
注释类型声明。ElementType.CONSTRUCTOR
构造方法声明。ElementType.FIELD
字段声明(包括枚举常量)。ElementType.LOCAL_VARIABLE
局部变量声明。ElementType.METHOD
方法声明。ElementType.PACKAGE
包声明。ElementType.PARAMETER
参数声明。ElementType.TYPE
类、接口(包括注释类型)或枚举声明。
@Inherited 指示注释类型被自动继承。如果在注释类型声明中存在 Inherited 元注释,并且用户在某一类声明中查询该注释类型,同时该类声明中没有此类型的注释,则将在该类的超类中自动查询该注释类型。此过程会重复进行,直到找到此类型的注释或到达了该类层次结构的顶层 (Object) 为止。如果没有超类具有该类型的注释,则查询将指示当前类没有这样的注释。
注意,如果使用注释类型注释类以外的任何事物,此元注释类型都是无效的。还要注意,此元注释仅促成从超类继承注释;对已实现接口的注释无效。
@Repeatable (Java8中增加)使用此注解注释的注解,在使用时是可重复使用的。注意,在Java8之前注解同一个注解在同一个元素上是不可以多次使用的。
3、定义注解
大多数时候,开发者需要自己定义注解以满足不同的需求。
定义注解,注解一般包括注解的定义、注解元素、元注解,示例如下:
package com.zenfery.example.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target (ElementType.TYPE) @Retention (RetentionPolicy.CLASS) public @interface ClassInfo { String value() default "default" ; } |
3.1、注解的定义
使用关键字@interface来定义,如上public @interface ClassInfo,注解的权限限定符仅支持public、default(包访问权限)。
3.2、元注解
如上@Target(ElementType.TYPE),表示注解ClassInfo可用于类、接口、或者枚举类型。
3.3、注解元素
注解元素使用类似普通方法的定义格式,如上述例子中的value(),使用default指定默认值。注解元素在使用时必须有值,要么是默认值,要么在使用注解是提供元素的值。且注解元素的值不能为null值。
注解元素的可用类型有:所有的基本类型、String、Class、enum、Annotation、以上类型的数组。如果使用复杂类型的注解,可使用注解的嵌套来实现。如果程序员的注解中定义了名为value的元素,并且在应用该注解的时候,如果该元素是唯一需要赋值的一个元素,那么此时无需使用名-值对的语法,而只需在括号内给出value元素所需的值即可。
3.4、注解不支持继承
不可使用extends关键字继承某个@interface。可以使用嵌套来实现相似的功能。
4、注解的使用
如果要使用以上的注解,可像如下这种方式使用:
package com.zenfery.example.annotation.clazz; import com.zenfery.example.annotation.ClassInfo; @ClassInfo ( "这是HelloAnnotation类。" ) public class HelloAnnotation { } |
转载请注明:子暃之路 » Java注解(1)-注解基础
Java注解(1)-注解基础的更多相关文章
- Java中的注解基础
一.元注解 元注解的作用就是负责注解其他注解. 1.@Target @Target用来指明注解所修饰的目标,包括packages.types(类.接口.枚举.Annotation类型).类型成员(方法 ...
- java 注解 + 自定义注解的使用
java中元注解有四个: @Retention @Target @Document @Inherited: @Retention:注解的保留位置 @Retention(RetentionPolicy ...
- Java反射,注解,以及动态代理
Java反射,注解,以及动态代理 基础 最近在准备实习面试,被学长问到了Java反射,注解和动态代理的内容,发现有点自己有点懵,这几天查了很多资料,就来说下自己的理解吧[如有错误,望指正] Java ...
- 细说java系列之注解
写在前面 Java从1.5版本之后开始支持注解,通过注解可以很方便地实现某些功能,使用得最普遍的就是Spring框架的注解,大大简化了Bean的配置. 注解仅仅是一种Java提供的工具,并不是一种编程 ...
- 【转】JAVA反射与注解
转载自:https://www.daidingkang.cc/2017/07/18/java-reflection-annotations/ 前言 现在在我们构建自己或公司的项目中,或多或少都会依赖几 ...
- java注解学习(1)注解的作用和三个常用java内置注解
今天,记录一下自己学习的关于注解方面的知识. Annotation是从JDK5.0开始引入的新技术 Annotation的作用: -不是程序本身,可以对程序做出解释(这一点和注释没什么区别) -可以被 ...
- Java 自定义注解与注解解析实例
在学习Java之后会遇到很多的注解,有加载JavaBean的注解:@Component,@Service,@Controller:有获取配置文件中数值的注解@Value:有获取Http请求的数据的注解 ...
- Java 8——重复注解和注解的作用范围的扩大化
一.重复注解 在某些情况下,希望将相同的注解应用于声明或类型用途.从Java SE 8发行版开始,重复注解使可以执行此操作. 例如,正在编写代码以使用计时器服务,该服务使能够在给定时间或某个计划上运行 ...
- Java学习之==>注解
一.概述 关于注解,首先引入官方文档的一句话:Java 注解用于为 Java 代码提供元数据.作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的.接下我将从注解的定义. ...
随机推荐
- freemarker中的split字符串分割
freemarker中的split字符串分割 1.简易说明 split分割:用来根据另外一个字符串的出现将原字符串分割成字符串序列 2.举例说明 <#--freemarker中的split字符串 ...
- ubuntu14.04 64位 安装Tomcat
ubuntu14.04 64位 安装Tomcat 1 下载Tomcat 在htt://www.tomcat.apache.org官网上下载apache-tomcat-7.0.57.tar.gz 2 解 ...
- Flex中对表格中某列的值进行数字格式化并求百分比
1.问题背景 一般的,需要对表格中某列的数值进行格式化,对该数值乘以100,并保留两位小数,添加"%" 2.实现实例 <?xml version="1.0" ...
- 求助:关于sql如何统计时间的问题
三.现在我们假设应用计时分为app应用和web应用,需要考虑如下几个方面: (1)多时间段(2)表中有冗杂数据 (3)用户是在web端和app端都登陆,这种类型的重复时间段只能取其一 存在数据: 存在 ...
- Eclipse远程debug服务器
一,找端口号 二,Eclipse配置 三,测试是否成功 四,结束远程debug
- Javascript设计模式(1)
本文是学习了<JavaScript设计模式>(谢廷晟 译)做的学习笔记 一.JavaScript的灵活性 1. 普通 functon function startAnimation() { ...
- GridView 翻页 索引超出范围
事件回顾 今天GridView翻页时,又遇到错误:索引超出范围.必须为非负值并小于集合大小. 这是当时的PageIndexChanging和RowCommand两个事件的后台代码 protected ...
- 【BZOJ2049】洞穴勘测(Link-Cut Tree)
[BZOJ2049]洞穴勘测(Link-Cut Tree) 题面 题目描述 辉辉热衷于洞穴勘测. 某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别 ...
- 【BZOJ1207】【HNOI2004】打鼹鼠(动态规划)
[BZOJ1207][HNOI2004]打鼹鼠 题面 BZOJ题面 题解 考虑到m的范围只有10000 O(m^2)的复杂度是可以接受的 所以直接暴力DP 每次枚举前面出现的鼹鼠 检查是否能够转移过来 ...
- [NOI2006]神奇口袋
题面在这里 题意 开始时袋中有\(t\)种小球,第\(i\)种小球有\(t_i\)个,之后每次等概率取出一个球,第\(i\)次取球时观察这个球的颜色\(c_i\)放回并向袋中加入\(d\)个颜色为\( ...