首先,我们看jdk对Throwable类的介绍:java.lang.Throwable类是java中的所有错误和异常的超类,只有这个类或者这个类的子类才能够被jvm或者java的throw或throws子句所抛出,同时也只有该类或者他的一个子类才能作为catch子句的参数。 
也就是说能够被throw(在方法中使用)和throws(在方法定义时使用)子句抛出以及被catch子句接住的玩意都是Throwable类或者其子类。 
按照Throwable的分支,我们可以将java程序会出现的一些消极的问题分为错误和异常,分别是Error类和Exception类,具体的一些错误和异常都是这两个类的子类,其中Error表示系统级别的一些错误,通常来说是jvm发生了错误,当然这些错误可能是由应用程序本身的一些问题所引起的,典型常见的Error就是OutOfMemoryError, StackOverflowError,是JVM的错误,但是却是由于应用本身不够严谨的编码引起。而Exception表示应用程序本身的一些异常,是由于程序编写过程中,由于逻辑不严密等等程序员自身问题所造成的异常。 
而Exception又可以分成两条线,分别是编译期异常和运行期异常,运行期异常就是RuntimeException以及其子类,而编译期异常则是Exception类以及其子类中的非RuntimeException及其子类。编译期异常和运行期异常之间的直接区别就是,编译期异常通常都是一些可以预见的异常,是编译期间能够检测的异常,比如ClassNotFoundException,编译器要求程序员必须对这种异常发生的情况进行处理。所以在程序编译期间,会强制程序员对编译期异常进行处理(catch或者throw),而对于运行期异常(典型的就是NullPointerException),因为这种异常在编译期无法检测,所以在编译期间不会强制对这种异常进行处理,而这种异常会在程序运行期间抛出,一旦jvm抛出了这种异常,会引起程序的异常中断。 
而Error与RuntimeException类似,是运行期错误,是无法检测的,一旦发生会引起程序异常中断。 
对于Error与RuntimeException可以通过catch子句进行捕获。

说了这么多,如果还不明白的话就上代码了。

