gpt4 book ai didi

java - 在 try block 中返回 vs 在 block 后返回

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:14 26 4
gpt4 key购买 nike

我在一个小型静态方法中有一个 try 语句,是否有关于我应该从哪里返回的最佳实践?

try {
mightThrow();
return true;
} catch (Exception e) {
return false;
}

或之后,

try {
mightThrow();
} catch (Exception e) {
return false;
}
return true;

在功能上,这些应该执行相同,实际上有字节码差异吗?性能方面,它们完全相同吗?

或者只是一个比另一个更受欢迎?哪个以及为什么?

最佳答案

我还没有听说过这方面的实际最佳实践,但您经常会看到,当方法使用过早返回时,返回 true 的情况位于底部,例如

public bool canReadFile(path) {
if (!fileExists(path))
return false;

if (!fileIsReadable(file))
return false;

...
return true;
}

因此,我建议您对 try/catch block 遵循这种做法。它还可以更快地查看“预期”返回值是什么。

关于字节码,是的,确实有区别。我做了一个快速示例程序

class TryBlock {
public static void main(String[] args) {
a();
b();
}

public static boolean a() {
try {
System.out.println("A");
return true;
} catch (Exception e) {
return false;
}
}

public static boolean b() {
try {
System.out.println("B");
} catch (Exception e) {
return false;
}
return true;
}

}

然后编译它并检查字节码

$ javac TryBlock.java; javap -c TryBlock
Compiled from "TryBlock.java"
class TryBlock {
TryBlock();
Code:
0: aload_0
// Method java/lang/Object."<init>":()V
1: invokespecial #1
4: return

public static void main(java.lang.String[]);
Code:
// Method a:()Z
0: invokestatic #2
3: pop
// Method b:()Z
4: invokestatic #3
7: pop
8: return

public static boolean a();
Code:
// Field java/lang/System.out:Ljava/io/PrintStream;
0: getstatic #4
// String A
3: ldc #5
// Method java/io/PrintStream.println:(Ljava/lang/String;)V
5: invokevirtual #6
8: iconst_1
9: ireturn
10: astore_0
11: iconst_0
12: ireturn
Exception table:
from to target type
0 9 10 Class java/lang/Exception

public static boolean b();
Code:
// Field java/lang/System.out:Ljava/io/PrintStream;
0: getstatic #4
// String B
3: ldc #8
// Method java/io/PrintStream.println:(Ljava/lang/String;)V
5: invokevirtual #6
8: goto 14
11: astore_0
12: iconst_0
13: ireturn
14: iconst_1
15: ireturn
Exception table:
from to target type
0 8 11 Class java/lang/Exception
}

那么有性能差异吗?虽然我还没有测试过,但我敢打赌不会有任何明显的变化。最重要的是,这几乎不会成为您应用程序的瓶颈。

关于java - 在 try block 中返回 vs 在 block 后返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31799654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com