一 笔记
-
注解是一种类型,也会编译成class文件;
-
定义注解 public @interface MyAnnotation { }
-
注解可以出现在类、接口、成员方法、构造方法、局部变量、形参列表上面…
-
jdk内置的注解:
- @Deprecated
- @Override 专门给编译器参考的;带有Override编译器在编译时都会进行检查;检查这个方法是否重写了父类的方法,如果不是重写了父类的方法,编译器会自动报错;
- @SuppressWarnings
- @SafeVarargs
- @FunctionalInterface
- 函数式接口要求接口中抽象方法必须“有且只有一个”,非抽象接口可以有多个;
- 函数式接口要求接口中的抽象方法数量必须是1个;
- @FunctionalInterface 注解出现在接口上,用来进行编译检查,如果这个接口不符合“函数式接口”的定义,编译器会报错;
-
注解编译之后也是生成class文件,生成MyAnnotation.class
-
在注解当中,可以给注解类型定义属性;
-
定义属性的语法有点像方法,但它不是方法,叫做属性;
-
定义属性的语法: 属性类型 属性名();
-
注意:()中不能有任何属性;如: int age();
-
使用default关键字可以给属性定义默认值;
二 自定义注解类型 MyAnnotation.java
public @interface MyAnnotation {
// age属性,类型是int
int age();
// name属性,类型是String
String name();
// 添加了默认值,在使用注解时可以不写该属性
String color() default "red";
}
三 使用自定义注解 AnnotationTest01.java
//@MyAnnotation
public class AnnotationTest01 {
// @MyAnnotation
private int num;
// @MyAnnotation
public AnnotationTest01(){
}
// @MyAnnotation
public void doSome(){
}
// @MyAnnotation
// public void sum(@MyAnnotation int a, int b){
//
// }
public void sub(){
// @MyAnnotation
int k = 100;
}
}