1.注解的定义
Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。
2.注解的作用
作用:
可对程序作出解释,可被其他程序读取。
3.注解的格式
格式:
@注解名(一些参数值)
例:@SuppressWarnings(value=“unchecked”)
4.内置注解和元注解
4.1.内置注解
注解信息 | 作用 |
---|---|
@Override | 重写 |
@Deprecated | 不鼓励使用,已废弃 |
@SuppressWarnings(value = “值”) | 抑制编译时的警告信息,常用的值有all,unchecked |
package com.zx.annotation;
@SuppressWarnings("all")//镇压所有警告。可以在类上和方法上。
public class Demo01 extends Object{
//@Override 重写的注解
@Override
public String toString() {
return super.toString();
}
//不鼓励使用
@Deprecated
public static void test01(){
System.out.println("我被废弃了");
}
public static void main(String[] args) {
test01();
}
}
4.2.元注解
注解信息 | 作用 |
---|---|
@Target(value = {ElementType.METHOD,ElementType.TYPE}) | 允许注解可以存在的地方 |
@Retention(value = RetentionPolicy.RUNTIME) | 注解的生命周期 |
@Document | 注解将被包含在javadoc中 |
@Inherited | 该注解可被子类继承自父类 |
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value();
}
public enum ElementType {
TYPE,//类,接口或枚举
FIELD,//字段
METHOD,//方法
PARAMETER,//参数
CONSTRUCTOR,//构造方法
LOCAL_VARIABLE,//局部变量
ANNOTATION_TYPE,//注释类型声明
PACKAGE,//包声明
TYPE_PARAMETER,//参数类型
TYPE_USE//用户类型
}
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
RetentionPolicy value();
}
public enum RetentionPolicy {
SOURCE,
CLASS,
RUNTIME
}
注意:
生命周期runtime > class > source
5.自定义注解
格式:
@Target(value = {ElementType.METHOD,ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
@Document
@Inherited
public @interface 注解名{
//注解的参数:参数类型 + 参数名() default 参数类型赋值;
例子:String[] schools() default {"清华大学","北京大学"};
}
@MyAnnotation
public class Demo02 {
@MyAnnotation
public static void test01(){
System.out.println("测试自定义注解");
}
}
@Target(value = {ElementType.METHOD,ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)//runtime>class>source
@Documented
@Inherited
@interface MyAnnotation{
}
6.注解的使用
public class Demo03 {
//注解可以显示赋值,若没有默认值,就必须赋值
@MyAnnotation2(age = 18,name = "周杰伦")
public void test(){
}
@MyAnnotation3(value = "林俊杰")//value可以省略
public void test2(){
}
}
@Target(value = {ElementType.METHOD,ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyAnnotation2{
//注解的参数:参数类型 + 参数名()
String name() default "";
int age();
int id() default -1; //若默认值为-1代表不存在
String[] schools() default {"北京大学","清华大学"};
}
@Target(value = {ElementType.METHOD,ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyAnnotation3{
String value();
}