我正在编写应用程序,我需要捕获所有现有的异常,包括已检查和未检查的异常。是否有可能在应用程序终止之前捕获未经检查的异常并将其写入文件中?
答案 0 :(得分:2)
Error
和Exception
都延伸Throwable
:
public static void main(String args[]) {
try {
new Test().test();
} catch (Throwable t) {
t.printStackTrace(System.err);
}
}
从@ u6f6o的观点来看 - 你应该只在main
中执行此操作,因为一些Throwable
s(例如OutOfMemoryError
)意味着你的JVM可能非常不稳定状态。
答案 1 :(得分:1)
您可以使用
Thread.setDefaultUncaughtExceptionHandler
见:http://www.tutorialspoint.com/java/lang/thread_setdefaultuncaughtexceptionhandler.htm 或http://www.javamex.com/tutorials/exceptions/exceptions_uncaught_handler.shtml
答案 2 :(得分:0)
在Java中捕获未经检查的异常可能比看起来更棘手,因为它们是运行时异常。但是,请记住,您不必捕获运行时/未检查的异常;仅检查异常。这是一种不好的做法,但实际上所有这些extend Throwable
和使用catch Throwable
都可能是一种方法。但是,您可能需要查看以下文档http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html
如果您想将它们写入Android中的文件,那么在catch块中,您必须获取异常消息并使用FileWriter API之一将该消息(String)写入文件。但请记住,catch bock应该捕获Throwable
类型的所有异常,即使这可能非常难看,因为这将涵盖Java中大多数未经检查的异常。
答案 3 :(得分:0)
使用Exception
类来捕获异常(此类是父类)并将其放入数据结构中以存储它们,然后将它们写入文件。
http://docs.oracle.com/javase/7/docs/api/index.html?java/lang/Exception.html
http://docs.oracle.com/javase/7/docs/api/index.html?java/io/OutputStreamWriter.html
答案 4 :(得分:0)
您可以在catch块中捕获未经检查的异常。
像
try {
int i = 9 / 0;
} catch (ArithmeticException d) {
d.printStackTrace();
}