您的位置:首页 > 编程语言 > Java开发

Java注解的作用,使用,自定义

2017-04-25 23:07 453 查看


注解是什么

注解是描述Java代码的代码,它能够被编译器解析,注解处理工具在运行时也能够解析注解。用来标识代码,提供额外的信息做特殊处理。 比如:
@Override
public String toString(){
return "";
}


@Override 是一个常用的注解,它标识我们重写了某个方法。


注解的作用

还是@Override注解,Ctrl+左键点击,查看源代码。
package java.lang;
import java.lang.annotation.*;

/**
* Indicates that a method declaration is intended to override a
* method declaration in a supertype. If a method is annotated with
* this annotation type compilers are required to generate an error
* message unless at least one of the following conditions hold:
*
* <ul><li>
* The method does override or implement a method declared in a
* supertype.
* </li><li>
* The method has a signature that is override-equivalent to that of
* any public method declared in {@linkplain Object}.
* </li></ul>
*
* @author  Peter von der Ahé
* @author  Joshua Bloch
* @jls 9.6.1.4 @Override
* @since 1.5
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}


注释的大致意思是当一个方法被这个注解标记的时候要满足:

实现了或者重写了父类的方法

实现或者重写了Object类的方法


Java提供的注解

元注解 在@override的源码中有
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}


@Target和@Retention就是元注解。元注解即用来描述注解的注解,只能应用于对方法进行注解。

 在JDK源码中注解包内容如图



类之间的关系如图



 @Document、@Target、@Retention和@inherrited就是元注解

Documented 当一个注解类型被@Documented元注解所描述时,那么无论在哪里使用这个注解,都会被Javadoc工具文档化

Inherited型是自动继承的。具体解释如下:若一个注解类型被Inherited元注解所修饰,则当用户在一个类声明中查询该注解类型时,若发现这个类声明中不包含这个注解类型,则会自动在这个类的父类中查询相应的注解类型,这个过程会被重复,直到该注解类型被找到或是查找完了Object类还未找到

Retention 我们在上面已经见到个这个元注解,它表示一个注解类型会被保留到什么时候,比如以下代码表示Developer注解会被保留到运行时:

Target 这个元注解说明了被修饰的注解的应用范围,也就是被修饰的注解可以用来注解哪些程序元素.


自定义注解

注解类型通过”@interface“关键字定义的
在”注解体“中,所有的方法均没有方法体且只允许public和abstract这两种修饰符号(不加修饰符缺省为public),注解方法不允许有throws子句;
注解方法的返回值只能为以下几种:原始数据类型), String, Class, 枚举类型, 注解和它们的一维数组,可以为方法指定默认返回值。
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface myAnnotation {
String[] value();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: