1.常用的注解:
public
class
App_anno {
//重写父类的方法
@Override
public
String toString(){
return
super
.toString();
}
//标记方法已经过时,但是依然可以使用
@Deprecated
public
void
func0(){
}
//抑制编译器警告
@SuppressWarnings
({
"all"
})
public
void
func1(){
List list =
null
;
}
//自定义注解
@Author
(name =
"zhangsan"
, age = 0,from = {
"湖北"
,
"十堰"
})
public
void
func2(){
}
}
2.自定义注解
public
@interface
Author
{
/**
* 自定义注解:
* 注解的属性
* 1.修饰为默认或public
* 2.不能有方法体
*/
String name();
int
age();
String sex()
default
"男"
;
//带默认的注解,使用的时候就可以不写此属性值
String[] from();
//注解属性类型为数组
}
- 注解属性的作用:原来写在配置文件中的信息,可以通过注解的属性进行描述。
- Annotation 的属性声明方式:String name()或String[] likes();
- 属性默认值声明方式:String name() default “xxx”;
- 特殊属性value:如果注解中有一个名称value的属性,那么使用注解时可以省略value=部分,如@MyAnnotation(“xxx")
- 特殊属性value[];
- 枚举值之间使用逗号分隔
- @MyAnnotation(name="jack",age=30,likes={"唱歌","跳舞"})
3.
元注解
元注解,表示注解的注解!
指定注解的可用范围:
@Target({
TYPE,
类
FIELD,
字段
METHOD,
方法
PARAMETER,
参数
CONSTRUCTOR,
构造器
LOCAL_VARIABLE
局部变量
})
//
元注解
- 2.
指定注解的声明周期
@Retention(RetentionPolicy.
SOURCE
)
注解只在源码级别有效
@Retention(RetentionPolicy.
CLASS
)
注解在字节码即别有效
默认值
@Retention(RetentionPolicy.
RUNTIME
)
注解在运行时期有效
例如:
//元注解1:定义注解的可用范围
@Target
( value = {ElementType.
TYPE
,ElementType.
FIELD
,ElementType.
METHOD
,ElementType.
PARAMETER
,
ElementType.
CONSTRUCTOR
,ElementType.
LOCAL_VARIABLE
})
//@Target({ElementType.METHOD,ElementType.FIELD,ElementType.TYPE}) 规定只能在方法、字段、类上用
//元注解2:指定注解的生命周期
@Retention
(RetentionPolicy.
RUNTIME
)
//运行级别有效(最高级别)
public
@interface
Author
{
/**
* 自定义注解:
* 注解的属性
* 1.修饰为默认或public
* 2.不能有方法体
*/
String name();
int
age();
String sex()
default
"男"
;
//带默认的注解,使用的时候就可以不写此属性值
String[] from();
//注解属性类型为数组
}
4.通过反射来获取注解信息
//通过反射来获取注解信息
@Test
@Author
(name =
"小王"
, age = 21,from = {
"湖北"
,
"十堰"
})
public
void
func3()
throws
Exception{
//获取注解信息:name,age,from
Class clazz =
this
.getClass();
//1.先获取代表方法的method
Method m = clazz.getMethod(
"func3"
);
//2.在获取方法上的注解
Author
author = m.getAnnotation(
Author
.
class
);
System.
out
.println(author.name());
System.
out
.println(author.age());
System.
out
.println(author.from()[0]);
}