本次实验是对实验3的加强版,重点是要掌握异常处理的办法以及日志功能
1.Java异常处理
检查型异常(Checked Exception)与非检查型异常(Unchecked Exception)
所有的检查性异常都继承自java.lang.Exception;所有的非检查性异常都继承自java.lang.RuntimeException。
检查性异常和非检查性异常最主要的区别在于其处理异常的方式:检查性异常必须使用try catch或者throws等关键字进行处理,否则编译器会报错;非检查性异常一般是程序代码写的不够严谨而导致的问题,可以通过修改代码来规避。
常见的运行时异常:空指针异常(NullPointerException)、除零异常(ArithmeticException)、数组越界异常(ArrayIndexOutOfBoundsException)等;
常见的检查性异常:输入输出异常(IOException)、文件不存在异常(FileNotFoundException)、SQL语句异常(SQLException)等
try{
可能会发生的异常
}catch(异常类型 异常名(变量)){
针对异常进行处理的代码
}
2.断言
在Java中是用assert实现的,看起来很简单不过用处非常大
assert使用场所:
内部不变量:判断某个局部变量应该满足的条件,assert x > 0
表示不变量:checkRep()
控制流不变量:例如,若不想让程序走向switch-case的某个分支,则可以用断言直接在分支上assert false;
方法的前置条件:判断传入参数是否满足前置条件
方法的后置条件:判断结果时候满足后置条件
3.日志
以往我们做调试,修改bug可能很多人习惯的方式是System.out.print大法直接控制台信息,不过当我们编写的软件过于复杂的时候,这种办法会使程序非常冗杂而且会直接影响客户的使用,或者你再后期再注释掉,不过测试人员和后续的码农看见你的代码会很蛋疼,所以需要引入日志
因为项目比较简单,这里我使用的是Java自带的logging
日志初始化:
Locale.setDefault(new Locale("en", "EN"));
logger.setLevel(Level.INFO);
FileHandler fileHandler = new FileHandler("src/log/FlightScheduleLog.txt", true);
fileHandler.setFormatter(new SimpleFormatter());
logger.addHandler(fileHandler);
异常记录:
logger.logp(Level.WARNING, "Entry,empty", "deleteL", ex.getMessage());
正常操作记录:
logger.logp(Level.INFO, "Entry," + text.getText(), "deleteL", "success");