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

Java代码没有捕获错误?(初学者),java,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(St

这就是我所拥有的:

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识别为包含四个允许字符以外的字符

谢谢

  • assert
    子句抛出扩展的
    Throwable
    ,但不抛出
    异常。因此,您的
    捕获(异常e)
    被跳过。但是,不要试图抓住
    AssertionError
    Throwable

  • 断言必须使用
    -ea
    显式启用。不要依赖于它们的存在,否则您的程序将根据您无法控制的JVM参数表现出不同的行为

  • 最后,不要在期望发生某些事情(控制程序流)的地方使用异常

  • 相反,请尝试以下方法:

    private static boolean validChars(String dna) {
        for (char c: dna.toCharArray()) {
            if((c != 'C') && (c != 'G') && (c != 'T') && (c != 'A')) {
                return false;
            }
        }
        return true;
    }
    
  • assert
    子句抛出扩展的
    Throwable
    ,但不抛出
    异常。因此,您的
    捕获(异常e)
    被跳过。但是,不要试图抓住
    AssertionError
    Throwable

  • 断言必须使用
    -ea
    显式启用。不要依赖于它们的存在,否则您的程序将根据您无法控制的JVM参数表现出不同的行为

  • 最后,不要在期望发生某些事情(控制程序流)的地方使用异常

  • 相反,请尝试以下方法:

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

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

    试试这个:

    ...
    catch (Throwable e)
    
    或仅捕获断言失败:

    catch (AssertionError e)
    

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

    试试这个:

    ...
    catch (Throwable e)
    
    或仅捕获断言失败:

    catch (AssertionError e)
    

    assert
    抛出的不是的子类,而是的子类。

    assert
    抛出的不是的子类,而是的子类。

    运行代码时会发生什么?请注意,
    assert
    是作为调试工具供开发人员使用的。它不应用作执行控制。我强烈建议您改用
    if
    语句。运行代码时会发生什么?请注意
    assert
    是供开发人员作为调试工具使用的。它不应用作执行控制。我强烈建议您使用
    if
    语句。谢谢。如果布尔变量为false,如何抛出自定义异常(我创建的)?不知道如何使用常规的try/catch块执行此操作。异常不用于控制流。您使用一个
    if
    语句,在本例中只需从该语句返回即可。谢谢。如果布尔变量为false,如何抛出自定义异常(我创建的)?不知道如何使用常规的try/catch块执行此操作。异常不用于控制流。使用
    if
    语句,在本例中仅从该语句返回。