注解 --- Annotation

注解的概念

Annotation 是一种能够被书写到Java源代码中的元数据(metadata:描述数据的数据)形式。类、方法、变量、参数和包都可以使用它来进行描述。Annotation不会对它描述的代码操作有任何的直接影响。

JDK中自带的常用注解

@Override -- 要求编译器在编译时检查被修饰的方法是否是一个正确的重写;

@Deprecated -- 被它修饰的方法会被标记为过时(过时不是错误!!),然后编译器就可以提示我们。通常都是用一根斜线把这个方法名划掉。

@SuppressedWarnings -- 用来把代码中的警告信息给消除掉,让它不再报黄色警告。

通过这三种注解的使用,我们了解到了注解的使用表象:

1、@注解名(参数......) 如果一个注解没有参数,那么()可以省略。

2、注解可以写在类的声明、方法的声明、变量的声明(属性、参数、局部变量)、和包的声明。

3、注解不仅仅是写给程序员看的,它还可以影响到编译器,甚至是运行期。

注解的本质

Annotation在本质上就是一个Java类型,是JDK1.5提出的。

1、我们可以把Annotation理解为一种特殊的接口,因为所有的Annotation都默认继承了java.lang.annotation.Annotation的接口。但是在实现的语法中,我们不能做直接的接口继承,而是要使用@interface关键字声明它。

public @interface 注解名{
​
}

2、在注解的{}内,我们要填写它的内容。而它的内容既不是方法也不是属性,或者说语法上既像方法又像属性。

public @interface 注解名{
    访问修饰符 数据类型 标识名();
    ......
}

注意 访问修饰符都是public的,可以省略; 数据类型只有5种(基本数据类型、String、Class、枚举、注解类型),以及这5种的一维数组; 标识名应该是名词,因为它代表了一个配置项或者叫做属性名 ()不可少,不是参数列表,仅仅是一种特有语法。 如果某个类型元素有默认值,那么应该是用default接在后面;

3、一个注解定义的时候除了上面两点,还可以控制它的使用位置和获取时机 用@Target注解 定义当前注解的书写位置 用@Retention注解 定义当前注解的获取时机 @Target要求填入的有类声明处、方法声明处、构造声明处、变量声明处、参数声明处等等,而且可以同时配置多个 @Retention只有3个选择:源代码、class文件和运行时。通常都是运行时。

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface 注解名{
    访问修饰符 数据类型 标识名();
    ......
}

另外还有两个修饰注解的注解:@Documented和@Inherited

使用注解

1、首先根据该注解的@Target写在正确的位置;

2、书写的语法:

@注解名(类型元素=值1,类型元素=值2....)

注意

1、如果一个注解没有类型元素,那么可以省略它后面的() @Overrid @Override()

2、如果一个注解只有一个类型元素,且名字叫做value,那么可以省略"value=" @MyAnnotation({"hello","world"}) @MyAnnotation(value={"hello","world"})

3、数组类型的类型元素,如果只给一个值,那么可以省略掉{} @MyAnnotation("hello") @MyAnnotation({"hello"}) @MyAnnotation(value="hello")

注解到底在干什么?

其实,定义注解就是在定义一个具有更强针对性的配置。

注解如何影响运行期 

首先一个注解要想在运行期获取到,那么它的@Retention必须是RUNTIME的,然后我们才可以在运行起来以后,通过反射获取到它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值