异常处理中的2种方法

时间:2017-09-07 04:22:53

标签: java exception

在Java语言规范8(JLS8)中>>>第11章:异常(here),我看到它们是两种异常处理方法:

  

一些编程语言及其实现通过强制终止程序来对此类错误做出反应;其他编程语言允许实现以任意或不可预测的方式做出反应。这两种方法都不符合Java SE平台的设计目标:提供可移植性和健壮性。

第一种方法:强制终止程序 第二种方法:任意或不可预测的方式

但是,我无法清楚地区分这两种方式以及语言将使用的方式(语言使用的第一种方法是什么?语言使用第二种方法?)。请帮我澄清一下这个问题并举个例子来说明

而且,在这种情况下,Java的“可移植性”意味着什么?

2 个答案:

答案 0 :(得分:1)

不确定强制终止程序的编程语言,但可能是Pascal的早期版本以这种方式处理问题(推断终止它会更好)该程序比将任意错误引入结果)。

任意或不可预测的方式做出反应:考虑如果用C编写的程序访问其范围之外的数组会发生什么:你得到缓冲区溢出。缓冲区溢出是许多安全问题的基础(搜索"缓冲区溢出攻击")。

考虑这个简单的C函数:

int test(int arg) {
    int x;
    int arr[8];
    int y;
    x = 0; y = 0;
    arr[8] = 99;
    printf("%d %d\n", x, y);
    return x+y;
}

执行这个简单的功能可以:

  • 打印出" 0 0"
  • 打印出来" 99 0"
  • 打印出来" 0 99"
  • 使程序崩溃
  • 格式化您的硬盘

Java编写的类似方法将始终抛出ArrayIndexOutOfBoundsException

答案 1 :(得分:0)

强制终止程序=抛出NullPointerException你无法抓住(不是你应该的)。

允许实现以任意或不可预测的方式做出反应=根本不抛出NullPointerException。有些语言就是这样做的(想想在Objective-C中向nil对象发送消息)。