package expert.in.java.lang;public class ThrowableDemo {public static void main(String[] args){ThrowableDemo et = new ThrowableDemo();//第一节//对于抛出的编译期异常,调用者被强制处理,否则无法通过编译try {et.throwAExction();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//第二节//对于抛出的运行期错误和运行期异常,调用者可以什么都不用做,会留下//潜在的隐患,因此方法定义时throws子句抛出Error以及RuntimeException没有任何//作用,而方法中的throw子句抛出的运行期错误和异常如果不做捕获处理,会导致//程序异常中断et.throwAError();et.throwARuntimeException();//第三节//对于可能出现的运行期错误或异常,可以通过catch子句进行捕获,捕获后//可以处理错误,来防止程序出现异常中断,如果目的是抛出让调用者来处理,如果//抛出Error或RuntimeException//那么没有任何作用,由于编译期不会强制对运行期错误或异常进行处理,因此//下面两个方法的中的处理方式毫无意义,并且会留下隐患,导致程序不够健壮//不属于正确的处理方式,描述和上面两个方法相同et.catchError();et.catchRuntimeException();//第四节//如果捕获了运行期错误和异常,想让调用者来处理,可以将运行期错误和异常包装//成为编译期异常抛出,这样程序就会在编译期强制调用者进行异常处理,避免程序//由于运行期错误和异常而中断,因此而留下潜在的隐患try {et.catchRuntimeThrowable();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 抛出编译期异常* @throws Exception*/public void throwAExction() throws Exception{throw new Exception();}/*** 抛出运行期错误* @throws Error*/public void throwAError() throws Error{throw new Error();}/*** 抛出运行期异常* @throws RuntimeException*/public void throwARuntimeException() throws RuntimeException{throw new RuntimeException();}/*** 捕获Error并且抛出* @throws Error*/public void catchError() throws Error{try{throwAError();}catch(Error e){//处理错误e或者将错误抛出throw e;}}/*** 捕获RuntimeException并抛出* @throws RuntimeException*/public void catchRuntimeException() throws RuntimeException{try{throwARuntimeException();}catch(RuntimeException e){//处理错误e或者将错误抛出throw e;}}/*** 捕获运行期异常,包装成为编译期异常抛出,让调用者处理* @throws Exception*/public void catchRuntimeThrowable() throws Exception{try{throwAError();throwARuntimeException();}catch(Error e){throw new Exception(e);}catch(RuntimeException e){throw new Exception(e);}}
}

关于对ava.lang.Throwable的理解(转载)相关推荐

  1. java.lang.Throwable: Substituted for the exception com.bea.xml.SchemaTypeLoaderException which lack

    weblogic报错信息: <Error> <Console> <AdminServer> <[ACTIVE] ExecuteThread: '4' for ...

  2. android开发 WebViewjava.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebVie

    项目中用到java和js交互,js调用java方法,让webView刷新网页,异常信息如下: java.lang.Throwable: A WebView method was called on t ...

  3. java throwable判断,判断(2分) Java语言中的所有异常类都是java.lang.Throwable的子类。...

    判断(2分) Java语言中的所有异常类都是java.lang.Throwable的子类. 更多相关问题 This artical is probably ________. 某企业2010年12月3 ...

  4. java.lang.NoSuchMethodError: No virtual method log(ILjava/lang/String;Ljava/lang/Throwable;)解决方法

    报错如下: 原因: 包冲突,版本不一致 implementation 'com.squareup.okhttp3:okhttp:4.9.0' implementation 'com.squareup. ...

  5. 对Lucene PhraseQuery的slop的理解[转载]

    所谓PhraseQuery,就是通过短语来检索,比如我想查"big car"这个短语,那么如果待匹配的document的指定项里包含了"big car"这个短语 ...

  6. 卷积神经网络VGG16权重数量的计算和理解(转载)

    VGG16网络结构是: _________________________________________________________________ Layer (type)           ...

  7. 对于超平面的理解[转载]

    转自:https://blog.csdn.net/dengheCSDN/article/details/77313758 1.引言 n 维空间中的超平面由下面的方程确定: 其中,w 和 x 都是 n ...

  8. WS_CLIPCHILDREN和WS_CLIPSIBLINGS的理解(转载)

    1.1 WS_CLIPCHILDREN WS_CLIPCHILDREN样式从字面上可以理解成ClipChildren,裁减子窗口. MSDN里的E文解释:Excludes the area occup ...

  9. 关于v$process与v$session中process的理解(转载)

    http://www.itpub.net/thread-1077321-1-1.html(出处) 关于v$process与v$session中process的理解 说明 v$session有个proc ...

最新文章

  1. 通过define _CRTDBG_MAP_ALLOC宏来检测windows上的code是否有内存泄露
  2. 机器学习模型 知乎_机器学习中有哪些模型?
  3. BUUCTF(pwn)ciscn_2019_ne_5
  4. 【机器学习基础】机器学习模型评估教程!
  5. IDEA简单配置教程
  6. Eclipse 控制console
  7. python入门基础系列八_Python 入门系列 —— 21. dict 的介绍
  8. mysqldb mysql config,安装mysqldb python界面时找不到mysql_config
  9. jsp在mysql中删除数据_如何在jsp页面中删除数据库中的数据
  10. LaTeX中常用表格制作方法总结
  11. 从源码角度理解 FragmentTransaction实现
  12. 字符串过滤html代码
  13. JAVA程序设计 实验一报告
  14. 简洁商业计划书PPT模板
  15. mac版docker配置加速
  16. Word题库转成Excel题库的方法
  17. 互联网经济催生了一些新职业,带来新机遇!
  18. 功率因数 matlab,基于Matlab的功率因数校正电路的仿真分析
  19. 关于git代码管理的详细操作流程
  20. wuauclt.exe进程和wuauclt病毒的查杀清理方法

热门文章

  1. 文本情感分析综述[哈工大2010]笔记
  2. 国内外有名的居民与商务服务调查研究咨询公司
  3. js中日期转字符串,字符串转日期,日期的用法
  4. UG二次开发,CAM函数
  5. 终于拿下淘宝了。淘宝抓取,淘宝爬虫。taobao spider
  6. Rockey 4加密狗介绍
  7. 毕业学java_大学毕业我该何去何从,想学Java,但?
  8. (三)测试工具-3 adb安装卸载apk+清除数据
  9. Java模板引擎解析原理_关于前后端分离与模板引擎
  10. 使用deepstream对自己模型进行加速推理以及与ROS通信