下面来看一段代码,有啥问题吗?
public class test {
public static void main(String[] args) {
System.out.println(m());
}
public static int m(){
int i =10;
try {
return i;
}finally {
i++;
}
}
}
你可以说说,他最终输出什么嘛,我想许多人都是认为finally是必须会执行的,所以输出的可能是11,然后运行结果确实10,那是为什么呢?
首先:
1.代码的运行机制是从上往下运行的
2.代码在运行阶段如果遇到了return语句,下面的代码不会在执行
这个两个语法规则是Sun公司自己定义的,不能违背这个语法规则
所以运行出来的结果是10 不是11 return之后的代码都不会运行,然后你可可能有点了解,这还不够,是不是还可以看看这个类的反编译文件呢?
反编译代码如下:
// Decompiled by DJ v3.12.12.98 Copyright 2014 Atanas Neshkov Date: 2023-07-13 10:19:27
// Home Page: http://www.neshkov.com/dj.html - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name: test.java
package test;
import java.io.PrintStream;
public class test
{
public test()
{
}
public static void main(String args[])
{
System.out.println(m());
}
public static int m()
{
int i = 100;
int j = i;
i++;
return j;
Exception exception;
exception;
i++;
throw exception;
}
}
可以看到 i++ 明显是在return语句之前执行的,然后return输出的却是10,我想你应该很明白了