JVM如何检查程序中发生了哪种类型的异常?

3

JVM如何获取关于发生的异常类型的信息,并显示有关异常类型以及JVM用于通知我们的线程。


你是指它如何生成堆栈跟踪吗?还是指异常是如何抛出的?你能举个例子说明你的意思吗? - Richard Tingle
先生,在以下程序中JVM显示异常---------public static void main(String[] args) { String s="1"; int a=Integer.parseInt(s); } ------- 在这里JVM如何获取信息,即在线程“main”中有异常java.lang.NumberFormatException: For input string: "a" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:492) at java.lang.Integer.parseInt(Integer.java:527) at javaapplication3.JavaApplication3.main(JavaApplication3.java:28) Java结果:1 - Vinay Sharma
3个回答

0
程序员可以使用throw语句抛出异常。字节码使用操作码athrow
objectref 必须是引用类型,并且必须引用 Throwable 类或 Throwable 子类的实例对象。它从操作数栈中弹出,然后通过搜索当前方法 (§2.6) 找到与 objectref 的类匹配的第一个异常处理程序来抛出 objectref,如 §2.10 中所述的算法。
如果找到与 objectref 匹配的异常处理程序,则其中包含处理此异常的代码位置。pc 寄存器被重置为该位置,当前帧的操作数栈被清除,objectref 被推回操作数栈,然后继续执行。

请参考JLS中的2.10. Exception以更好地理解异常。


0

Java开发人员根据某些条件定义抛出异常的函数,例如FileNotFound Exception。例外是运行时异常,它可以在代码中的任何地方发生,例如NPE。

如果捕获了异常,它将不再传播,这意味着您必须处理它。如果不捕获异常,则它将仅传播到其父调用函数。这个过程将继续到main()方法。即使main()也不处理它,JVM也会停止运行。

此外,没有单独的报告线程。执行代码的同一个主线程负责异常处理。


-1

有两种类型的异常:已检查和未检查。

已检查异常是需要在程序中捕获的异常。它们是“Exception”的子类。

未检查异常是不需要捕获的异常。它们是“RuntimeException”的子类。

JVM可以抛出像OutOfMemoryException或NullPointerExeception这样的RuntimeExceptions。

但是,一些框架或您可以明确地抛出异常(已检查或未检查,取决于您的需求)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接