在Java中,注解(Annotation)引入始于Java5,用来描述Java代码的元信息,通常情况下注解不会直接影响代码的执行,尽管有些注解可以用来做到影响代码执行。
注解可以做什么
Java中的注解通常扮演以下角色
- 编译器指令
- 构建时指令
- 运行时指令
其中
- Java内置了三种编译器指令,本文后面部分会重点介绍
- Java注解可以应用在构建时,即当你构建你的项目时。构建过程包括生成源码,编译源码,生成xml文件,打包编译的源码和文件到JAR包等。软件的构建通常使用诸如Apache Ant和Maven这种工具自动完成。这些构建工具会依照特定的注解扫描Java代码,然后根据这些注解生成源码或文件。
- 通常情况下,注解并不会出现在编译后的代码中,但是如果想要出现也是可以的。Java支持运行时的注解,使用Java的反射我们可以访问到这些注解,运行时的注解的目的通常是提供给程序和第三方API一些指令。
注解基础
一个简单的Java注解类似与@Entity
。其中@
的意思是告诉编译器这是一个注解。而Entity
则是注解的名字。通常在文件中,写法如下
1 2 |
|
注解元素
Java注解可以使用元素来进行设置一些值,注解中的元素类似于属性或者参数。定义包含元素的注解示例代码
1 2 3 |
|
使用包含元素的注解示例代码
1
|
|
上述注解的元素名称为tableName
,设置的值为vehicles
。没有元素的注解不需要使用括号。
如果注解包含多个元素,使用方法如下
1
|
|
如果注解只有一个元素,通常我们的写法是这样的
1
|
|
但是这种情况下,当且仅当元素名为value,我们也可以简写,即不需要填写元素名value
,效果如下
1
|
|
注解使用
注解可以用来修饰代码中的这些元素
- 类
- 接口
- 方法
- 方法参数
- 属性
- 局部变量
一个完整的使用示例如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
内置的Java注解
Java中有三种内置注解,这些注解用来为编译器提供指令。它们是
- @Deprecated
- @Override
- @SuppressWarnings
@Deprecated
- 可以用来标记类,方法,属性。
- 如果上述三种元素不再使用,使用@Deprecated注解
- 如果代码使用了@Deprecated注解的类,方法或属性,编译器会进行警告。
@Deprecated使用很简单,如下为注解一个弃用的类。
1 2 3 4 |
|
当我们使用@Deprecated注解后,建议配合使用对应的@deprecated JavaDoc符号,并解释说明为什么这个类,方法或属性被弃用,已经替代方案是什么。
1 2 3 4 5 6 7 |
|
@Override
@Override注解用来修饰对父类进行重写的方法。如果一个并非重写父类的方法使用这个注解,编译器将提示错误。
实际上在子类中重写父类或接口的方法,@Overide并不是必须的。但是还是建议使用这个注解,在某些情况下,假设你修改了父类的方法的名字,那么之前重写的子类方法将不再属于重写,如果没有@Overide,你将不会察觉到这个子类的方法。有了这个注解修饰,编译器则会提示你这些信息。
使用Override注解的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
@SuppressWarnings
- @SuppressWarnings用来抑制编译器生成警告信息。
- 可以修饰的元素为类,方法,方法参数,属性,局部变量
使用场景:当我们一个方法调用了弃用的方法或者进行不安全的类型转换,编译器会生成警告。我们可以为这个方法增加@SuppressWarnings注解,来抑制编译器生成警告。
注意:使用@SuppressWarnings注解,采用就近原则,比如一个方法出现警告,我们尽量使用@SuppressWarnings注解这个方法,而不是注解方法所在的类。虽然两个都能抑制编译器生成警告,但是范围越小越好,因为范围大了,不利于我们发现该类下其他方法的警告信息。
使用示例
1 2 3 4 |
|
创建自己的注解
在Java中,我们可以创建自己的注解,注解和类,接口文件一样定义在自己的文件里面。如下
1 2 3 4 5 6 |
|
上述代码定义了一个叫做MyAnnotation的注解,它有4个元素。再次强调一下,@interface
这个关键字用来告诉java编译器这是一个注解。
仔细一看,你会发现,注解元素的定义很类似于接口的方法。这些元素有类型和名称。这些类型可以是
- 原始数据类型
- String
- Class
- annotation
- 枚举
- 一维数组
如下为应用自定义的注解
1 2 3 4 5 6 7 8 9 10 |
|
注意,我们需要为所有的注解元素设置值,一个都不能少。
注解元素默认值
对于注解中的元素,我们可以为其设置默认值,使用方法为
1 2 3 4 5 6 |
|
上述代码,我们设置了value元素的默认值为空字符串。当我们在使用时,可以不设置value的值,即让value使用空字符串默认值。 使用示例代码
1 2 3 4 5 6 7 8 |
|
@Retention
@Retention是用来修饰注解的注解,使用这个注解,我们可以做到
- 控制注解是否写入class文件
- 控制class文件中的注解是否在运行时可见
控制很简单,使用使用以下三种策略之一即可。
- RetentionPolicy.SOURCE 表明注解仅存在源码之中,不存在.class文件,更不能运行时可见。常见的注解为@Override, @SuppressWarnings。
- RetentionPolicy.CLASS 这是默认的注解保留策略。这种策略下,注解将存在与.class文件,但是不能被运行时访问。通常这种注解策略用来处于一些字节码级别的操作。
- RetentionPolicy.RUNTIME 这种策略下可以被运行时访问到。通常情况下,我们都会结合反射来做一些事情。
@Retention的使用示例
1 2 3 4 5 6 7 |
|
@Target
使用@Target注解,我们可以设定自定义注解可以修饰哪些java元素。简单示例
1 2 3 4 5 6 7 |
|
上述的代码说明MyAnnotation注解只能修饰方法。
@Target可以选择的参数值有如下这些
- ElementType.ANNOTATION_TYPE(注:修饰注解)
- ElementType.CONSTRUCTOR
- ElementType.FIELD
- ElementType.LOCAL_VARIABLE
- ElementType.METHOD
- ElementType.PACKAGE
- ElementType.PARAMETER
- ElementType.TYPE(注:任何类型,即上面的的类型都可以修饰)
@Inherited
如果你想让一个类和它的子类都包含某个注解,就可以使用@Inherited来修饰这个注解。
1 2 3 4 5 6 |
|
1 2 |
|
1
|
|
上述代码的大致意思是
- 使用@Inherited修饰注解MyAnnotation
- 使用MyAnnotation注解MySuperClass
- 实现一个类MySubclass继承自MySuperClass
通过以上几步,MySubClass也拥有了MyAnnotation注解。
关于Java中的注解,一些基本的概念就是这些。
相关推荐
Java 元注解详解 Java 元注解是 Java 注解的重要特性,它们是用于修饰注解的注解。Java 元注解的作用是通过使用 Java 元注解,可以为注解指定:作用范围、生命周期、是否可重复和是否继承等信息,从而提高注解的...
Java注解技术是Java平台中一个非常重要的特性,它为元数据提供了强大的支持,使得开发者能够在代码中嵌入额外的信息,这些信息可以被编译器、JVM或第三方工具读取和处理。在本视频教程中,我们将深入探讨Java注解的...
在编程世界中,Java注解(Annotation)是一个强大的工具,它允许程序员在代码中嵌入元数据,这些元数据不直接影响程序的运行,但可以被编译器或运行时环境用来进行各种处理。Android开发中,注解同样扮演着重要角色...
本篇文章将深入探讨Java注解的使用及其在实际开发中的应用。 首先,我们了解Java注解的基本结构。一个注解以`@`符号开头,后面跟着注解类型,如`@Override`或`@Deprecated`。注解可以带有参数,参数以键值对的形式...
Java 注解详解 Java 注解(Annotation)是 JDK 5.0 及以后版本引入的一个特性。它是一个新的类型,与接口类似,位于同一个层次,称为 Java 的一个类型(TYPE)。注解可以声明在包、类、字段、方法、局部变量、方法...
Java 元注解详解 Java 元注解是 Java 语言中的一种特殊的注解,用于定义其他的注解。元注解的作用是提供一种机制,用于定义和描述其他注解的行为和范围。Java 中提供了多种元注解类型,每种元注解类型都有其特定的...
### Java注解详解 #### 一、注解(Annotation)简介 注解是Java语言自JDK 5.0版本引入的一种新特性,用于在代码中添加元数据(即关于数据的数据)。它允许开发人员向Java编译器、工具和其他框架提供额外的信息,而不...
在本文中,我们将详细介绍 Java 自定义注解的实例详解,包括如何创建自定义注解、如何使用反射来获取注解信息 oraz 如何使用自定义注解来实现特定的功能。 一、Java 注解的基本概念 Java 注解是一种特殊的标记,它...
Java注解,也称为Annotation,是自JDK 5.0版本起引入的一种元数据机制,它为程序提供了额外的信息,这些信息可以在编译时或运行时被解析和使用。元数据是描述数据的数据,注解就是一种特殊的数据类型,可以用于修饰...
结合这两个概念,我们可以在自定义注解中定义特定的行为,然后通过BeanPostProcessor来处理这些注解。例如,可以创建一个`@Transactional`的自定义注解,用于标记那些需要事务管理的方法。然后,实现一个...
Java注解机制之Spring自动装配...Java注解机制之Spring自动装配实现原理详解是指Spring框架中使用Java注解机制来实现自动装配功能的机制,该机制可以根据注解信息来自动将Bean对象关联起来,从而实现了自动装配功能。
Java自定义注解的详解 Java 注解(Annotation)是一种元数据,它提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容。在这个教程中,我们将学习 Java 的注解,如何定制注解,注解的使用以及如何通过...
Java 程序使用 JPA 注解详解 Java 持久层 API(Java Persistence API)是一种 Java 应用程序接口,用于访问、管理和持久化数据之间的关系。JPA 使用注解来定义实体类与数据库表之间的映射关系,本文将详细介绍 JPA ...
Java注解是编程语言的一种元数据机制,它们允许程序员在代码中嵌入额外的信息,这些信息可以在编译时或运行时被编译器或虚拟机使用。Java从1.5版本开始引入注解,现在已经成为许多现代Java框架,如Hibernate、Jersey...
Java基础(5-8) - 注解机制详解 Java中的注解机制是从JDK1.5版本开始引入的特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。它主要的作用有四方面:生成文档、编译检查、编译时...
Java注解,也称为标注,是Java开发中的一个重要特性,自JDK 5.0引入。它们提供了一种元数据的方式,允许程序员在代码中添加信息,这些信息可以在编译时或运行时被编译器或Java虚拟机(JVM)处理。注解不同于Javadoc,...
Java 程序使用 JPA 注解详解 Java 程序使用 JPA 注解可以实现对象关系映射(ORM),使得 Java 应用程序能够与关系数据库进行交互。JPA(Java Persistence API)提供了多种注解来定义实体类与数据库表之间的映射关系...
### Spring Java注解、元注解与自定义注解详解 #### 一、Java注解简介 在深入了解Spring框架中的注解应用之前,我们首先需要对Java注解有一个基本的认识。Java注解(Annotation)是一种元数据,可以为程序代码添加...