没有编译器错误/警告没有捕获/抛出异常

m0s*_*it0 6 java android sqlexception

我不明白为什么编译器不会警告我不要捕捉或抛出一个SQLException.情况如下:

我已经定义了这个界面:

public interface GenericDatabaseManager {
    public void createTables(DataBase model) throws SQLException;
}
Run Code Online (Sandbox Code Playgroud)

然后我创建了这个实现给定接口的类:

public class SqliteHelper extends SQLiteOpenHelper implements
        GenericDatabaseManager {

    @Override
    public void createTables(DataBase model) throws SQLException {
        // Code that throws SQLException
    }
Run Code Online (Sandbox Code Playgroud)

最后我从这里调用这个SqliteHelper.createTables():

public class DatabaseManager extends CoreModule {
    private boolean createUpdateDB(final String dbString, final String appId) {
        // Previous code...

        if (oldVer == -1) {
            dbCoreModel.addModel(dbModel);
            dbCoreModel.getManager().createTables(dbModel);
            return true;
        }

        // More code...
    }

}
Run Code Online (Sandbox Code Playgroud)

dbCoreModel.getManager()返回一个GenericDatabaseManager实例.但是编译器在线显示没有错误dbCoreModel.getManager().createTables(dbModel);,尽管这行抛出了SQLException.

有没有人知道为什么会这样?提前致谢.

编辑:关于SQLException不需要被捕获,因为它是一个RuntimeException.事实并非如此.这是一个例子:

import java.sql.SQLException;

interface Interface {
    public void throwsSQLException() throws SQLException;
}

class Test implements Interface {

    @Override
    public void throwsSQLException() throws SQLException {
        throw new SQLException();
    }
}

public class Main {

    public static void main(String[] args) {
        Interface i = new Test();
        i.throwsSQLException();
        System.out.println("Finished");
    }

}
Run Code Online (Sandbox Code Playgroud)

i.throwsSQLException();在这种情况下,编译器会显示错误.

PC.*_*PC. 12

android.database.SQLException 是运行时异常.

在java中,没有必要捕获或声明运行时异常的抛出.RuntimeExceptions这里阅读有关java 的详细说明

  • `android.database.SQLException`是一个`RuntimeException`,[`java.sql.SQLException`](http://docs.oracle.com/javase/7/docs/api/java/sql/SQLException.html)isn "T. (6认同)