是否在异常处理中证明了Java的可移植性特性?

时间:2017-09-07 11:16:46

标签: java portability

有人告诉我,Java的“可移植性”功能也在异常处理中得到证明,因为在JLS8文档中{here

  

此类违规行为的一个例子是尝试在外部进行索引   数组的边界。一些编程语言及其编程   实现通过强制终止对这些错误做出反应   程序;其他编程语言允许实现做出反应   以任意或不可预测的方式。这些方法都不是   兼容Java SE平台的设计目标:提供   可移植性和健壮性。

但是,按照我对Java的了解,我只知道可移植性功能只涉及Java程序的实现(Write Once Run Anywhere)。

请帮我澄清一下这个问题,并举例说明......谢谢!!

2 个答案:

答案 0 :(得分:0)

其他语言中不可预测的行为与快速失败(运行时异常)的更高质量相比。是的,这会影响可移植性,尤其是处理错误报告。日志在嵌入式市场中发挥着重要作用。

答案 1 :(得分:0)

关键句是:

  

这些方法都不符合Java SE平台的设计目标:提供可移植性健壮性。

请注意,我强调了另一个词。

  • 通过抛出异常而不是以不可预测的方式行事来增强可移植性。如果一个程序行为不可预测,那么它可能会在不同的平台 1 上表现不同。根据定义,这是非便携的

  • 没有程序就可以增强健壮性,并强制终止"。根据定义终止(例如崩溃)的程序是非健壮的

Java中的异常和异常处理旨在解决可移植性和健壮性问题,但(显然)特定的异常并不一定能解决这两个问题。

  

我只知道可移植性功能只涉及Java程序的实现(Write Once Run Anywhere)..

"写一次随处运行"是一个明显不正确的营销口号。

  • 从某种意义上说Java并不是在没有人为JVM实现的机器上运行的。
  • 从某种意义上说,不存在Java无法隐藏的平台差异(例如,在Windows和Linux上运行的Java之间)。任何没有正确考虑这些差异的程序都不可移植。
  • 从某种意义上说,Java有多个版本和发行版,并且为一个版本/发行版编写的Java程序可能与另一个版本/发行版不兼容。 (通常,旧的应用程序将在新的Java上运行,但不是相反。)

但是,您的意思是正确的,因为Java程序的愿望是能够在多个平台和版本上运行而无需重新编译。这是便携性的一个方面。

1 - 换句话说,如果程序的行为不可预测,那么我们无法预测它在不同平台上的行为会相同。