在Java语言规范8(JLS8)中>>>第11章:异常(here),我看到它们是两种异常处理方法:
一些编程语言及其实现通过强制终止程序来对此类错误做出反应;其他编程语言允许实现以任意或不可预测的方式做出反应。这两种方法都不符合Java SE平台的设计目标:提供可移植性和健壮性。
第一种方法:强制终止程序 第二种方法:任意或不可预测的方式
但是,我无法清楚地区分这两种方式以及语言将使用的方式(语言使用的第一种方法是什么?语言使用第二种方法?)。请帮我澄清一下这个问题并举个例子来说明
而且,在这种情况下,Java的“可移植性”意味着什么?
答案 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;
}
执行这个简单的功能可以:
用Java
编写的类似方法将始终抛出ArrayIndexOutOfBoundsException
答案 1 :(得分:0)
强制终止程序=抛出NullPointerException
你无法抓住(不是你应该的)。
允许实现以任意或不可预测的方式做出反应=根本不抛出NullPointerException
。有些语言就是这样做的(想想在Objective-C中向nil
对象发送消息)。