异常捕获后流程继续

时间:2016-08-05 10:27:23

标签: java exception

为什么在exception捕获后继续流动?当我点击按钮,吐司显示消息但流程继续....

我告诉你我的代码!

     public static int showResult2(View v) {
            int totalAmount = 0;


            for (Birra b : biAdapter.getBox()) {
                if (b.selected) {
                    try {
                        int quantitaInt = Integer.parseInt(b.getQuantità());
                        totalAmount += b.distance * quantitaInt;

                    }catch(NumberFormatException exc){
                        System.out.println(exc);
                        Toast.makeText(context, "inserisci una quantita' a \""+b.name, Toast.LENGTH_LONG).show();
break;

                    }
                }
            }
            return totalAmount;
        }

在另一类课程中,我回忆起方法:

 ThreeFragment tf = new ThreeFragment();

                    string4 = tf.showResult(v);
                    try {
                    totalebibite = tf.showResult2(v);
                } catch (NumberFormatException exc) {
                    exc.printStackTrace();
                }

4 个答案:

答案 0 :(得分:0)

你已经抓住异常,因此Java假定您将充分处理它。

如果您不想要这种行为,除了完全不catch之外,您可以在打印完邮件后重新抛出异常(throw exc;),这意味着更高的调用堆栈应该处理它,或使用break;语句来提前结束循环。

答案 1 :(得分:0)

如果你想在异常使用中打破你的循环,如下所示。

你应该加上休息时间;在捕获

中断;是你需要打破任何循环语句,如for,while或do-while。

如果它的出现意味着确保你不是一次又一次地调用这种方法。

同时检查您的Java类中是否有任何其他方法使用相同的for循环条件。

您不应该调用您的片段类。调用方法是一种错误的方式。

  ThreeFragment tf = new ThreeFragment();
                        string4 = tf.showResult(v);               
                        totalebibite = tf.showResult2(v);

这是一种以这种方式调用方法的静态方法

 ThreeFragment.showResult2(v);

检查这个showResult(v);具有相同的循环

答案 2 :(得分:0)

下面的代码与您提供的代码类似。正如别人指出的那样,打破;结束最近的循环。

    for(int i=0; i<10; i++) {
        if(true) {      
            try{
                //Your logic here, which could throw exception
                System.out.println("throwing");
                if(true) { 
                    throw new Exception("This is it");
                }
            }catch(Exception e){
                System.out.println("catching");
                break;
            }

            System.out.println("inside if");
        }
        System.out.println("inside for");
    }
    System.out.println("outside for");

使用break是一种糟糕的编程习惯。您可以将代码流更改为类似的内容。

    try{
        System.out.println("inside try");
        for(int i=0; i<10; i++) {
            if(true) {
                if(true) { 
                    throw new Exception("This is it");
                }   
                System.out.println("inside if");
            }
            System.out.println("inside for");
        }
    }
    catch(Exception e){
        System.out.println("catching");
    }
    System.out.println("after catch");

如果您的问题得到解答,请将您的问题标记为已回答。

答案 3 :(得分:0)

将try / catch块放在循环周围而不是内部,因此循环退出异常:

try {
    for (Birra b : biAdapter.getBox()) {
        if (b.selected) {
            int quantitaInt = Integer.parseInt(b.getQuantità());
            totalAmount += b.distance * quantitaInt;
        }
    }
} catch (NumberFormatException exc) {
    System.out.println(exc);
    Toast.makeText(context, "inserisci una quantita' a \""+b.name, Toast.LENGTH_LONG).show();
}

或者,在catch块中你可以a)重新抛出异常,b)退出循环,或c)从方法返回。