JVM是否会向OS抛出异常

时间:2014-12-14 07:55:22

标签: java exception-handling

我被问到这个问题,如果主要抛出,JVM会向操作系统抛出异常吗? JVM会停止应用程序执行,但会处理此异常吗?

public static void main(String[] args) throws Exception {
    display();
}

public static void display() throws Exception {
    throw new RuntimeException();
}

如果出现任何异常,请指定。

2 个答案:

答案 0 :(得分:6)

它不是由操作系统处理,而是由JVM本身处理。来自Java language specification §11.3

  

如果找不到可以处理异常的catch子句,则终止当前线程(遇到异常的线程)

您的JVM将使用单个线程运行,该线程将被终止。根据{{​​3}}(强调补充),JVM将自行关闭:

  

程序会终止其所有活动,并在发生以下两种情况之一时退出:

     
      
  • 所有非守护程序线程的线程终止。
  •   
  • 某个线程调用类Runtime或类System的exit方法,安全管理器不禁止退出操作。
  •   

任何类型的异常都可能发生这种情况。请注意,就语言规范而言,JLS §12.8。这意味着Error还会终止线程/ JVM以及从Throwable继承的任何其他内容,而不仅仅是扩展Exception的对象。

答案 1 :(得分:0)

Java在JVM中运行,因此所有异常都将在JVM中处理。简单地说,Java异常不会引发操作系统级别。换句话说,您无法在操作系统级别捕获JAVA异常。

希望这能回答你的问题。