先决条件: Java中的异常
null
对于每个线程,JVM(Java虚拟机)都会创建一个运行时堆栈。
- 线程中执行的每个调用都存储在堆栈中。
- 运行时堆栈中的每个条目称为激活记录或堆栈帧。
- 完成线程的每个方法调用后,都会从堆栈的相应条目中删除。
- 完成所有方法后,堆栈将为空,JVM将在终止线程之前销毁该运行时堆栈。
让我们看看下面的程序,以了解运行时堆栈的工作原理。
案例1:正常(优雅终止)
运行时堆栈的构造:
- 首先,主线程将调用main()方法,相应的条目将出现在堆栈中。
- 之后,main()方法被称为fun()方法,它将存储在堆栈中。
- 在fun()方法中,调用moreFun()方法。因此,moreFun()最终将存储在堆栈中。
- 最后,moreFun()没有调用任何方法,它会打印出来 你好,极客们!
JAVA
// Java program to illustrate run time // Run-time stack mechanism in // normal flow of Exception handling class Geeks { public static void main(String[] args) { fun(); } public static void fun() { moreFun(); } public static void moreFun() { System.out.println( "Hello Geeks!" ); } } |
输出
Hello Geeks!
销毁运行时堆栈: 印后 你好,极客们! ,它相应的条目将从堆栈中删除,然后它将转到fun()方法,并且没有任何可执行的内容,这就是为什么fun()方法的条目将从堆栈中删除,以此类推。当堆栈为空时,JVM会销毁运行时堆栈。
案例2:异常(异常终止)
运行时堆栈的构造:
- 下面的示例在方法moreFun()位置有算术异常,JVM将检查是否存在任何异常处理代码。如果没有,那么方法moreFun()将负责创建异常对象,因为异常是在方法moreFun()上引发的,堆栈中的相应条目将被删除,控件将转到方法fun()。
- JVM再次转到调用者方法,检查它是否有任何异常处理代码。如果没有,JVM会异常终止该方法,并从堆栈中删除相应的条目。
- 上述过程一直持续到主线程。如果主线程(main方法)没有任何异常处理代码,JVM也会异常终止main方法,默认的异常处理程序负责将异常消息打印到作为JVM一部分的输出屏幕。
JAVA
// Java program to illustrate run time // Run-time stack mechanism in // normal flow of Exception handling public class ExceptionHandling { public static void main(String[] args) { fun(); } public static void fun() { moreFun(); System.out.println( "Method fun" ); } public static void moreFun() { System.out.println( 10 / 0 ); System.out.println( "Method moreFun" ); } } |
运行时错误:
Exception in thread "main" java.lang.ArithmeticException: / by zero at ExceptionHandling.moreFun(ExceptionHandling.java:16) at ExceptionHandling.fun(ExceptionHandling.java:11) at ExceptionHandling.main(ExceptionHandling.java:7)
本文由 比沙尔·库马尔·杜比 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 .查看你在GeekSforgeks主页上的文章,并帮助其他极客。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END