Java入门笔记(六)异常处理
异常处理
异常的写法
抛出异常 throw
运行时系统在调用栈中查找,从生成异常的方法开始进行回溯,知道找到
捕获catch异常的代码
try{
...
} catch(IOException e) {
e.printStackTrace();
}
catch(AnotherException e) {
e.printStackTrace();
} finally {
异常处理语句组;// 无论有没有异常都要执行
}
异常的分类
Error类
JVM错误,一般不管
Exception 异常
构造方法
-
public Exception();
-
public Exception(String message);
-
Exception(String message, Throwable cause);
方法
-
getMessage()
-
getCause()
-
printStackTrace()
多个异常的处理
-
子类异常写在父类异常前面
-
即便在try中有break return语句,finally语句都会执行
受检的异常
-
RuntimeException及其子类可以不明确处理,否则就是受检的异常,受检的异常要求明确进行语法处理,要么catch,要么throw
-
throw异常时,在方法的签名后面用throws xxx来声明,在子类中,如果要覆盖父类的一个方法,若父类中的方法声明了throws异常,那么子类的方法也可以throws异常(只能更具体,不能更一般)
try-with-resource
对于AutoCloseable的变量,调用close()的方法
try(类型 变量名 = new 类型()){
...
}
自定义异常
重抛异常与异常链接
catch后的处理机制
-
将当前捕获的异常再次跑出 throw e
-
重新生成一个异常并抛出 throw new Exception("message")
-
重新生成一个异常并抛出 该异常中包含了当前异常的信息如 throw new Wxception("some message", e),可以让别人使用e.getCause()看到当前的异常,也叫异常的链接
断言与测试
断言 assertion
-
断言:assert 逻辑表达式[:信息];
-
如果断言表达式不为true,就会产生异常,并且输出相关的错误信息
-
只有在JDK1.4及以上的版本才可以使用断言,在早期JDK版本中,要通过-source选项来指明版本;在运行时,要使assert起作用,则在运行时使用选项-ea(enableeassertions)
测试及JUnit
-
JUnit单元测试框架:http://www.junit.org
-
在Eclipse中
右键-New-JUnit Test Case,生成testClass文件
右键-Run as - JUnit Test
- 使用@Test来标记测试函数
fail(信息)
assertEquals(运行结果,预期结果)
assertNull(参数)
调试
错误分类
-
语法错误Synatax error:编辑、编译器发现
-
运行错误Runtime error:异常处理机制
-
逻辑错误Logic error:调试,单元测试
项目右键debug as...
调试手段
-
断点 breakpoint:让程序停止
-
跟踪 trace:看程序的流程
-
监视 watch:看变量的变化

浙公网安备 33010602011771号