【发布时间】:2010-12-02 09:18:10
【问题描述】:
你在什么情况下使用它们?
【问题讨论】:
你在什么情况下使用它们?
【问题讨论】:
通常assert() 在发布代码中不起作用,因此它永远无法替代try-catch 策略。不过我喜欢在抛出异常的地方使用assert()。对我(作为开发人员!)来说,通过assert() 消息到达故障线通常比通过异常堆栈更方便。
【讨论】:
尝试... catch - 用于异常情况,即不是由格式错误的代码引起的情况,但可能会因外部不可预知的事件而改变正常的控制流。
捕获无效代码的断言,即检查函数中是否包含不变量,检查是否使用正确的参数调用了内部方法(对于公共 API,您可能仍需要例外)等。
这些是我的基本准则,但惯例因情况而异,因语言而异。
当您有疑问时,您可以问自己:在我们测试并完成所有内容之后,特定的安全检查是否应该仍然存在于发布代码中?如果你回答“是的,那么它仍然是必要的”,你可能想要一个例外。否则,您可能需要一个断言。
【讨论】:
它们是为不同的目的而创建的。 Assert 更多用于查找错误,try-catch 用于处理异常情况。
【讨论】:
try-catch 和 assert 的情况完全不同。 Assert 用于检查您收到的值(例如参数)是否是预期的。我不建议在生产代码中使用 assert,它主要用于单元测试,很少用于检查参数。 要更好地检查传递的值,请使用以下内容:
public void test(int i) {
if (i < 0) {
throw new IllegalArgumentException("i cannot be less than 0");
}
...
}
当您知道块内的某些内容可能出错时,使用 Try-catch 块。例如,您写入 sdcard 并且没有写入空间。或者,碰巧您尝试读取超出范围的数组。然后,将关键代码放入 try-catch 块并检查异常:
try {
InputStream is = new FileInputStream("filename.txt");
...
} catch FileNotFoundExcpetion {
System.out.println("file not found");
} finally {
...
}
More 关于异常和 try-catch 块。
【讨论】: