关于软件构造的异常处理的总结

        在学习软件构造的过程当中,我也遇到了许多的有意思的话题,其中就包含了之前从来没有遇到过的,委托的处理方式。以及第一次总结的异常处理机制,下面我想对于我的心得做一下总结。

目录

Exception分类以及特征总结

不同类型处理方式

try--catch--finally 模块总结

新建异常类总结

Exception分类以及特征总结:

        首先异常的分类可以定义为error和Exception。error是系统内部的错位,程序员对于这样的错误是无能为力的,一旦发生,最好能够使得程序可以优雅的结束终止;

        而Exception一般是程序造成的错误,比如说文件没有读入,找不到文件位置等等的错误,这样的情况需要我们能够对他们进行捕获,处理等等。

如同上图描述的异常处理,Exception也分为了两类,这需要对于这两类有着不同的处理:

  • Checked Exception: 不能恢复的Exception,需要由使用者来处理的一类异常,例如IOException,这样的异常不捕获,使得编译报错。
  • Unchecked Exception: 指的是在运行时才会导致程序奔溃的异常,编译时候并不会报错。例如,Runtime Exception。

error的分类:

  •  User input errors 用户输入错误
  • Device errors 设备错误
  •  Physical limitations 物理限制

        同时,如果在程序的每一处都去使用处理Checked Exception,那么这将使得程序冗长,我们一般需要把Checked Exception改编为Unchecked Exception,来提高可读性和效率:

  1. Checked Exception在编写代码时就能发现
  2. Checked Exception必须要被捕获或者抛出
  3. Unchecked Exception在运行时才能发现

不同类型处理方式:

        既然Error我们无能为力,那就转向关注我们能处理的Exception。

        异常定义:异常:程序执行中的非正常事件,程序无法再按预想的流程执行。

处理方式分析:

  • 将错误信息传递给上层调用者,并报告“案发现场”的信息。
  • return之外的第二种退出途径,若找不到异常处理程序,整个系统完全退出

        面对Unchecked exception,我们可以进行不处理的态度,编译没问题,但执行时出现
就导致程序失败,代表程序中的潜在bug。

try--catch--finally 模块总结:

        模块的总体目的设计为:

        Catching an exception (try, catch, finally) 捕获并处理XX异常。

        形式用例如下:

public static void main(String args[]) {
    FileInputStream fis = null;
try {
    fis = new FileInputStream("sample.txt");
    int c;
    while ((c = fis.read()) != -1)
        System.out.print((char) c);
    fis.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
    }
}

        面对Unchecked 异常也可以使用 throws声明或try/catch进行捕获,但大多数时候是不需要的,也不应该这么做——掩耳盗铃 ,对发现的编程错误充耳不闻。

新建异常类总结:

        如果 JDK 提 供 的 exception 类 无法 充分描述 你的程序发生的错误,可以创建 自己的异常 类。

构建新的异常的实例代码:

public class FooException extends Exception {
    public FooException() { super(); }
    public FooException(String message) { super(message); }
    public FooException(String message, Throwable cause) {
        super(message, cause);
}
    public FooException(Throwable cause) { super(cause); }
}

调用新定义的checked exception:

try {
    ...
} catch(FooException ex) {
    ex.printStackTrace();
    System.exit(1);
} catch(IOException ex) {
    throw new FooException(ex);
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值