避免嵌套的try / catch

时间:2015-07-20 08:13:45

标签: java exception exception-handling nested 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
    }
}
}

如果str不是数字,parseInt会抛出NumberFormatException。但我想转换'这样我就可以CustomException发送"消息"代替。我可以在不使用上面嵌套的try/catch块的情况下执行此操作吗?

3 个答案:

答案 0 :(得分:2)

你可以将你的例子改成

 try {
     a = Integer.parseInt(str);
     if (a > 50) {
         throw new CustomException("message");
     }
 } catch (NumberFormatException | CustomException e){
     //do something
 }

答案 1 :(得分:1)

使用Scanner.hasNextInt()解析int而不用担心异常。

请参阅this question了解详细代码。

答案 2 :(得分:0)

你可以写:

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
    }
}

但我建议你使用你的版本,因为代码更具可读性。我的版本,即使删除内部尝试,也不如你的可读性。