论坛首页 Java企业应用论坛

异常的最终去向是哪里?

浏览 9821 次
精华帖 (0) :: 良好帖 (9) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-05-10   最后修改:2011-05-16

 

什么是异常:程序在运行过程中发生由于硬件设备问题、软件设计错误等导致的程序异常事件。异常本身是一个对象,产生异常就是产生了一个异常对象。异常都是从类Throwable派生出来。包括运行时异常和飞运行时异常。(这个多说无益,知道怎么处理就行)

 

如何产生的:是由系统自动实例化一个异常对象。那这里的系统指的就是JVM。当然、我们可以自己new一个异常对象将其抛出。

 

自定义异常:可以通过继承Exception或者其子类。

 

如何处理异常:通过try…catch…finally语句进行捕获异常。当然也可以不处理异常、通过关键字throws继续传递异常。注:没有try块、catch不能单独存在。Finally块永远都执行、除非你在catch块中退出系统(System.exit(0))try块中只有return并不能终止finally块的执行。RuntimeException的任何子类都无需再throws子句中声明。

 

异常传递:当我们不对产生的异常做任何处理、那么这个异常何去啊?它会向它的调用者传递这个异常。

 

方法调用栈:在程序中、没有说一个方法就像全部的东西的实现、而是充分的独立、一个方法处理一件事情、那么如果我有一个方法、需要使用另一个方法的处理结果、那么我没就在这个方法中调用另一个方法(如何调用?自己想)、这就是方法调用栈、通过这个“栈“,我们就知道它是什么特性了(后进先出)、

 

问:如果产生一个异常、不对进行任何处理、这个异常最终会抛向哪里?

解析:通过上面的提示、知道方法调用栈的存在、那么这个异常的产生肯定是在在方法调用栈的栈顶的那个方法、当然我们在看控制台抛出的是异常栈、如果我们不对其进行处理、那么它会继续向下抛(栈的特性)、一次都不对其处理、最后会抛到这个栈的栈底、就是程序的起始位置、那么一个java程序的入口地址是哪里呢?main方法、对、就是这、

 

问:那如果是J2EE应用呢?异常抛向哪里?前提也是不对其进行任何处理。

求解!

 

 

挺有意思的文章:http://www.iteye.com/topic/765287

透过JVM看Exception的本质:http://www.iteye.com/topic/857722

J2EE项目异常处理:http://www.iteye.com/topic/72170

译JVMS3 §2.10 Exceptionhttp://www.iteye.com/topic/1039883

异常处理艺术:http://zhxing.iteye.com/blog/374307

   发表时间:2011-05-10   最后修改:2011-05-10
如果依次搜索栈中各个方法的异常表,都没有找到合适的exception handler,那这个异常最终会导致线程退出。

JVMSpec 2 写道
The process continues until a catch clause (§2.16.2) is found that handles the thrown value. If no such clause can be found, the current thread exits
0 请登录后投票
   发表时间:2011-05-10  
IcyFenix 写道
如果依次搜索栈中各个方法的异常表,都没有找到合适的exception handler,那这个异常最终会导致线程退出。

JVMSpec 2 写道
The process continues until a catch clause (§2.16.2) is found that handles the thrown value. If no such clause can be found, the current thread exits

也就是说、搜索这个异常栈、直到起初调用者的线程被终止、
这是我以前面试的时候一个技术人员问一个说有两年工作经验的人的问题、我一直认为都是谁调的抛给谁、但是这个异常传递的终点一直不清楚、肯定不是控制台或者错误输出文件、因为这些都是输出异常信息的地方、
0 请登录后投票
   发表时间:2011-05-10  
java程序由JVM掌控,异常也不例外,JVM收到异常就会中断线程的执行
0 请登录后投票
   发表时间:2011-05-11  
gzyyygyf 写道
java程序由JVM掌控,异常也不例外,JVM收到异常就会中断线程的执行

就是说、当这个异常产生了、异常被抛到异常栈的底部调用者、如果这个调用者同样没有处理、拿着个异常会抛给JDK/JRE的JVM、JVM会终止这个异常线程的执行、是这么一个过程吧、
那这个异常会不会对Tomcat有影响呢?   小弟现在也糊涂了、天天都要上班、学校还一堆毕业的事情、毕业设计到现在还没着落呢、哎、  
0 请登录后投票
   发表时间:2011-05-11  
如果一个异常是致命的,不可恢复的。或者调用者去捕获它没有任何益处,使用unChecked异常。
如果一个异常是可以恢复的,可以被调用者正确处理的,使用checked异常。
在使用unChecked异常时,必须在在方法声明中详细的说明该方法可能会抛出的unChekced异常。由调用者自己去决定是否捕获unChecked异常
0 请登录后投票
   发表时间:2011-05-11  
这个论坛会员的头像,真有意思,不是美腿,就是美胸!!真受不了!
0 请登录后投票
   发表时间:2011-05-11  
cleverbing 写道
这个论坛会员的头像,真有意思,不是美腿,就是美胸!!真受不了!

说实话、你的头像更让人受不了   起始头像都是无所谓了、主要还是要有钻研的气氛、学习气氛浓厚才是目的、头像给不给里都是小事
0 请登录后投票
   发表时间:2011-05-11  
楼主喜欢错别字吗?
0 请登录后投票
   发表时间:2011-05-11  
zhangyou1010 写道
楼主喜欢错别字吗?

错别字这个问题、我没法解决啊、我用SOUGUO输入法、能理解就行呗、谁敢保证自己打字没错别字啊
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics