Java 避免嵌套的try/catch
如果Java 避免嵌套的try/catch,java,exception,exception-handling,nested,try-catch,Java,Exception,Exception Handling,Nested,Try Catch,如果str不是数字,parseInt将抛出NumberFormatException。但是我想“转换”它,这样我将有一个带有“message”的CustomException。我是否可以在不使用上述嵌套的try/catch块的情况下执行此操作?您可以将示例重构为 import java.util.Scanner; public class Test{ public static void main(String[] args){ Scanner input = new Sc
str
不是数字,parseInt
将抛出NumberFormatException
。但是我想“转换”它,这样我将有一个带有“message”的CustomException
。我是否可以在不使用上述嵌套的try/catch
块的情况下执行此操作?您可以将示例重构为
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String str = input.next();
int a;
try{
try{
a = Integer.parseInt(str);
}
catch(NumberFormatException nfe){
throw new CustomException("message");
}
if (a>50) throw new CustomException("message");
}
catch(CustomException e){
//do something
}
}
}
你可以写:
try {
a = Integer.parseInt(str);
if (a > 50) {
throw new CustomException("message");
}
} catch (NumberFormatException | CustomException e){
//do something
}
但是我建议您使用您的版本,因为代码更具可读性。即使删除了内部try,我的版本的可读性也不如你的版本。使用
Scanner.hasNextInt()
解析int而不必担心异常
有关详细代码,请参阅。这是您的确切用例吗?如果是这样,那么您不需要做什么,您只需捕获NumberFormatException即可。
如果(a>50)抛出新的CustomException(“消息”)
?您的意图是什么?闻起来像是一种味道。也许你可以用一个替换CustomException
。在进一步操作之前,先看看“异常链接”。我写这篇文章时的答案都是胡说八道。@Turing85 err…也许是的…但我只是想知道我是否可以在catch块中重新引发异常,并在方法中处理重新引发的异常,而不必使用嵌套的try/catch块。您的第一个示例的行为方式与他的不同。当我调用System.out.println(e.getMessage())时,从catch内部抛出一个CustomException
,而这个catch不会被捕获;在catch块内,NumberFormatException e将给出“For input string:~~”而不是“message”。@tarevirat在这两种情况下都有相同的消息吗?是的,我需要用一个方法处理所有抛出的异常,所以我需要在catch块中重新抛出一个CustomException。@tarevira您不必重新抛出exception,您可以在函数中包装所有内容,并在调用函数的共享块中处理异常
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String str = input.next();
int a;
try{
a = Integer.parseInt(str);
if (a>50) throw new NumberFormatException("message");
}
catch(NumberFormatException e){
//do something
}
}