注解:annotation
观看狂神视频,记录学习笔记
常见的三种内置注解
- @Override:方法的重写
- @Deprecated:标注不推荐使用的程序元素,标注的程序元素可以使用,或者由更好的实现方式(可用于修饰方法,类和属性)
- @SuppressWarnings(value=""):镇压警告,代码中标黄的警告可以使用该注解使其不再显示警告,需要加参数使用
元注解
元注解用来解释其他注解。
Java定义了四种元注解
- @Target:用来描述注解的使用范围(使用在属性上,方法上或是类上等等)
- @Retention:描述注解的生命周期。
- 有三种级别:SOURCE - 源代码、CLASS - 编译成class、RUNTIME - 运行的时候。
- 作用是在三种级别的情况下,注释是否可以使用,是否有效。
- 基本上都是RUNTIME。
- @Documented:文注解释,使用该注解可以生成文档注释
- @Inherited:继承注解,作用是使用该注解可以使得子类可以继承父类的注解
定义一个简单注解
/**
* Target注解,有一个参数value,value的参数的类型是ElementType的数组,
* value是个数组,也就是说value可以有多个值,使用大括号括起来
* ElementType是一个枚举类,有方法,类,接口等的声明
*
*/
@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
// @Documented注解:表示是否将我们的注解生成到JAVAdoc文档中
@Documented
// @Inherited:表示子类可以继承父类的注解
@Inherited
// 注解使用@interface修饰
@interface MyAnnotation {
}
自定义注解
/**
* 定义有参数的注解
*/
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
// 无参数的注解
}
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation01 {
// 注解的参数命名要求: 参数类型 + 参数名();
String name();
}
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation02 {
// 有默认值的注解
String name() default "";
int age() default 0;
int id() default -1; // 如果默认值为-1,代表不存在
String[] schools() default {"", ""};
String teacher();
}
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation03 {
// 如果参数名为value,这时,调用注解的时候,可以省略参数名
String value();
}
class test{
@MyAnnotation()
@MyAnnotation01(name = "test")
// 没有默认值的注解必须给参数赋值,有默认值的注解可以不赋值
@MyAnnotation02(teacher = "test")
// 如果参数名为value,这时,调用注解的时候,可以省略参数名,只有value可以省略
@MyAnnotation03( "test")
public void test(){}
}
自定义注解小结
定义一个简单注解和自定义注解这里,需要注意注解定义的样式和格式要求,这样在看代码的源码时,可以看懂各个注解的作用和使用方法。
- 注解使用@interface修饰:
public @interface xxx(){}
这种格式出现,就应该认识到是一个注解。 - 注解的参数命名要求: 参数类型 + 参数名();例:
String name()
。固定格式,注解的参数相当于类的对象,不过要加()结尾。
目前我还处于看懂注解和根据注解提供的参数进行使用的阶段。自定义注解之类的暂时还没有这样的水平。所以这里对于注解的介绍先停留在这里,待到以后技术水平有了提升,再系统的总结。