Java代码没有捕获错误? (初学者)

时间:2013-02-17 22:55:47

标签: java

这就是我所拥有的:

public class A1tester {
    static String dna = "GCTTTA";
    static String dna1 = "GCTAAAAAD";

    public static void main(String[] args) {
        validChars(dna);
        validChars(dna1);
    }

    private static boolean validChars(String dna) {
        try {
            for (char c: dna.toCharArray()) {
                assert ((c == 'C') || (c == 'G') || (c == 'T') || (c == 'A'));
            }
        } catch (Exception e) {
            System.out.println("Exception caught!");
            return false;
        }

        System.out.println("DNA has only the permitted letters");
        return true;
    }

}

我错过了什么阻止我的validChars()方法将dna1识别为包含除了四个允许字符以外的其他字符?

感谢。

3 个答案:

答案 0 :(得分:4)

  1. assert子句引发AssertionError延长Throwable但不Exception。因此,您的catch (Exception e)被跳过了。但是,不要试图抓住AssertionErrorThrowable

  2. 必须使用-ea明确启用断言。不要依赖它们的存在,否则你的程序将根据你无法控制的JVM参数表现不同。

  3. 最后不要使用您希望发生某些事情的例外情况(控制程序流程)。

  4. 而是试试这个:

    private static boolean validChars(String dna) {
        for (char c: dna.toCharArray()) {
            if((c != 'C') && (c != 'G') && (c != 'T') && (c != 'A')) {
                return false;
            }
        }
        return true;
    }
    

答案 1 :(得分:1)

assert抛出AssertionError,它不是Exception的子类,而是Error的子类。

答案 2 :(得分:0)

Assert会抛出一个错误,这不是异常!

试试这个:

...
catch (Throwable e)

或仅捕获断言失败:

catch (AssertionError e)