异常类程序结构如图所示。
8.1使用try/catch 字句
/*
* 将有可能产生异常的代码,放在try块中。
* 一旦发生了异常,java会自动创建一个异常对象。并把它抛出。
* try块就可以捕获这个异常对象。但是,try块不能处理异常。
* catch可以处理异常。所以。try块捕获的异常会交给catch块处理
*/
try {
int num = input.nextInt();
System.out.println(num);
int a = 10/num;
String str = null;
//str.length();
int[] arr = new int[5];
arr[5] = 10;
}catch(ArithmeticException e) {
e.printStackTrace();
}catch(InputMismatchException e) {
e.printStackTrace();
}catch(NullPointerException e) {
e.printStackTrace();
}catch(ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}catch(Exception e) {
e.printStackTrace();
}
8.1.1
- 运行时异常
(RunTimeException) 运行时才会发生的异常,不会做语法检查 - 非运行时异常
会做语法检查
8.2 finally子句
当try子句中的某行代码发生异常时,会终止程序的运行,跳转到catch
子句来执行。但是有些时候,为了程序的健壮性和完整性,无论有没有异常发生都要执行某些代码,比
如说打开了文件的I/O流需要关闭,建立的数据库连接需要释放等操作。finally子句就是为了完成必须执
行的代码而设计的。
//try-catch结构仅仅是能够处理异常
try {
//java连接mysql
//加载驱动
//创建连接,需要耗费资源
//发生sql,做增删改查
}catch(Exception e) {
e.printStackTrace();
}finally {
//不管是否发生异常,finally块始终执行。(不论任何情况下,finally块都会执行)
//善后处理:关闭连接,释放资源
}
- 重点
1、try块不可以单独存在,后面可以跟catch。
2、catch块不可以单独存在。
3、finally块不可以单独存在。
4、但是,try块后可以直接跟finally,catch块可以不存在
8.3.1throws关键字
如果一个方法中的语句执行时可能发成某种异常,但是并不能确定如何处理,则可以在程序所在的方法
声明后,使用throws关键字抛出异常
位置:方法参数列表的后面
throws关键字后面,可以跟多个异常,中间用逗号分割
throws关键字抛出的异常,由调用该方法的方法处理。throws的用法如下图所示。
public class ThrowTest {
public void createFile(String path) throws IOException{
File f = new File(path);
f.createNewFile();
}
public static void main(String[] args) {
ThrowTest tt = new ThrowTest();
try {
tt.createFile("c:/abc.txt");
}catch(IOException ex) {
ex.printStackTrace();
}
}
}
8.3.2throw 语句
- throw抛出异常.异常是通过关键字 throw 抛出,程序可以用throw语句引发明确的异常。