据我所知,如果不逐一查找API文档,就无法找出方法抛出的异常。
由于这是不可取的,我想反转研究并询问您在处理时遇到的最常见的异常和运行时异常:
我意识到这可能是主观和无聊的,但这是一次课堂测试,我真的不知道更好。
答案 0 :(得分:38)
除非另有说明,否则假设以下是java.lang
:
您最好查看Java网站的Package Summary页面。这里有一个:http://java.sun.com/j2se/1.4.2/docs/api/java/io/package-summary.html
答案 1 :(得分:28)
未选中的例外列表
ArrayIndexOutOfBoundsException异常
ClassCastException异常
抛出:IllegalArgumentException
IllegalStateException异常
NullPointerException异常
NumberFormatException的
Asse田
的ExceptionInInitializerError
的StackOverflowError
NoClassDefFoundError
已检查的例外列表
异常
IOException异常
FileNotFoundException异常
ParseException的
ClassNotFoundException的
CloneNotSupportedException的
InstantiationException
InterruptedException的
NoSuchMethodException
NoSuchFieldException
答案 2 :(得分:23)
<强>的NullPointerException 强>
答案 3 :(得分:7)
java.lang:
java.util:
java.io:
答案 4 :(得分:3)
比尔K说。检查异常很容易。如果您的IDE /程序编辑器没有为您提供快速查看方法javadoc或签名的方法,则需要将其丢弃。严重。
未经检查的异常是一种不同的鱼。但我认为,未经检查的例外情况的最佳策略是不要试图抓住它们。相反,你编写代码,以避免抛出它们。例如;
// ... not sure if 'obj' is null
if (obj != null) {
obj.someMethod();
}
// ... not sure if 'obj' has the right type
if (obj instanceof Foo) {
Foo foo = (Foo) obj;
}
// ... not sure if 'i' is in range
if (i >= 0 && i < array.length) {
.... = array[i];
}
这就是为什么我推荐这个:
// obj might be null ... try { obj.doSomething(); } catch (NullPointerException ex) { System.err.println("obj was null"); // WRONG!!! // the NPE could have happen inside doSomething() }
显然,您只需要包含这些“警卫”检查,您对代码的理解会告诉您它们是必要的!所以,例如,如果你知道'obj'应该是非null并且'我'应该在范围内,那么最好不要检查。如果你遗漏了一个测试太多,你会得到一个异常...但这很好,因为你可以使用堆栈跟踪来弄清楚为什么你对代码的理解是错误的,并且可能修复底层错误。
答案 5 :(得分:3)
我想提供一个按情况分组的列表,这可能比按程序包或编程领域进行分组更有意义。
这些是理想情况下绝对不应在生产中抛出的异常。您应该修复它们,而不是抓住它们并st之以鼻。
一旦看到它们,它们就永远不会再发生。
@NotNull
在哪里?Map.get()
的返回值之前是否检查过?List.get()
之前检查过吗?array[array.length] = newElement
不太可能看到
synchronized
很烂,但是在大多数语言中都是这样然后您将获得更多的NullPointerException。
然后...还是NullPointerException? @NotNull
注释是垃圾!
由于比赛条件或极少的机率而发生的异常。如果您在运行代码的前10次看到彩票,就应该买彩票。
synchronized
在哪里它们通常在您弄乱依赖项,使用错误版本的库等时发生。
以及使用@lombok.SneakyThrows
或同等功能
如果他们没有被抓住,这可能意味着您也太懒了。你不能阻止他们扔;您只需要抓住它们即可。
这些异常的发生可能性很高,应始终进行专门处理(即,您应该实际处理它们,而不仅仅是输出错误)
这些异常有时是由于无效的用户输入而发生的(但是您应该对其进行真正的验证,所以我将它们归类为“意外异常”),并且有时是由于(非压力)测试时可能无法再现的系统约束而发生的
答案 6 :(得分:1)
检查异常很简单,编辑器应在悬停/完成方法名称时显示javadoc。
未经检查通常是实际错误,甚至在javadoc中也不常见。我猜最常见的可能是IllegalArgumentException,任何有可能无效参数组合的方法都应抛出它。
答案 7 :(得分:1)
如何查找java.lang.exception的子类,例如here
我个人使用自己的TransientException的2个已检查异常来处理重试可能有效的情况。和验证错误的InvalidRequestException。
答案 8 :(得分:1)
NumberFormatException的
答案 9 :(得分:0)
Casting - ClassCastException
数组 - ArrayIndexOutOfBoundsException
Vector,ArrayList,HashMap等 - 我在使用Java集合时很少看到异常,但偶尔会出现ConcurrentModificationException
IO(文件类,流,过滤器,...) - FileNotFoundException
对象序列化 - ClassNotFoundException
线程(wait(),sleep()等) - 根据我的经验,线程问题通常以随机方式表现出来,而不是异常特定的。必须处理InterruptedException会占用很多时间,尽管我没有看到实际抛出的异常。
或其他被认为是“基本Java”的东西 - 到目前为止,我体验中最常见的例外是NullPointerException。