Java的可移植性在异常处理中有没有证明?

Does the portability feature of Java is proved in exception handling?

有人告诉我 Java 的 "portability" 特性在异常处理中也得到了证明,因为在 JLS8 文档中 (here)

An example of such a violation is an attempt to index outside the bounds of an array. Some programming languages and their implementations react to such errors by peremptorily terminating the program; other programming languages allow an implementation to react in an arbitrary or unpredictable way. Neither of these approaches is compatible with the design goals of the Java SE platform: to provide portability and robustness.

但是,根据我对 Java 的了解,我只知道可移植性功能只涉及 Java 程序的实现(一次编写 运行 随处可见)..

请帮我澄清一下这个问题,并给我一个例子来演示...谢谢!!

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

重点句子是这样的:

Neither of these approaches is compatible with the design goals of the Java SE platform: to provide portability and robustness.

请注意,我强调了不同的词。

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

  • ,这是不可移植的
  • 健壮性因没有程序而增强 "peremptorily terminate"。根据定义.

  • ,终止(例如崩溃)的程序是非健壮的

Java 中的异常和异常处理旨在解决可移植性和稳健性问题,尽管(显然)特定 异常不一定同时解决这两个问题。


I just know that the portability feature just involve the implementation of Java program (Write Once Run Anywhere)..

"Write Once Run Anywhere" 是一个明显不真实的营销口号。

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

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


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