文章目录
- 注解
- 内置注解
- **@Deprecated**
- @Override
- @SuppressWarnings【不建议使用】
- @Funcationallnterface
- 自定义注解
- 元注解
- @Retention
- @Target
- @Documented
- @Inherited 和 @ Repeatable
- 反射注解
前言:笔记基于动力节点
注解
- 注解可以标注在 类上,属性上,方法上等。
- 注解可以做到在不改变代码逻辑的前提下在代码中嵌入补充信息
注解:给编译器看的,或给其他程序看的,程序根据有没有这个注解来决定不同的处理方式
框架 = 反射 + 注解 + 设计模式
内置注解
@Deprecated
/** JDK 的内置注解:@Deprecated* 1. 被这个注解标注的元素已过时* 2. 这个注解是给编译器看的,编译器看到这个注解之后会有警告提示信息* 3. 可以标注属性,方法,类*/public class Test {//这里有警告MyClass1 myClass1 = new MyClass1();
}@Deprecated
class MyClass1 {// since 属性表示从哪个版本开始已过时// forRemoval 属性值如果是 true 表示已移除@Deprecated(since = "9", forRemoval = true)public static int num = 100;@Deprecatedpublic void doSoms() {}
}
@Override
/** JDK 的内置注解:@Override* 1. 给编译器看的* 2. 这个注解标注实例方法,被标注的方法必须是重写父类的方法* 3. 这个注解就是在编译阶段进行方法检查,检查这个方法是否重写了父类,如果没有重写父类报错* 4. 只能标注实例方法*/public class Test extends myclass{@Overridevoid test() {}
}class myclass {void test() {};
}
@SuppressWarnings【不建议使用】
/** JDK 的内置注解:@SuppressWarnings* 1. 主要作用:抑制警告* 2. 该注解常见的属性值* rewtypes: 抑制未使用的泛型的警告* resource: 抑制未关闭资源的警告* deprecation: 抑制使用了已过时资源的警告* all: 抑制所有警告*/public class Test {public static void main(String[] args) throws FileNotFoundException {//取消没用泛型的警告@SuppressWarnings("rawtypes")List list = new ArrayList();//取消没关流的警告@SuppressWarnings("resource")FileInputStream in = new FileInputStream("e:\\file.txt");}
}
@Funcationallnterface
检查是否符合 “函数式接口” 的特征
/** JDK 的内置注解:@Functionallnterface* 1. 这个注解专门用来标注接口的* 2. 被标记的接口必须是一个函数式接口,如果不是函数式接口,编译器报错* 3. 这个注解也是给编译器看的* 4. 函数式接口:接口中抽象方法有且仅有一个
*/
public class Test {public static void main(String[] args) throws FileNotFoundException {}
}@FunctionalInterface
interface T {void fly();
}
自定义注解
使用 @interface 来定义注解
默认情况下可以出现在类,方法,属性,构造方法,方法参数上
所有自定义注解,父类是:java.lang.annotation.Annotation
public @interface MyAnnotation {/*** 注解也可以定义属性,属性名后面必须添加 ()*///属性String drive();String url();String[] ab();
}
public class Test {public static void main(String[] args){//使用注解@MyAnnotation(drive = "aaa",url = "abc",ab = {"1,2,3"},)int i = 10;}
}
元注解
@Retention
@Retention(value = RetentionPolicy.SOURCE)
@Retention(value = RetentionPolicy.CLASS)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}
@Target
@Documented
被这个注解声明的注解,可以生成帮助文档
@Inherited 和 @ Repeatable
反射注解
- field.isAnnotationPersent(AnnotationTest02.class):判断有没有这个注解
- AnnotationTest02 an = field.getAnnotation(AnnotationTest02.class):获取注解