方法抛出Exception而不是编译但RuntimeException没有问题

时间:2016-04-18 04:58:23

标签: java exception

我写了以下示例类来试验异常。我有两个相同的方法,一个抛出RuntimeException而一个抛出Exception不编译。

  

示例代码

public class Test{

    public static void main(String... args){
        System.out.println(3%-2);
        System.out.println(4%-2);

        Test t1 = new Test();
        t1.mtd1(101);
        t1.mtd2(101);

    }

    public int mtd1( int i) throws RuntimeException{
        System.out.println("mtd");

        return i;
    }

    public int mtd2( int i) throws Exception{
        System.out.println("mtd");

        return i;
    }


}
  

错误

C:\Java\B-A>javac Test.java
Test.java:10: error: unreported exception Exception; must be caught or declared to be thrown
                t1.mtd2(101);
                       ^
1 error

2 个答案:

答案 0 :(得分:1)

您有两种选择。您可以在main()方法中捕获异常,也可以让main()也抛出异常。

选项一:

public static void main(String... args){
    System.out.println(3%-2);
    System.out.println(4%-2);

    Test t1 = new Test();
    try {
        t1.mtd1(101);
        t1.mtd2(101);
    }
    catch (Exception e) {
        // do something
    }
}

选项二:

public static void main(String... args) throws Exception {
    System.out.println(3%-2);
    System.out.println(4%-2);

    Test t1 = new Test();
    t1.mtd1(101);
    t1.mtd2(101);
}

顺便说一句,看到你抓住RuntimeException有点奇怪,因为这个例外未经检查。通常,未经检查的异常表示在运行时以通常无法处理它们的方式运行的事物。

答案 1 :(得分:1)

派生自RuntimeException类的所有异常都称为未经检查的异常。所有其他例外都是经过检查的例外。必须在代码中的某处捕获已检查的异常。如果没有代码将无法编译。