Java注解用于为Java代码提供元数据,作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的;
同 class
和 interface
一样,注解也是一种类型,是在java5
中引入的;
通过@interface
关键字进行定义,使用在类、方法、属性上等
public @interface TestAnnotation{}
可以注解到注解上的注解;
@Retention
、@Documented
、@Target
、@Inherited
、@Repeatable
RetentionPolicy.SOURCE:只在源码阶段保留,编译时丢弃;
RetentionPolicy.CLASS(默认):在编译阶段写入字节码文件,不会加载到JVM中;
RetentionPolicy.RUNTIME:在编译阶段写入字节码文件,会加载到JVM中,在程序运行中可以获取到它们;
ElementType.ANNOTATION_TYPE:可以给一个注解注解;
ElementType.CONSTRUCTOR:可以给构造方法注解;
ElementType.FIELD:可以给属性注解;
ElementType.LOCAL_VARIABLE:可以给本地变量注解;
ElementType.METHOD:可以给方法注解;
ElementType.PACKAGE:可以给包注解;
ElementType.PARAMETER:可以给方法内的参数注解;
ElementType.TYPE:可以给一个类型注解;
ElementType.TYPE_PARAMETER:该注解写在类型变量的声明语句中;
ElementType.TYPE_USE:该注解能写到使用类型的任何语句中;
注解只有成员变量没有方法,注解的成员变量在注解的定义中以无形参的方法形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型;
@Deprecated:标记已过时的元素,在编译阶段就会发出警告;
@Override:重写;
@SuppressWarnings:阻止警告,添加属性对应具体的警告;
@SafeVarargs:参数安全类型注解,提醒开发者不要用参数做一些不安全的操作,阻止编译器发生unchecked这样的警告
@Functionallnterface:函数式接口
要想正确的识别检阅注解需要用到反射;
isAnnotationPresent()
方法判断它是否应用了某个注解;getAnnotation()
方法获取指定类型的注解对象 或者 根据getAnnotations()
获取元素上所有的注解;Annotation
不为null,就可以调用属性方法;注解无法改变代码本身,注解是指某些工具的工具;
APT
:当开发者使用Annotation
修饰类、方法等成员之后,这些Annotation
不会自己生效,必须由开发者提供相应的代码读取并处理Annotation
信息,这些处理提取和处理Annotation
的代码被称为Annotation Processing Tool
;
junit使用白盒测试;
步骤: 1、定义一个测试类; 2、定义测试方法,可以独立运行; 3、给方法添加@Test注解; 4、导入Junit依赖环境; 红色失败,绿色成功; 断言处理 Assert.assertEquals(期望的结果,运算结果) @Before:修饰的方法会在测试方法执行之前执行; @After:修饰的方法会在测试方法执行之后执行;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9