最后在 java 中阻止覆盖
Finally block overriding in java
下面是我关于一个简单的 finally 块的示例。
public class Ex2 {
public static void main(String args[]) throws ArithmeticException {
System.out.println(Ex2.myTestingFuncn());
}
public static int myTestingFuncn() {
try {
// first execution
return 5;
} finally {
// second execution
System.out.println("finally");
}
}
}
这个结果是
finally
5
符合预期。
但是当这种情况发生时,finally 块会覆盖 try 块的值。
try {
// first execution
return 5;
} finally {
// second execution
return 12;
}
结果:12
这是怎么发生的?我的意思是这些块的执行顺序是什么?
请帮忙。
谢谢
在您的第一个示例中,您使用了 System.out.println
2 次。第一次调用函数时,第二次在函数内部调用。
所以他会先打印 "finally" 因为这是你函数中执行的最后一个块。最后打印 5 的原因是因为那是被调用函数的输出。 (在你的函数执行后,输出是5)因为“finally”打印在你的函数内部,显然它会先显示(因为它在运行时间打印)然后,你的函数的实际输出是调用将被打印出来。不要在你的函数中使用 System.out.println
。它可能会让你感到困惑:)
System.out.println
的意思是到了代码所在的地方就打印出来。 ( = 在 运行 时间)
在您的第二个示例中,return 值本身被覆盖。在第一个示例中,您只有 1 个 return 值和一个 System.out.println
语句,它们彼此没有影响。
希望对您有所帮助。
下面是我关于一个简单的 finally 块的示例。
public class Ex2 {
public static void main(String args[]) throws ArithmeticException {
System.out.println(Ex2.myTestingFuncn());
}
public static int myTestingFuncn() {
try {
// first execution
return 5;
} finally {
// second execution
System.out.println("finally");
}
}
}
这个结果是
finally
5
符合预期。
但是当这种情况发生时,finally 块会覆盖 try 块的值。
try {
// first execution
return 5;
} finally {
// second execution
return 12;
}
结果:12
这是怎么发生的?我的意思是这些块的执行顺序是什么?
请帮忙。
谢谢
在您的第一个示例中,您使用了 System.out.println
2 次。第一次调用函数时,第二次在函数内部调用。
所以他会先打印 "finally" 因为这是你函数中执行的最后一个块。最后打印 5 的原因是因为那是被调用函数的输出。 (在你的函数执行后,输出是5)因为“finally”打印在你的函数内部,显然它会先显示(因为它在运行时间打印)然后,你的函数的实际输出是调用将被打印出来。不要在你的函数中使用 System.out.println
。它可能会让你感到困惑:)
System.out.println
的意思是到了代码所在的地方就打印出来。 ( = 在 运行 时间)
在您的第二个示例中,return 值本身被覆盖。在第一个示例中,您只有 1 个 return 值和一个 System.out.println
语句,它们彼此没有影响。
希望对您有所帮助。