Java注解
来源:互联网 发布:简述算法的复杂度分析 编辑:程序博客网 时间:2024/05/01 00:48
---
JDK1.5开始引入注解(`anonation`),使得我们可以在代码中添加描述和存储有关程序的额外信息(元数据),可以通过编译器在编译器对格式进行检查和验证。
## 1. 内置注解
JDK1.5预定义了三种注解,定义在`java.lang`包内。
- @Override 表示当前方法声明将覆盖超类中方法.
```
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
```
- @Deprecated 表明某个元素(方法、域声明或包等)已经废弃,不被推荐使用。一旦程序员使用了注解为@Deprecated的元素,编译器会发出警告信息。
```
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
```
- @SuppressWarnings 关闭没有必要的编译器警告信息。
```
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
String[] value();
}
```
## 2. 元注解
Java中目前除了上面提到的3种内置注解,还提供了几种元注解。元注解专门用来负责注解其他注解,看着有点绕,简单点说,就是可以通过元注解**自定义**用户需要的注解。元注解定义在`java.lang.annotation`包内。
- @Target 用于表示注解用于什么地方,通过`enum`类型的ElementType参数进行指定。
```
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
// 可以应用注解的类型集合
ElementType[] value();
}
```
ElementType指定了Java中可以标注注解的地方,包括以下几类:
```
TYPE 类、接口或`enum`声明
FIELD 域声明
METHOD 方法声明
PARAMETER 参数声明
PACKAGE 包声明
CONSTRUCTOR 构造函数声明
LOCAL_VARIABLE 局部变量声明
ANNOTATION_TYPE 注解类型声明
TYPE_PARAMETER 类型参数声明 JDK1.8引入
TYPE_USE 类型使用声明 JDK1.8引入
```
- @Retention 表示注解信息需要保存在什么级别,`RetentionPolicy`支持三种级别,默认取值是`CLASS`。
```
SOURCE 注解会被编译器丢弃
CLASS 注解编译器编译时会保留,但JVM加载时会丢弃
RUNTIME 注解在JVM运行期也会保留,并且可以通过反射机制读取注解信息
```
- @Documented 表明注解会被javadoc或类似工具使用,用于生成文档信息
- @Inherited 表明允许子类从父类中继承注解
- @Native 表明一个`field`域可能来自于`nativecode`中,JDK1.8引入
- @Repeatable
-----
## 3. 注解元素
注解的定义有点类似`interface`,但是多了`@`符号。示例如下:
```
@Tartget(ElementType.Method)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationExample {
// public String value() default "";
}
```
和类定义类似,可以在注解中包含一些元素,即`注解元素`。没有任何注解元素的注解被称为`标记注解`(marker annotation)。如例子所示,可以通过关键字`default`对`注解元素`指定默认值。`注解元素`可用的类型包括:
```
1. 所有基本类型(int, float等)
2. String
3. Class
4. enum
5. Annotation
6. 上述类型的数组
```
如果声明其他类型的`注解元素`,编译器将会报错。
编译器对`注解元素`取值要求很严格,不允许有不确定的值,要么使用默认值,要么在使用注解时给元素赋值。
JDK1.5开始引入注解(`anonation`),使得我们可以在代码中添加描述和存储有关程序的额外信息(元数据),可以通过编译器在编译器对格式进行检查和验证。
## 1. 内置注解
JDK1.5预定义了三种注解,定义在`java.lang`包内。
- @Override 表示当前方法声明将覆盖超类中方法.
```
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
```
- @Deprecated 表明某个元素(方法、域声明或包等)已经废弃,不被推荐使用。一旦程序员使用了注解为@Deprecated的元素,编译器会发出警告信息。
```
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
```
- @SuppressWarnings 关闭没有必要的编译器警告信息。
```
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
String[] value();
}
```
## 2. 元注解
Java中目前除了上面提到的3种内置注解,还提供了几种元注解。元注解专门用来负责注解其他注解,看着有点绕,简单点说,就是可以通过元注解**自定义**用户需要的注解。元注解定义在`java.lang.annotation`包内。
- @Target 用于表示注解用于什么地方,通过`enum`类型的ElementType参数进行指定。
```
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
// 可以应用注解的类型集合
ElementType[] value();
}
```
ElementType指定了Java中可以标注注解的地方,包括以下几类:
```
TYPE 类、接口或`enum`声明
FIELD 域声明
METHOD 方法声明
PARAMETER 参数声明
PACKAGE 包声明
CONSTRUCTOR 构造函数声明
LOCAL_VARIABLE 局部变量声明
ANNOTATION_TYPE 注解类型声明
TYPE_PARAMETER 类型参数声明 JDK1.8引入
TYPE_USE 类型使用声明 JDK1.8引入
```
- @Retention 表示注解信息需要保存在什么级别,`RetentionPolicy`支持三种级别,默认取值是`CLASS`。
```
SOURCE 注解会被编译器丢弃
CLASS 注解编译器编译时会保留,但JVM加载时会丢弃
RUNTIME 注解在JVM运行期也会保留,并且可以通过反射机制读取注解信息
```
- @Documented 表明注解会被javadoc或类似工具使用,用于生成文档信息
- @Inherited 表明允许子类从父类中继承注解
- @Native 表明一个`field`域可能来自于`nativecode`中,JDK1.8引入
- @Repeatable
-----
## 3. 注解元素
注解的定义有点类似`interface`,但是多了`@`符号。示例如下:
```
@Tartget(ElementType.Method)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationExample {
// public String value() default "";
}
```
和类定义类似,可以在注解中包含一些元素,即`注解元素`。没有任何注解元素的注解被称为`标记注解`(marker annotation)。如例子所示,可以通过关键字`default`对`注解元素`指定默认值。`注解元素`可用的类型包括:
```
1. 所有基本类型(int, float等)
2. String
3. Class
4. enum
5. Annotation
6. 上述类型的数组
```
如果声明其他类型的`注解元素`,编译器将会报错。
编译器对`注解元素`取值要求很严格,不允许有不确定的值,要么使用默认值,要么在使用注解时给元素赋值。
0 0
- Java注解-自定义注解
- Java注解----自定义注解
- Java注解自定义注解
- Java注解--四种元注解
- Java注解-三种內建注解
- 【Java】【注解】自定义注解
- java注解
- java注解
- java注解
- java 注解
- Java注解
- java 注解
- Java 注解
- Java注解
- java 注解
- JAVA注解
- Java注解
- Java注解
- 山科大 oj 小学生算术题
- 计算器之如何解决运算符优先级问题
- 栈的C语言基本操作
- 正则表达式高级用法---五(反向引用 /1, /2...)
- Java4Android学习笔记26-27
- Java注解
- hdu 5441 并查集+排序
- apk文件反编译dex2jar.bat遇到的问题
- 最短路径基本介绍(2)--Dijkstra算法(单源最短路径算法)
- 算法学习--4 设置一个有getMin功能的栈之栈的升级版(待修改)
- uva1347 Tour
- js的事件
- 【寒江雪】BMP位图文件格式分析
- Scala DataFrame生成技巧