Java 异常处理中的两种方法

Java 异常处理中的两种方法,java,exception,Java,Exception,在Java语言规范8(JLS8)>>>第11章:异常()中,我看到了两种异常处理方法: 一些编程语言及其实现对此类错误的反应是强制终止程序;其他编程语言允许实现以任意或不可预测的方式作出反应。这两种方法都不符合JavaSE平台的设计目标:提供可移植性和健壮性 第一种方法:强制终止程序 第二种方法:任意或不可预测的方法 但是,我无法清楚地区分这两种方法以及它们将使用什么语言(什么是语言使用第一种方法?什么是语言使用第二种方法?)。请帮我澄清这个问题,并给我一个例子来说明 此外,在本例中,Java的

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


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

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

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


此外,在本例中,Java的“可移植性”意味着什么

不确定强制终止程序的编程语言,但可能是早期版本的
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”
  • 打印“99 0”
  • 打印“0 99”
  • 使程序崩溃
  • 格式化你的硬盘

Java
编写的类似方法总是抛出一个
ArrayIndexOutOfBoundsException
强制终止程序=抛出一个
NullPointerException
您无法捕捉的异常(不是您应该捕捉的)


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

听说过try-catch-block和throws子句吗?第一个继续第二个终止程序“任意或不可预测的方式”意味着什么@Minigekhard想知道没有代码示例,你想说什么?你是在问与Java具有不同异常处理语义的编程语言示例吗?是的@MickMnemonic..这是我的问题嗯…第二种解释很难理解:(…你能解释更多细节吗?@RichardHarold我添加了一个关于
C
中会发生什么的示例,“允许实现以任意或不可预测的方式反应”意味着程序在异常发生时不会做任何事情,因此,在这种情况下,“不好的事情”可能会不可预测地发生(我们可以预测会发生什么)…是吗?这正是我的想法