目录
一、注解
1.概述
注解是代码里的特殊标记,程序可以读取注解,一般用于替代配置文件
开发人员可以通过注解告诉类如何运行: 在Java技术里注解的典型应用:可以通过反射技术去得到类里面的注解,来决定怎么去运行类
2.作用
-
标记(如重写@Override)
-
约束并检查代码是否符合要求(如重写,代码有问题无法实现重写效果的话会报错)
-
压制警告信息(如@SuppressWarnings(value = "all")【表示压制所有的警告】)
-
声明(如@Deprecated,表示过时)
3.自定义注解
(1)格式
java
public @interface 注解名称{
//属性类型:基本数据类型,String,Class,注解,枚举,以上类型的一维数组
//特殊属性值Value,我们在使用注解的时候,如果我们只给注解的value属性赋值,那么value=可省略
public 属性类型 属性名() default 默认值
}
java
public @interface text{
public String[] STRINGS() ;
}
public @interface text02{
public String[] value();
}
(2)使用
java
//直接在要使用的位置上@注解名即可
//注意:在使用注解的时候如果注解里面的属性没有指定默认值,那么我们就需要手动给出注解属性的设置值。
@text(STRINGS = {"1","2","3"})
public static void main(String[] args) {
}
@text02({"1","2","3"})
public static void main(String[] args) {
}
(3)练习
自定义一个注解(@随意),用于指定类的方法上,如果某一个类的方法上使用了该注解,就执行该方法
注解:
java
//表示这个注解的存活时间
@Retention(value = RetentionPolicy.RUNTIME)
@interface sign{
public String value();
}
方法类:
java
public class Methods {
void method01() {
System.out.println("方法一运行了");
}
@sign("true")
void method02() {
System.out.println("方法二运行了");
}
void method03() {
System.out.println("方法三运行了");
}
@sign("true")
void method04() {
System.out.println("方法四运行了");
}
@sign("true")
void method05() {
System.out.println("方法五运行了");
}
}
测试类:
java
public class NoteDemo {
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
//1.通过反射获取Methods类的字节码文件
Class<Methods> methodsClass = Methods.class;
//1.1通过无参构造创建对象
Methods methods1 = methodsClass.getDeclaredConstructor().newInstance();
//2.获取所有方法对象
Method[] methods = methodsClass.getDeclaredMethods();
//3.遍历方法
for (Method method : methods) {
//判断是否有注解,参数是注解的字节码文件
//isAnnotationPresent(类<? extends Annotation> annotationClass)
if (method.isAnnotationPresent(sign.class)) {
method.invoke(methods1);
}
}
}
}
4.元注解
(1)概述
描述元注解的注解(写在注解上面的注解)
(2)常见元注解
元注解名 | 说明 |
---|---|
@Target | 指定了注解能在哪里使用(成员变量,类,方法) |
@Retention | 注解保留时间(声明周期)【不写默认是源码阶段】 |
@Inherited | 表示修饰的自定义注解可以被子类继承 |
@Documented | 表示该自定义注解,会出现在API文档里面 |
(3)@Target
- 成员变量:
java
@Target({ElementType.FIELD})
@interface sign{
public String value();
}
- 类:
java
@Target({ElementType.TYPE})
@interface sign{
public String value();
}
- 方法
java
@Target({ElementType.METHOD})
@interface sign{
public String value();
}
如果是多个参数,用,隔开
(4)@Retention
- 源码阶段(默认):注释只在java文件中生效,java文件编译变为class文件后,注解会消失
- 运行时阶段:java文件编译变为class文件后,注解不会消失
java
@Retention(value = RetentionPolicy.RUNTIME)
@interface sign{
public String value();
}
二、单元测试
1.概述
单元测试是对单个代码模块的正确性的测试
2.单元测试工具JUnit
JUnit是一个Java编程语言的单元测试工具。JUnit是一个非常重要的测试工具。
3.JUnit特点
-
JUnit是一个开放源代码的测试工具
-
提供注解来识别测试方法
-
JUnit测试可以让你编写代码更快,并能提高质量JUnit 优雅简洁。没那么复杂,花费时间较少
-
JUnit 在一个条中显示进度。如果运行良好则是绿色,如果运行失败,则变成红色
4.JUnit的使用
-
将JUnit的jar包导入到工程中(前面有教程,后续就不讲了)
-
编写测试方法:该测试方法必须是公共的无参数无返回值的非静态方法
-
在测试方法上使用@Test注解标注该方法是一个测试方法
-
选中测试方法右键通过junit运行该方法
首先下一个包,我用的是junit-4.13.2
测试一下
报错了,看一下异常信息,少导了一个jar包,去下载一个
问题解决~
5.JUnit常用注解
注解名称 | 说明 |
---|---|
@Test | 表示测试该方法 |
@Before | 在测试的方法前运行 |
@After | 在测试的方法后运行 |