java异常以及处理
捕获异常基本用法:
try{
有可能出现异常的语句 ;
}[catch (异常类型 异常对象) {
} … ]
[finally {
异常的出口
}]
注意:
try 代码块中放的是可能出现异常的代码.
catch 代码块中放的是出现异常后的处理行为.
finally 代码块中的代码用于处理善后工作, 会在最后执行.
其中 catch 和 finally 都可以根据情况选择加或者不加.
package com.mengh.Demo01;
public class Demo01 {
public static void main(String[] args) {
int arr[]={1,2,3,4};
try {
System.out.println(arr[100]);
} catch (Exception e) {
e.printStackTrace();
System.out.println("下标越界异常!");
}
System.out.println("arr[1]");
}
}
e.printStackTrace(); //打印调用栈的异常信息!
多个catch的使用,如同else if
package com.mengh.Demo01;
public class Demo01 {
public static void main(String[] args) {
int arr[]={1,2,3,4};
try {
System.out.println(arr[100]);
} catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
System.out.println("下标越界异常!");
}catch (NullPointerException e){
e.printStackTrace();
System.out.println("空指针异常!");
}
System.out.println("arr[1]");
}
}
结合finaly来使用,在有些使用场景,如释放资源等,要搭配finaly来使用:
package com.mengh.Demo01;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
try {
while (scanner.hasNext()) {
int result = scanner.nextInt();
System.out.println(result);
}
}catch (InputMismatchException e){
e.printStackTrace();
}
finally {
scanner.close();
System.out.println("关闭资源!");
}
}
}
使用了finally,无论程序是否有异常,finally里内的语句都会执行,从而保障了scanner的close方法的执行;从而释放了资源,做好了善后工作!