java 异常浅析
java中处理异常有五个关键字:try,catch,throw,throws,finally.
?
java中异常类都继承自Throwable。Throwable两子类:Error和Exception
?
1.Error类被识别为致命的。无法修复的错误,这些错误一般不允许在程序中出现。例如死循环等。
2.Exception类被认为是可控制的异常,可以在程序中捕获并处理,此类通常认为是异常。其子类分为:RuntimeException 和?非运行时异常。?
2.1.RuntimeException?运行时异常可捕获处理也可以不捕获,此类异常基本上经过程序员努力可以避免,比如,除数为零等异常。
例:?import java.util.InputMismatchException;
import java.util.Scanner;
public class SimpleHello {
?????? public static void main(String []args){
??????????? ?calc();
?????? }
?????? static void calc(){
???????????? ?try{
????????????????????System.out.println("请输入被除数");
?????????????????? ?Scanner input = new Scanner(System.in);
?????????????????? ?int a = input.nextInt();
?????????????????? ?System.out.println("请输入除数");
?????????????????? ?int b = input.nextInt();
??????????????????? System.out.println("计算结果为:"+(a/b));
????????????????? }catch(ArithmeticException ex){
???????????????????????????? ?System.out.println("除数不能为零");
????????????????? }catch(InputMismatchException ex){
??????????????????????????? System.out.println("所输入的数字必须为整数");
???????????????? }catch(Exception ex){
??????????????????????? ?ex.getMessage();
?????????????????}
???????}
}
2.1.非运行时异常,该异常要求程序中必须用try catch 进行处理,如果程序中不捕获非运行异常,程序将无法通过编译。
常见非运行异常有IOException ,FileNotFoundException
?
Finally 关键字用法
finally 语句块有必须执行的意思。无论程序是否发生异常都不能影响到finally语句块的执行。如上面的实例做出如下修改。
import java.util.InputMismatchException;
import java.util.Scanner;
public class SimpleHello {
?????? public static void main(String []args){
??????????? ?calc();
?????? }
?????? static void calc(){
???????????? ?try{
????????????????????System.out.println("请输入被除数");
?????????????????? ?Scanner input = new Scanner(System.in);
?????????????????? ?int a = input.nextInt();
?????????????????? ?System.out.println("请输入除数");
?????????????????? ?int b = input.nextInt();
??????????????????? System.out.println("计算结果为:"+(a/b));
????????????????? }catch(ArithmeticException ex){
???????????????????????????? ?System.out.println("除数不能为零");
????????????????? }catch(InputMismatchException ex){
??????????????????????????? System.out.println("所输入的数字必须为整数");
???????????????? }catch(Exception ex){
??????????????????????? ?ex.getMessage();
?????????????????}
??????????????finally{
????????????????????????System.out.println("程序退出");
?????????????????????? }
???????}
}
此时程序执行过程中无论是否发生异常都会执行 程序退出这条语句。
?
throw 和 throws 常用于自定义异常。
自定义异常类通常继承于RuntimeException
首先应先写一个异常类。这里我就不写了。
try{
???? throw new 异常类名;
}catch(异常类名 e){
???? e.printStackTrace();
}
如果此处不进行try catch 异常处理可使用throws向上一级抛出。
异常处理中常见的异常:
classCastException 类型转换异常
ArrayIndexOutBoundsException 数组越界异常
NullPointerException 尝试访问NULL对象的成员时发生空指针异常
classNotFoundException 找不到类异常。
ArithmeticException 算术运算异常