异常处理Try Catch之try后面直接跟()
当程序运行过程中发生错误时,就会“ 抛出异常’,抛出异常比终止程序要灵活得多,这是因为可以提供一个“ 捕获” 异常的处理器 (handler) 对异常情况进行处理。
如果没有提供处理器,程序就会终止,并在控制台上打印出一条信息, 其中给出了异常的类型。可能在前面已经看到过一些异常报告, 例如, 偶然使用了 null 引用或者数组越界等。
异常有两种类型: 未检查异常和已检查异常。 对于已检查异常, 编译器将会检查是否提供了处理器。 然而,有很多常见的异常, 例如,访问 null 引用, 都属于未检查异常。编译器不会査看是否为这些错误提供了处理器。毕竟,应该精心地编写代码来避免这些错误的发生, 而不要将精力花在编写异常处理器上。
下面举个小例子
try {
//获取一个流
br = new BufferedReader(new InputStreamReader(System.in));
//业务处理。。。。
} catch (Exception e) {
e.printStackTrace();
} finally {
//释放资源
if(br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我们平时都是上述写法,处理异常时,会在finally中处理必须执行的代码,比如操作io流时,不论是否有错误,我们都要释放资源,所以会将关闭资源的代码放在finally中。
自从jdk1.7后,引入了新的初六方式
try (BufferedReader br = new BufferedReader(new FileReader("AutoCloseTest.java"));
PrintStream ps = new PrintStream(new FileOutputStream("a.txt"))) {
//获取一个流
//业务处理。。。。
} catch (Exception e) {
e.printStackTrace();
}
我们在try后面()中创建流,会默认在异常处理结束的时候释放资源。