注解
内置注解
-
@override:表示一个方法声明打算重写超类中的另一个方法声明
-
@Deprecated:表示不鼓励程序员使用的元素,通常它有危险或存在更好的选择,但可以用。
-
@SuppressWarnings:镇压警告信息,带参数使用
-
@SuppressWarnings("all"):镇压所有警告。
-
@SuppressWarnings("all"):镇压未检查警告。
......
-
元注解
- 解释其他注解的注解,本质还是注解
- java定义了四个元注解:
- @Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
- @Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(表示在什么时候有效)
- (SOURCE<CLASS<RUNTIME)
- @Document:说明该注解将被包含在javadoc中
- @Inherited:说明子类可以继承父类中的该注解
自定义注解
- 使用@interface自定义注解时,自动继承了java.,long.annotation.Annotation接口
- 分析
- @interface用来声明一个注解,格式:public @interface 注解名 {定义内容}
- 其中的每一个方法实际上是声明了一个配置参数
- 方法的名称就是参数的名称
- 返回值类型就是参数的类型(返回值只能是基本类型,Class,String,enum)
- 可以通过default来声明参数的默认值
- 如果只有一个参数,一般参数名为value
- 注解元素必须要有值,我们定义注解元素是,经常使用空字符串,0作为默认值
package com.Lv.Test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @Author: Lv
* @Description:自定义注解
* @Vision: 1.0
* @Date: Created in 9:20 2020/7/6
*/
public class Test01 {
//注解可以显式赋值,如果没有默认值,我们就必须给注解赋值
@MyAnnotation(age = 18,name = "Lv")
public void test(){}
@MyAnnotation02("hello") //如果参数只有一个值,且定义为value,那么这里可以不用写参数名
public void test02(){}
}
@Target({ElementType.TYPE,ElementType.METHOD}) //定义这个注解可以用于方法
@Retention(RetentionPolicy.RUNTIME) //定义运行时有效
@interface MyAnnotation {
//注解的参数:参数类型 + 参数名();
String name();
int age() default 0;
int id() default -1; //默认值如果为-1,代表不存在
String[] schools() default {"清华大学"};
}
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation02 {
String value();
}