Java 中的异常

一.异常处理机制

使用try…catch捕获异常,在try块中执行语句,在catch中处理异常.

try {
            in = new FileInputStream("test.txt");
            int b1=in.read();
            System.out.println(b1);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{ in.close(); }

使用finally块可以在程序发生异常时,执行必要的操作,例如流的关闭

JDK1.7后,在try中打开的资源会确保被关闭.

二.异常类结构图

图片来源于互联网

image

从结构图上可以看到异常主要分为两种: Exception和Error,它们都继承自Throwable

对于错误,一般是与JVM有关的问题,如系统崩溃,动态链接失败,通常不可恢复.

对于异常,一般是由于程序本身的问题.应该使用catch捕捉后处理.

常见的异常:

IndexOutOfBoundsException: 数组引用越界异常

NullPointerException: 空指针异常

NumberFormatException: 数字格式化异常

ArithmeticException: 算术运算异常(除零)

 

三.Checked异常和Runtime异常

在程序中Checked异常必须要捕获处理,否则无法编译通过.

处理Checked异常的方式:

1.直接用catch捕捉后处理.

2.在方法声明时使用 throws 抛出异常,在方法内部使用 throw 抛出一个异常,交给上层处理.

而Runtime异常非常灵活,可以不用声明或处理.也可以用try…catch块捕捉后处理.

 

四.自定义异常类

创建类时继承Exception 即可

public class ActionException extends Exception{

}

异常对象的printStackTrance()方法可以打印出异常信息栈,根据这些信息可以找到异常的源头.

 

五.异常处理的一些规则

1.不要过度使用异常.对于程序中可以预料的错误,应该编写错误处理代码.虽然异常机制很方便,但是绝对不能用异常代替错误.对于不可预料的,未知的错误时才使用异常.

2.单独处理各个异常块.尽量避免在一个try块中编写大量的语句,使用大量的catch捕捉异常.这通常会造成混乱,无法清晰理解程序.

3.对于捕获到的异常,不应该简单的进行忽略.可以实施处理或者抛出异常.

4.在合适的层次处理异常.将底层数据错误信息发送到用户层是非常失败的,那些信息对用户操作根本没有任何帮助.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值