Annotation注解
理解:是从jdk5.0开始引入,,以“@注解名”在代码中存在
> Annotation可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明。
还可以添加一些参数值,这些信息被保存在Annotation的"name = value"对中。
> 注解可以在类编译、运行时进行加载,体现不同的功能。
应用场景
示例1:生成文档相关的注解
示例2:在编译时进行格式检查(JDK内置的三个基本注解)
示例3:跟踪代码依赖性,实现替代配置文件功能
Java基础涉及到的三个常用注释
'@Override':限定重写父类方法,该注解只能用于方法
'@Deprecated':用于表示所修饰的元素(类、方法)已过时。通常是因为所修饰的结构危险或存在更好的选择。
'@SuppressWarnings':抑制编译器警告
public class AnnotationTest { public static void main(String[] args) { Person p1 = new Student(); p1.eat(); Person p2 = new Person(); Person p3 = new Person("Tom"); //划线表示这个构造器不推荐使用,认为是过时的 @SuppressWarnings("unused") int num = 10; // 抑制编译器警告 } } class Person{ String name; int age; public Person(){ } @Deprecated // 表示所修饰的元素(类、方法)已过时,通常是因为所修饰的结构危险或存在更好的选择。 public Person(String name){ this.name = name; } public void eat(){ System.out.println("人吃饭"); } } class Student extends Person{ @Override // 限定重写父类方法,该注解只能用于方法 public void eat(){ System.out.println("学生吃饭"); } public void walk(){ System.out.println("学生走路"); } }
自定义注解
以@SuppressWarnings为参照,进行定义即可。
前面必须使用@interface
public @interface MyAnnotation { String value()default "hello"; // 如果没写default "hello" 则用这个注解括号内必须有一个value值,否则报错! }
@MyAnnotation(value = "class") class Person{ String name; int age; @MyAnnotation() public Person(){ } }
元注解
对现有的注解进行解释说明的注解
四个元注解
① @Target:用于描述枚举类型ElementType的10个常量对象来指定 表示在哪些结构内可以使用
作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
取值(ElementType)有:
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
② @Retention:用于描述注解的生命周期
(即:被描述的注解在它所修饰的类中可以被保留到何时).
Reteniton注解用来限定那些被它所注解的注解类在注解到其他类上以后,可被保留到何时,一共有三种策略,定义在RetentionPolicy枚举中.
注意:生命周期长度 SOURCE < CLASS < RUNTIME
public enum RetentionPolicy { SOURCE, // 源文件保留 CLASS, // 编译期保留,默认值 RUNTIME // 运行期保留,可通过反射去获取注解信息 }
③ @Documented:描述在使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息。
④ @Inherited:允许子类继承父类中的注解
JUnit单元测试
测试分类:
黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。
白盒测试:需要写代码。关注程序具体的执行流程。
标签:Java,14,基础,name,Person,用于,注解,public,描述 From: https://www.cnblogs.com/gjwqz/p/18407075