Java基础——高级技术
1. 单元测试
- 就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试。
1.1. Junit单元测试框架
- 可以用来对方法进行测试,他是第三方公司开源出来的(很多开发工具都已经集成了Junit框架,如IDEA)
1.1.1. 优点
- 可以灵活的编写测试代码,可以针对某个方法执行测试,也支持一键完成对全部方法的自动化测试,且各自独立。
- 不需要程序员去分析测试结果,会自动生成测试报告。
1.1.2. 使用步骤
1.1.3. 断言机制
可以让程序员预测方法的结果,判断业务是否正确
1.2. Junit框架的常见注解
2. 反射
2.1. 反射
- 反射就是,加载类,并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器)。
2.2. 如何获取类的信息、操作它们
- 加载类,获取类的字节码:Class对象
- 获取类的构造器:Constructor对象
- 获取类的成员变量:Field对象
- 获取类的成员方法:Method对象
2.3. 获取类
获取Class对象的三种方式
- Class c1 = 类名.class
- 调用Class提供方法:public static Class forName(String package)
- Object类提供的方法:public Class getClass(); Class c3 = 对象.getClass();
2.4. 获取类的构造器
- 获取类构造器的作用:依然是初始化对象返回
2.5. 获取类的成员变量
- 获取成员变量的作用:依然是赋值、取值
2.6. 获取类的成员方法
- 成员方法的作用:依然是执行
2.7. 作用
- 基本作用:可以得到一个类的全部成分然后操作。
- 可以破坏封装性
- 最重要的用途是:适合做Java框架,基本上,主流的框架都会基于反射设计出一些通用的功能。
2.8. 使用反射做一个简易版框架
/**
* 用于保存任意对象的成员变量值到文件中去
*/
public class ObjectFrame {
public static void saveObject(Object object) throws Exception {
// 创建打印流, 打印数据
PrintStream printStream = new PrintStream(new FileOutputStream("src\\a.txt", true));
// 不清楚对象的成员变量数量 通过反射机制获取所有的成员变量
// 获取类的字节码
Class c = object.getClass();
// 获取所有的成员变量
Field[] fields = c.getDeclaredFields();
printStream.println("-------------" + c.getSimpleName() + "--------------");
// 遍历所有的成员变量
for (Field field : fields) {
field.setAccessible(true);
// 获取成员变量的名字
String name = field.getName();
// 获取该成员变量在对象中的值
String value = field.get(object) + "";
printStream.print(name + "------>" + value + "\r\n");
}
}
}
public class FrameTest {
@Test
public void test1() throws Exception {
Student student = new Student("小明", 19, "男", 178.5);
Teacher teacher = new Teacher("张老师",9000);
ObjectFrame.saveObject(student);
ObjectFrame.saveObject(teacher);
}
}
3. 注解
3.1. 特点
- 就是Java代码里的特殊标积,如@Override、@Test等,作用是:让其他程序根据注解信息来决定怎么执行该程序。
- 注解可以用在类上、构造器上、方法上、成员变量上、参数上等位置处。
3.2. 自定义注解
- 特殊属性名:value,如果注解中只有一个value属性,使用注解时,value名称可以不写!!
3.3. 注解的原理
3.4. 元注解
- 指修饰注解的注解
3.5. 注解的解析
- 判断类上、方法上、成员变量上是否存在注解,并把注解里的内容给解析出来。