Java 为什么android.database.SQLException未选中?
这可能不适合SO,因为这不是一个真正的编码问题,但我还没有找到一个令人满意的答案,我相信SO社区可以 因此,根据定义,它和共享的应用范围大致相同,即在访问/修改数据库时提供有关错误的信息。虽然我在某个地方读到过检查过的异常是“out”,但我非常喜欢这样一个事实,即当您使用带有Java 为什么android.database.SQLException未选中?,java,android,sqlexception,Java,Android,Sqlexception,这可能不适合SO,因为这不是一个真正的编码问题,但我还没有找到一个令人满意的答案,我相信SO社区可以 因此,根据定义,它和共享的应用范围大致相同,即在访问/修改数据库时提供有关错误的信息。虽然我在某个地方读到过检查过的异常是“out”,但我非常喜欢这样一个事实,即当您使用带有throws关键字的检查过的异常时,编译器会提醒您处理异常。不幸的是,对于未检查的异常,这不起作用 我的问题是: 当选中java.sql.SQLException时,为什么谷歌要取消选中他们的android.database
throws
关键字的检查过的异常时,编译器会提醒您处理异常。不幸的是,对于未检查的异常,这不起作用
我的问题是:
当选中
java.sql.SQLException
时,为什么谷歌要取消选中他们的android.database.SQLException
?我错过什么了吗?它们之间的差异是否比我想象的更大?我认为在许多情况下,未检查的异常比已检查的异常更重要。原因是你没有被强迫以任何方式抓住它。如果您认为有必要,可以使用try-catch
子句包围代码,但不必这样做。这有效地使您的代码更好,因为程序员可以决定做什么
在您的示例中,没有特定的原因为什么必须选中或不选中它。这是一个设计问题,我认为谷歌在android.database.SQLException方面做得更好。我认为这样做的原因是: android.database.SQLException:表示SQL解析或执行出错的异常 及 java.sql.SQLException:提供数据库访问错误或其他错误信息的异常 因此,很明显,
android.database.SQLException
很可能是RuntimeException
,因为它发生在SQL解析或执行出错时。
然而,
java.sql.SQLException
是由于数据库访问错误或其他此类错误导致的异常,因此它足够有效,可以将其保留为选中异常。无论何时使用打开的连接或任何类似的东西,最好将它们放在检查异常的保护伞下。android.database.SQLException
基于并且不需要检查,但是java.sql.SQLException
不是
关于这一点,有一个简单的解释。在检查或取消检查异常之间的选择总是有点主观:
- 如果异常指示错误或“可能无法恢复”的某个故障,则未经检查的异常是合适的
- 如果异常指示“可能可恢复”的故障,则检查异常是合适的
SQLException
的配合情况做出自己的判断
虽然我在某个地方读到过,检查过的异常是“退出”的 有很多开发人员希望所有Java异常都不被检查,这样他们就不必被迫处理它们。还有很多开发人员仍然认为Java在检查异常的情况下是正确的。。。尽管有一些案例(事后看来)做出了错误的选择 这是有争议的 我错过什么了吗?他们之间的差异比我想象的要大吗
不是真的。这两个异常层次结构的用途几乎相同。。。尽管javadoc类的描述有所不同。我理解为什么android的异常应该是RuntimeException,但是是什么让java的异常有所不同呢?我的意思是,在安卓系统中,当程序无法连接到数据库时,它也会被抛出,所以这不是和另一个一样“有效”吗?附言:如果我发布链接,你可以期望我已经看过了;)我知道java中检查异常和未检查异常在继承方面的基本区别,所以你的答案并不是我想要的。但是,您发布的链接包含一些有用的信息。谢谢。我知道我不能期望在这个问题上有一个完美的答案,因为这是关于某人做出的主观决定。但是你的回答包含了一些关于在检查异常和未检查异常之间进行选择的要点,这是我还没有想到的,所以我接受它。谢谢;)