当前位置: 首页 > 面试题库 >

“空语句”可能(不)引发哪些Java错误和异常?

司马弘益
2023-03-14
问题内容

*java.lang.Throwable 空语句可能会抛出的 *哪个 子类?

我用“空洞的陈述” 一词指的 是“无”,“分号”和“分号”:

// ....
A(); B(); C();
try {
     // nothing
} catch (java.lang.Throwable e) {
     // which Throwable subclass might we see?
}
D(); E(); F();
try {
     ; // semi-colon
} catch (java.lang.Throwable e) {
     // which Throwable subclass might we see?
}
G(); H(); I();
try {
     ; ; ;;  ;;;;; ; ; ;;; ;; ;; ;; ;; ; ;; ; ;; // ... semi-colons
} catch (java.lang.Throwable e) {
     // which Throwable subclass might we see?
}
J(); K(); L();
// ....


子类的Throwable可之间抛出A();B();之间或C();D();或之间F();G();之间或I();J();

或者更确切地说, 保证* Throwable的 哪些 子类 不在 这些语句之间出现? *


问题答案:

由于您是指JVMS,因此我假设您是在寻求正式答案,而正式答案是您的问题实际上没有任何意义。:-)

询问JVM 如何 执行Java源代码片段就像询问数学家 正确 的10 + 10计算方式。数学家可能会说类似“ 未定义 如何
计算”之类的内容。同样,定义Java代码段含义的JLS也没有详细说明 如何 执行它。

因此,首先让我稍微形式化一下您的问题:“在与给定Java代码段相对应的 字节码中
(由的引用实现发出javac)会VirtualMachineErrors出现在哪里?”

这个问题可以说很容易回答。JVMS的相关部分说

VirtualMethodError当内部错误或资源限制使Java虚拟机实现无法实现本章中描述的语义时,将抛出一个对象,该对象是该类的子类的实例。该规范无法预测可能会遇到内部错误或资源限制的位置,并且无法准确地报告何时可以报告它们。

因此,答案是:在任何两个字节码指令之间。

现在回到您的原始问题:例如,此片段

try {
     // nothing
} catch (java.lang.Throwable e) {
     // which Throwable subclass might we see?
}

被编译为空程序,该程序无法合理地引发任何异常。

关于您在评论中的后续问题:

是否应将JLS 11.1.3理解为“ Throwable除非是的子类,否则保证在字节码之间不出现VirtualMachineError
的子类?

是的,你可以这样说。我的措词可能会有所不同:任何指令都会引起

  • JVM指令集为相关指令指定的异常,
  • 类型的任何例外 VirtualMachineError
  • 没有其他例外


 类似资料:
  • 我从solarQube中得到了以下一种错误=“NullPointerException可能会被抛出,因为这里的“a”可以为null”。下面是该错误的简单代码示例。 类别: 然后我有一个使用上面的类作为参数的方法: 我得到了SonarQube突出显示的的错误。我只是无法理解这些语句的问题。SonarQube描述的错误描述并没有让我更清楚。我如何修复它,有人能向我解释为什么它是错误吗?

  • 问题内容: 有没有一种方法(在编码时)知道在执行python代码时期望哪些异常?由于不知道会抛出哪种异常类型(并且不要告诉我阅读文档,所以很多时候我都会捕获90%的基础Exception类)。很多时候,异常可以从深处传播出去。次文档未更新或不正确)。有某种工具可以检查吗?(例如通过阅读python代码和库)? 问题答案: 我猜一个解决方案可能只是不精确,因为缺少静态的输入规则。 我不知道有什么工具

  • **程序需要做的事情:** 当它运行时接受两个命令行参数,否则抛出一个错误。该规则包含以下要求:“如果没有命令参数,则执行I/O错误处理。” 问题是,每次尝试使用I/O异常捕获时,都会收到以下错误: 无法访问IOException得catch块.此异常从不从try语句正文引发 我从Eclipse获得的快速修复建议: 1。删除Catch条款2。用close替换Catch子句 下面是我的代码: nul

  • 问题内容: 我实现了一种字体系统,该字体系统通过char switch语句找出要使用的字母。我的字体图像中只有大写字母。我需要这样做,例如,“ a”和“ A”都具有相同的输出。而不是案件数量的两倍,它可能是如下所示: 这在Java中可能吗? 问题答案: 您可以通过省略该语句来使用切换大小写掉线。 …或者您可以在输入之前将其标准化为小写或大写。

  • 问题内容: 在大学里有关Java的问题中,有以下代码片段: 我被要求提供其输出。我回答了,但是正确答案是。为什么会这样呢?我只是不明白MyExc2去哪了。 问题答案: 通过阅读你的答案并了解你可能的想法,我相信你认为“进行中的例外”具有“优先权”。记住: 当一个新的异常被抛出到一个catch块或将要传播到该块之外的finally块中时,当新的异常向外传播时,当前异常将被中止(并被遗忘)。与其他任何

  • 当我用空IN子句编写查询时,它引发了一个错误。例如,在()中选择id所在的城市 如果我在in子句中编写任何返回空resultset的子查询,那么它就不会引发错误。