Java Exception和Error的差别
2017-06-17 17:16
274 查看
Java中异常的抽象类是Throwable,在此基础上。派生出两大类:Error和Exception。
Error是程序中的严重错误,不应该用try…catch包括。Javadoc的说明例如以下:
An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions.
常见的Error有:AssertionError、OutOfMemoryError、StackOverflowError。
Exception分两类:Checked Exception和Unchecked Exception。
Unchecked Exception的基类是RuntimeException。全部继承自RuntimeException的Exception都属于Unchecked Exception, 如:NullPointerException、ArrayIndexOutOfBoundsException。
Checked Exception直接继承自Exception,全部不继承RuntimeException的Exception都属于Checked Exception,如:FileNotFoundException。
Checked Exception和Unchecked Exception都能够用try…catch包括。当中,Checked Exception在编译时检查是否有想要的catch处理,因此必要有try…catch包括,或者方法签名处抛出相应的异常。而Unchecked Exception在运行时推断,所以不一定要try…catch包括。并且,Unchecked Exception往往是程序本身存在bug,一般不catch这种错误。
备注1:
在try中运行return语句,依旧会运行finally语句块。除非在try语句中结束JVM进程(system.exit(0))
备注2:
不要在finally语句块调用return。否则的话。在try语句块中抛出的异常无法被调用者捕获,例如以下:
备注3:
throw与throws的差别:
throw是在语句块。程序猿主动抛出一个异常。
throws是在方法的签名处,说明该方法可能抛出的异常。当有多个异常抛出时,用逗号分隔。
备注4:
从JDK7開始,同一个try相应的多个catch能够写在一起。
Error是程序中的严重错误,不应该用try…catch包括。Javadoc的说明例如以下:
An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions.
常见的Error有:AssertionError、OutOfMemoryError、StackOverflowError。
Exception分两类:Checked Exception和Unchecked Exception。
Unchecked Exception的基类是RuntimeException。全部继承自RuntimeException的Exception都属于Unchecked Exception, 如:NullPointerException、ArrayIndexOutOfBoundsException。
Checked Exception直接继承自Exception,全部不继承RuntimeException的Exception都属于Checked Exception,如:FileNotFoundException。
Checked Exception和Unchecked Exception都能够用try…catch包括。当中,Checked Exception在编译时检查是否有想要的catch处理,因此必要有try…catch包括,或者方法签名处抛出相应的异常。而Unchecked Exception在运行时推断,所以不一定要try…catch包括。并且,Unchecked Exception往往是程序本身存在bug,一般不catch这种错误。
备注1:
在try中运行return语句,依旧会运行finally语句块。除非在try语句中结束JVM进程(system.exit(0))
public class Hello{ public static void main(String[] args){ try{ System.out.println("in try"); return; }catch(Exception e){ }finally{ System.out.println("finally"); } System.out.println("end"); } } //输出 in try finally
备注2:
不要在finally语句块调用return。否则的话。在try语句块中抛出的异常无法被调用者捕获,例如以下:
try { doSomething(); System.out.println("No Exception Caught!"); } catch (RuntimeException e) { System.out.println("got it."); } } public static void doSomething() { try { throw new RuntimeException(); } finally { return; } } //输出 No Exception Caught!
备注3:
throw与throws的差别:
throw是在语句块。程序猿主动抛出一个异常。
throws是在方法的签名处,说明该方法可能抛出的异常。当有多个异常抛出时,用逗号分隔。
备注4:
从JDK7開始,同一个try相应的多个catch能够写在一起。
相关文章推荐
- JAVA Exception 和 Error 的理解
- The error code of the InvalidJadException
- win7下安装rose2003报错:Error 1904. rose.exe failed to register
- java.lang.IncompatibleClassChangeError:
- ERROR 1018 (HY000): Can't read dir of './dbname/' (errno: 13)
- DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016错误解决方法
- CRITICAL:yum.cli:Config Error: Error accessing file for config file:///etc/yum.conf
- syntax error near unexpected token `then'问题的解决
- Zigbee 调试问题Error[e12]: Unable to open file 'lnk51ew_cc2530b.xcl'
- CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 9.2'
- rsyslogd: error during parsing file /etc/rsyslog.conf, on or before line 55: warnings occured in fil
- QT找不到文件解决办法 error: C1083: Cannot open include file: 'cstddef'
- Uncaught Error: Call to undefined function lang() in framework/tpl/think_exception.tpl:82
- 【Python 学习笔记】文件写入时遇到 TypeError 报错
- : error: new types may not be defined in a return type
- Open CHM Error:"Cannot open the file:mk:@MSITStore----" on XP of EN version
- WP7备注(34)(UpdateSourceTrigger|ValidatesOnExceptions|NotifyOnValidationError)
- ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)错误解决方法
- opencv 中的错误error: ‘SurfFeatureDetector’ was not declared in this scope
- YumRepo Error: All mirror URLs are not using