读书人

java 错误浅析

发布时间: 2012-12-21 12:03:49 作者: rapoo

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 算术运算异常

读书人网 >编程

热点推荐