单元测试
Junit测试框架
可以灵活的编写测试代码,可以针对某个方法执行测试,也支持一键完成对全部方法的自动化测试,且各自独立。
不需要程序员去分析测试的结果,会自动生成测试报告出来。
断言
意思是程序员可以预测程序的运行结果,检查程序的运行结果是否与预期一致。
//断言机制:预测index2的结果
Assert.assertEquals("方法内部有Bug",4,index2);//如果不一样就会输出:方法内部有Bug
反射
指的是加载类的字节码到内存,并以编程的方法解刨出类中的各个成分(成员变量、方法、构造器等)。
每一个成员变量用Field类的对象来表示、每一个成员方法用Method类的对象来表示,每一个构造器用Constructor类的对象来表示。
获取类的字节码
反射的第一步:是将字节码加载到内存,我们需要获取到的字节码对象。
Class c1 = Student.class;
获取类的构造器
get:获取
Declared: 有这个单词表示可以获取任意一个,没有这个单词表示只能获取一个public修饰的
Constructor: 构造方法的意思
后缀s: 表示可以获取多个,没有后缀s只能获取一个
//1、反射第一步:必须先得到这个类的Class对象
Class c = Cat.class;
//2、获取类的全部构造器
Constructor[] constructors = c.getDeclaredConstructors();
//3、获取一个构造器
//获取类public修饰的空参数构造器
Constructor constructor1 = c.getConstructor();
//获取private修饰的有两个参数的构造器,第一个参数String类型,第二个参数int类型
Constructor constructor = c.getDeclaredConstructor(String.class,int.class);
反射获取成员变量
get:获取
Declared: 有这个单词表示可以获取任意一个,没有这个单词表示只能获取一个public修饰的
Field: 成员变量的意思
后缀s: 表示可以获取多个,没有后缀s只能获取一个
反射获取成员方法
//1、反射第一步:先获取到Class对象
Class c = Cat.class;
//2、获取类中的全部成员方法
Method[] methods = c.getDecalaredMethods();
获取到成员方法之后
run.invoke();用invoke调用它;
注解
Java注解是代码中的特殊标记,比如@Override、@Test等,作用是:让其他程序根据注解信息决定怎么执行该程序。
自定义注解
public @interface 注解名称{
String aaa();
boolean bbb() default true; //default true 表示默认值为true,使用时可以不赋值。
}
元注解
元注解是修饰注解的注解。
比如修饰自定义注解时,要加上的元注解
@Target是用来声明注解只能用在那些位置,比如:类上、方法上、成员变量上等
@Retetion是用来声明注解保留周期,比如:源代码时期、字节码时期、运行时期
解析注解
我们可以通过反射技术把类上、方法上、变量上的注解对象获取出来,然后通过调用方法就可以获取注解上的属性值了
我们把获取类上、方法上、变量上等位置注解及注解属性值的过程称为解析注解。
注解在谁身上,就先获取谁,再用谁获取谁身上的注解
//获取类上的MyTest4注解
MyTest4 myTest4 = (MyTest4)c.getDeclaredAnnotation(MyTest4.class);