关于Java异常的疑问

众所周知下面的代码编译不过:

public class test{    private static void haha(){        throw new Exception();
    }    public static void main(String[] args) {
        haha();        return;
    }
}

javac test.java

未报告的异常错误Exception; 必须对其进行捕获或声明以便抛出。

但是下面的代码没有进行错误处理,却能够通过编译:

public class test{
    public static void main(String[] args) {
        String s = new String("test");
        System.out.println(s.substring(0,6));    
            return;
    }
    
}

javac test.java
java test

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
        at java.lang.String.substring(Unknown Source)
        at test.main(test.java:4)

请问这是什么原因?


慕虎7371278
浏览 755回答 2
2回答

倚天杖

第一个抛出的是Exception是checked异常,也就是编译器异常,所以必须手动处理。第二个抛出的StringIndexOutOfBoundsException是unchecked异常,运行时异常,所以不需要手动处理

米脂

StringIndexOutOfBoundsException继承了RuntimeException,不需要显式地声明处理。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java