面试问题004-Error和Exception的区别?

159 阅读1分钟

Error和Exception都是Throwable类的子类,都会在程序发生异常时抛出。

Error指的是在程序运行过程中,发生不可预期的错误而抛出的异常,通常不可通过代码修复,这类异常一般不应被捕获,同时也不会在throws子语句中抛出Error类型异常。常见的如OutOfMemoryError,StackOverflowError等。

Exception及其非RuntimeException类型的子类通常被称为已检异常,已检异常通常在方法体的声明或throws 子语句中抛出,编译期要求使用try catch语句进行捕获和处理,常见的如FileNotFoundException,IOException等。

RuntimeException及其子类是运行时异常,通常被称为未检异常,与Error异常含义类似,不建议被捕获,出现这类异常程序一般会停止,常见的有IllegalStatementException,NullPointerException等,可以看出,某种意义来讲,Error也应属于未检异常。

Error异常

最常见的Error异常就是OutOfMemoryError,StackOverflowError异常,当抛出这些类型异常时,应用进程会被系统杀死。一个典型的栈内存OutOfMemoryError异常日志如下所示:

mianshi003-1

Exception已检异常

最常见的已检异常场景就是文件读写流程中的操作,示例代码如下所示:

 FileOutputStream fileOutputStream = null;
 try {
     fileOutputStream = new FileOutputStream("Hello");
     fileOutputStream.write(100);
     fileOutputStream.flush();
     fileOutputStream.close();
 } catch (FileNotFoundException e) {
     e.printStackTrace();
 } catch (IOException e) {
     e.printStackTrace();
 }

Error和Exception相关类图

Error and Exception

总结

Error和Exception1