JDK5新特性---注解学习笔记(一)

本文介绍了Java注解的基本概念,包括注解的用途、内置注解的使用方法、自定义注解的定义及其元素类型限制等内容,并探讨了元注解的作用。

1.注解(也被称为元数据):为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。

2. javaSE内置了3种标准注解:

@Override 表示当前的方法定义将覆盖超类中的方法。如果你不小心拼写错误,或者方法签名对不上被覆盖的方法,编译器就会发出错误的提示。

@Deprecated 如果程序员使用了注解为它的元素,那么编译器会发出警告信息。

@SuppressWarnings 关闭不当的编译器警告信息。

在我们覆盖父类中的方法时,最好使用@Override注解,这样会避免出现一些未知错误,否则当你方法名称或者方法签名出现问题时,程序会将其处理为一个新的方法,而用了此注解以后,如果不小心出现了上述的错误,那么编译器将会给予提示,帮助我们正确的编码。

当我们使用了@Deprecated这一注解在我们所写的方法时,编译器将会发出警告,提示我们这个方法已经过时,样式为在方法的名称上出现横线。

@SuppressWarnings这个注解可以被理解成为压制警告,当我们忘记使用泛型时,编译器会给予警告,告诉我们还没有确定类型,这个时候我们不想制定具体的泛型类型,也不想让编译器给予警告,那么我们可以采用该注解来压制警告,这个注解可以作用在方法级别上也可以做用在类级别上。

3. 注解元素:

注解元素只可以作用在以下类型:

(1)8大基本数据类型

(2)String类型

(3)Class类型

(4)enum类型

(5)Annotation类型

(6)以上类型的一维数组类型

如果你使用了其它的类型--包括包装类型,那么编译器将会报错。

4. 注解定义及元素定义

(1)注解MyAnno1

package com.ty.annotation;

public @interface MyAnno1 {
String name() default "wht";
int age();
Class<Person> person();
Gender gender();
int[] array();
}

(2)注解MyAnno2

package com.ty.annotation;

public @interface MyAnno2 {
String value() ;
}

(3)枚举类型

package com.ty.annotation;

public enum Gender {
MALE,FEMALE;
}

(4)类类型

package com.ty.annotation;

public class Person {

}

(5)测试使用注解

package com.ty.annotation;

public class Test {
@MyAnno1(age=18,person=Person.class,gender=Gender.FEMALE,array={1,2,3})
@MyAnno2("abc")

public void testAnno(){

}
}

注意的几个问题:

1. 当注解的元素没有默认值的时候,在使用的时候必须为其指定初始值

2. 如果注解元素有了初始值,那么在使用的时候可以为其赋新的值,否则将使用默认值

3. 一个较为特殊的情况:注解元素当且仅当其只有一个元素且名称为value时,在使用该注解的时候为其赋值时可以不用写属性(元素)名称

5. 元注解

java内置了4种元注解,元注解负责注解其它的注解,可以理解成java中用来注解 Annotation的Annotation

@Retention

在描述这一属性之前,先来说一下jav a文件的三个时期: 源文件时期(**.java)----->编译器编译期(***.class)----->jvm运行时期

只能用于修饰一个Annotation的定义,表示需要在什么域级别上保存该注解的信息。通俗的说就是该注解保留在的作用域,其RetentionPolicy的参数包括:

SOURCE 表示该注解只作用于源代码时期,最终将被编译器所抛弃

CLASS 表示该注解在class文件中可用,但是会被VM抛弃 --------->注解默认的作用域

RUNTIME 表示该注解在VM运行时期也会被保留,因此可以通过反射机制来读取注解的信息。

@target

表示该注解可以作用在什么地方,可能的ElementType参数包括:

CONSTRUCTOR: 构造器的声明

FIELD: 字段的声明(域声明--包括enum实例)

LOCAL_VARIABLE局部变量的声明

MRTHOD方法声明

PACKAGE包声明

PARAMETER 参数声明

TYPE 类、接口(包括注解类型)、或enum声明

@Documented

表示该注解会被包含在javadoc中

@Inherited

表示该注解可以被继承。详细的说的就是一个注解@A在声明时使用了@Inherited,那么我们用@A作用于一个类的时候,当这个类被继承时,子类也默认的带有@A注解。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值