以例子理解方法的两种退出方式。
方法的结束方法有两种: 1.正常结束,以return为代表 2.方法执行中出现未捕获处理的异常,以抛出异常结束
1. 正常结束
//方法的结束方法有两种: 1.正常结束,以return为代表 2.方法执行中出现未捕获处理的异常,以抛出异常结束
public class StackFrameTest {
public static void main(String[] args) {
StackFrameTest stackFrameTest = new StackFrameTest();
// try {
stackFrameTest.method1();
// } catch (Exception e) {
// System.out.println("main 捕获异常:" + e);
// }
System.out.println("main 正常结束...");
}
public void method1() {
System.out.println("method1 开始执行...");
int a = 10;
method2();
//try{
// System.out.println(10 / 0);
//}catch (Exception e) {
// System.out.println("method1 捕获异常:" + e);
//}
System.out.println("method1 执行结束...");
}
public int method2() {
System.out.println("method2 开始执行...");
int b = 12;
int c = (int) method3();
System.out.println("method2 即将结束...");
return b + c;
}
private double method3() {
System.out.println("method3 开始执行...");
double d = 13.0;
System.out.println("method3 即将结束...");
return d;
}
}
输出结果:
method1 开始执行... method2 开始执行... method3 开始执行... method3 即将结束... method2 即将结束... method1 执行结束... main 正常结束... |
2. 出现未捕获的异常
以在method1 中,有0为除数为例
public void method1() { System.out.println("method1 执行结束..."); |
则输出结果为:
method1 开始执行...
Exception in thread "main" java.lang.ArithmeticException: / by zero |
注意,异常是抛在了main 上,因为method1没有捕获,就异常退出了,返回到它的上一个栈帧,即main
3. 在main 方法中捕获异常 (出现异常的上一个栈帧)
|
则输出:
method1 开始执行... method2 开始执行... method3 开始执行... method3 即将结束... method2 即将结束... main 捕获异常�?java.lang.ArithmeticException: / by zero main 正常结束... |
在main 中捕获异常,则main 可以正常结束,但是method1还是异常退出了 (捕获的地方才可以正常结束)
4. 在method1中捕获异常 (出现异常的地方)
|
则输出:
method1 开始执行... method2 开始执行... method3 开始执行... method3 即将结束... method2 即将结束... method1 捕获异常�?java.lang.ArithmeticException: / by zero method1 执行结束... main 正常结束... |