gpt4 book ai didi

java - 几个 "ChildException"捕获 block 与一个 "Exception"捕获 block

转载 作者:行者123 更新时间:2023-11-29 08:06:41 29 4
gpt4 key购买 nike

多个 ChildException catch block 和一个 Exception catch block 之间哪个更好? 更好,我的意思是以良好的实践方式

举例说明:

public static void main(String[] args) {
System.out.println(Main.isNonsense1(null)); // false <- bad
System.out.println(Main.isNonsense2(null)); // NullPointerException <- good
}

// More readable, less precise
public static boolean isNonsense1(String className) {
try {
Class.forName(className);
String.class.getConstructor(String.class);
className.getBytes("UTF-8");
MessageDigest.getInstance("SHA-1").wait();
return true;
} catch (Exception e) {
return false;
}
}

// Less readable, more precise
public static boolean isNonsense2(String className) {
try {
Class.forName(className);
String.class.getConstructor(String.class);
className.getBytes("UTF-8");
MessageDigest.getInstance("SHA-1").wait();
return true;
} catch (ClassNotFoundException e) {
return false;
} catch (NoSuchMethodException e) {
return false;
} catch (SecurityException e) {
return false;
} catch (UnsupportedEncodingException e) {
return false;
} catch (NoSuchAlgorithmException e) {
return false;
} catch (InterruptedException e) {
return false;
}
}

最佳答案

这与这个问题有关:Catch multiple exceptions at once?

那里的答案很好。关键是,如果您捕获到 Exception,那么您应该处理您知道的每种情况,并throw 其余所有情况。也就是说,简单地在您的示例中捕获 Exception 并返回 false 将不是是一个好主意。您可能会无意中捕捉到一些您无意捕捉到的异常。

使用您的示例,这是我建议的代码:

public static boolean isNonsense2(String className) {
try {
Class.forName(className);
String.class.getConstructor(String.class);
className.getBytes("UTF-8");
MessageDigest.getInstance("SHA-1").wait();
return true;
} catch (Exception e) {
if (e instanceof ClassNotFoundException
|| e instanceof NoSuchMethodException
|| e instanceof SecurityException
|| e instanceof UnsupportedEncodingException
|| e instanceof NoSuchAlgorithmException
|| e instanceof InterruptedException) {
return false;
} else {
throw e;
}
}
}

关于java - 几个 "ChildException"捕获 block 与一个 "Exception"捕获 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10702205/

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