注解的主要作用:对我们的程序进行标注和解释。
| 注解名 | 说明 |
| @Override | 描述子类重写父类的方法 |
| @Deprecated | 描述方法过时 |
| 压制警告 |
注释:给程序员看的
注解:给编译器看的(让虚拟机看到程序中的注解,注解代表程序的一些特殊功能)

默认值可以不设置
在使用注解的时候如果注解里面的属性没有指定默认值
那么我们就需要手动给出注解属性的设置值
//特殊属性value 如果我们只设置了value没有默认值,那么在调用注解时,可以省略value字段只给出值value的设置值
代码:
主自定义注解:
public @interface Anno1 {
//定义一个基本类型的属性
int a() default 23;
//定义一个String类型的属性
public String name() ;
//定义一个class类似的属性
public Class clazz() default Anno2.class;
//定义一个注解类型的属性
public Anno2 anno() default @Anno2;
//定义一个枚举类型的属性
public Season season() default Season.SPRING;
//以上类型的一维数组
//int 数组
public int[] arr()default {1,2,3,4,5};
//枚举数组
public Season[] seasons()default {Season.SPRING,Season.SUMMER};
//特殊属性value 如果我们只设置了value没有默认值,那么在调用注解时,可以省略value字段
}
Anno2:
public @interface Anno2 {
}
枚举类Season:
public enum Season {
SPRING,SUMMER,AUTUMN,WINTER;
}
测试类:
@Anno1(name = "libai")
public class AnnoTest {
}
注解类:
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Test {
}
方法类:
public class UseTest {
@Test
public void method(){
System.out.println("我是method");
}
public void function(){
System.out.println("我是function");
}
@Test
public void show(){
System.out.println("我是show");
}
}
测试类:
public class AnnoTest {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException {
//通过反射获取UseTest类的字节码文件对象
Class> clazz = Class.forName("com.myAnnotation.UseTest");
//创建一个对象
UseTest useTest = new UseTest();
//通过反射获取类中所有非继承方法对象
Method[] methods = clazz.getDeclaredMethods();
//遍历获得每一个方法对象
for (Method method : methods) {
//isAnnotationPresent 判断当前方法上是否有指定的注解
//参数为注解的字节码文件对象
//返回值:布尔
if (method.isAnnotationPresent(Test.class)) {
method.invoke(useTest);
}
}
}
}
如:
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Test { }
| 元注解名 | 说明 |
| @Target | 指定了注解能在哪里使用 |
| @Retention | 可以理解为保留时间(生命周期) |
| @Inherited | 表示修饰的自定义注解可以被子类继承 |
| @Documented | 表示该自定义注解,会出现在API文档里面。 |
@Target ({ElementType.FIELD,ElementType.TYPE,ElementType.METHOD}) 指定注解在哪使用 分别为 变量, 类, 方法
@Retention() 如果不写 表示这个注解只能存活在源码阶段
随意要设置 @Retention(RetentionPolicy.RUNTIME) //让注解活到字节码运行阶段
@Inherited 直接写,就代表这个注解可以被继承
我们都是将代码全部写完才进行测试。这样其实不是很好
在以后工作的是后,都是写完一部分代码就测试一部分。这样,带码中的问题可以得到及时修复
也避免了,由于代码过多,从而无法准确定位到错误的代码
JUnit是一个开放源代码的测试工具
提供注解来识别测试方法
JUnit测试可以让你编写代码更快并能提高质量
JUnit优雅简介没那么复杂,花费时间较少
JUnit在一个条中显示进度。如果运行良好则是绿色。运行失败则是红色
将JUnit的jar包导入到工程中
编写测试方法测试方法必须是公共的无参数无返回值的非静态方法
在测试方法上使用@Test注解标注该方法是一个测试方法
选中测试方法右键通过junit运行该方法\