- 浏览: 55442 次
- 性别:
- 来自: 哈尔滨
文章分类
最新评论
-
alabowa:
一旦设置了表单的enctype="multipart ...
Struts2之实现文件上传与下载 -
泛泛evil:
总结的非常好啊.....
html中的tr和td -
fengchufu:
学习了。。。
Oracle数据库的连接(OCI方式、thin方式和JdbcOdbc桥方式) -
Vicent_Lee:
RednaxelaFX 写道Vicent_Lee 写道Redn ...
异常的最终去向是哪里? -
Vicent_Lee:
RednaxelaFX 写道Vicent_Lee 写道Redn ...
异常的最终去向是哪里?
什么是异常:程序在运行过程中发生由于硬件设备问题、软件设计错误等导致的程序异常事件。异常本身是一个对象,产生异常就是产生了一个异常对象。异常都是从类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 Exception:http://www.iteye.com/topic/1039883
异常处理艺术:http://zhxing.iteye.com/blog/374307
评论
把代码改成start()试试。
正准备吐槽的时候发现已经被吐了…槽点啊槽点
为什么不指点指点而非要吐槽呢
因为昨晚忙…本来想写一帖的,诶等有空吧。
有兴趣的话可以看看Thread.UncaughtExceptionHandler和ThreadGroup.uncaughtException相关。这算是指点么?
又木有关于这方面的书籍给推荐一本?
把代码改成start()试试。
正准备吐槽的时候发现已经被吐了…槽点啊槽点
为什么不指点指点而非要吐槽呢
因为昨晚忙…本来想写一帖的,诶等有空吧。
有兴趣的话可以看看Thread.UncaughtExceptionHandler和ThreadGroup.uncaughtException相关。这算是指点么?
给点路子总比什么都没有强啊、我这是个初学者、什么都不会呢、需要各路神仙指点啊、
异常和调试子系统+系统中断密切关联。
JVM只是调用调试子系统已而。。。。
请教一下楼上的大大,Java的异常跟调试子系统的关系是什么?调试子系统指的是什么,是JDPA说的调试系统吗?还是GDB、WinDBG那样?
科普小说,看一下吧。
http://baike.baidu.com/view/272933.htm
http://baike.baidu.com/view/272933.htm
异常和调试子系统+系统中断密切关联。
JVM只是调用调试子系统已而。。。。
请教一下楼上的大大,Java的异常跟调试子系统的关系是什么?调试子系统指的是什么,是JDPA说的调试系统吗?还是GDB、WinDBG那样?
异常和调试子系统+系统中断密切关联。
JVM只是调用调试子系统已而。。。。
<div class="quote_div">
<div class="quote_title">Vicent_Lee 写道</div>
<div class="quote_div">
<div class="quote_title">sonic710 写道</div>
<div class="quote_div">
<pre name="code" class="java"> public static void main(String[] args)
{
for (int i = 0; i < 3; i++)
{
final Thread a = new Thread(new Runnable()
{
public void run()
{
throw new UnsupportedOperationException("Not supported yet.");
}
});
Thread b = new Thread(new Runnable()
{
public void run()
{
a.run();
}
});
b.run();
try
{
Thread.sleep(5000);
}
catch (InterruptedException ex)
{
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}</pre>
<p> 测试了一下,确实中止在main线程</p>
</div>
<p> </p>
<p>恩、我测试了一下、控制台抛出:</p>
<p> </p>
<pre name="code" class="java">Exception in thread "main" java.lang.UnsupportedOperationException: Not supported yet.
at com.xiejie.ExceptionTest2$1.run(ExceptionTest2.java:17)
at java.lang.Thread.run(Unknown Source)
at com.xiejie.ExceptionTest2$2.run(ExceptionTest2.java:22)
at java.lang.Thread.run(Unknown Source)
at com.xiejie.ExceptionTest2.main(ExceptionTest2.java:25)</pre>
<p> 按照我的理解是从这个异常栈的上面往下找、到这<span style="white-space: pre;">at java.lang.Thread.run(Unknown Source)</span>是说的异常抛给了:Thread.run()</p>
<p>那下一步该到JVM终止了、但是这个异常栈的最底部却又回到了<span style="white-space: pre;">at com.xiejie.ExceptionTest2.main(ExceptionTest2.java:25)这个地方就是b.run();这条语句</span></p>
<p>但是终归还是main方法、</p>
</div>
<p> </p>
<p><span style="color: #ff0000;">启动一个线程是 Thread.start() 不是Thread.run() </span></p>
<p> </p>
<p>把代码改成strat()试试。</p>
<p> </p>
<p> </p>
</div>
<p><br>啊哦,低级失误</p>
把代码改成start()试试。
正准备吐槽的时候发现已经被吐了…槽点啊槽点
为什么不指点指点而非要吐槽呢
因为昨晚忙…本来想写一帖的,诶等有空吧。
有兴趣的话可以看看Thread.UncaughtExceptionHandler和ThreadGroup.uncaughtException相关。这算是指点么?
把代码改成start()试试。
正准备吐槽的时候发现已经被吐了…槽点啊槽点
为什么不指点指点而非要吐槽呢
就是说、当这个异常产生了、异常被抛到异常栈的底部调用者、如果这个调用者同样没有处理、拿着个异常会抛给JDK/JRE的JVM、JVM会终止这个异常线程的执行、是这么一个过程吧、
那这个异常会不会对Tomcat有影响呢? 小弟现在也糊涂了、天天都要上班、学校还一堆毕业的事情、毕业设计到现在还没着落呢、哎、
Tomcat对异常的处理主要由StandardHostValve和ErrorReportValve来处理,具体可以参考这篇文章:http://www.goldendoc.org/2011/02/tomcat_host/
Tomcat对异常的处理主要是根据JSR154来做的,里面有讲Servlet容器应该如何去处理传播到容器的异常。
把代码改成start()试试。
正准备吐槽的时候发现已经被吐了…槽点啊槽点
<div class="quote_div">
<div class="quote_title">sonic710 写道</div>
<div class="quote_div">
<pre name="code" class="java"> public static void main(String[] args)
{
for (int i = 0; i < 3; i++)
{
final Thread a = new Thread(new Runnable()
{
public void run()
{
throw new UnsupportedOperationException("Not supported yet.");
}
});
Thread b = new Thread(new Runnable()
{
public void run()
{
a.run();
}
});
b.run();
try
{
Thread.sleep(5000);
}
catch (InterruptedException ex)
{
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}</pre>
<p> 测试了一下,确实中止在main线程</p>
</div>
<p> </p>
<p>恩、我测试了一下、控制台抛出:</p>
<p> </p>
<pre name="code" class="java">Exception in thread "main" java.lang.UnsupportedOperationException: Not supported yet.
at com.xiejie.ExceptionTest2$1.run(ExceptionTest2.java:17)
at java.lang.Thread.run(Unknown Source)
at com.xiejie.ExceptionTest2$2.run(ExceptionTest2.java:22)
at java.lang.Thread.run(Unknown Source)
at com.xiejie.ExceptionTest2.main(ExceptionTest2.java:25)</pre>
<p> 按照我的理解是从这个异常栈的上面往下找、到这<span style="white-space: pre;">at java.lang.Thread.run(Unknown Source)</span>是说的异常抛给了:Thread.run()</p>
<p>那下一步该到JVM终止了、但是这个异常栈的最底部却又回到了<span style="white-space: pre;">at com.xiejie.ExceptionTest2.main(ExceptionTest2.java:25)这个地方就是b.run();这条语句</span></p>
<p>但是终归还是main方法、</p>
</div>
<p> </p>
<p><span style="color: #ff0000;">启动一个线程是 Thread.start() 不是Thread.run() </span></p>
<p> </p>
<p>把代码改成strat()试试。</p>
<p> </p>
<p> </p>
<div class="quote_div">
<pre name="code" class="java"> public static void main(String[] args)
{
for (int i = 0; i < 3; i++)
{
final Thread a = new Thread(new Runnable()
{
public void run()
{
throw new UnsupportedOperationException("Not supported yet.");
}
});
Thread b = new Thread(new Runnable()
{
public void run()
{
a.start();
}
});
b.start();
try
{
Thread.sleep(5000);
}
catch (InterruptedException ex)
{
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}</pre>
<p> 测试了一下,确实中止在main线程</p>
</div>
<p> </p>
<p>恩、我测试了一下、控制台抛出:</p>
<p> </p>
<pre name="code" class="java">Exception in thread "Thread-0" java.lang.UnsupportedOperationException: Not supported yet.
at com.xiejie.ExceptionTest2$1.run(ExceptionTest2.java:17)
at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-2" java.lang.UnsupportedOperationException: Not supported yet.
at com.xiejie.ExceptionTest2$1.run(ExceptionTest2.java:17)
at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-4" java.lang.UnsupportedOperationException: Not supported yet.
at com.xiejie.ExceptionTest2$1.run(ExceptionTest2.java:17)
at java.lang.Thread.run(Unknown Source)</pre>
<p> 按照我的理解是从这个异常栈的上面往下找、到这<span style="white-space: pre;">at java.lang.Thread.run(Unknown Source)</span>是说的异常抛给了:Thread.run()</p>
<p>那下一步该到JVM终止了、</p>
发了篇和这个问题相关的帖子,LZ可以参考一下:http://www.iteye.com/topic/1039883
图片的确是很吸引人、我还有更吸引的、但是不能再这里放、这里是学习的地方、嘿嘿、你的那篇文章我看了、感觉挺深奥的、我再多学习学习就差不多能理解吸收了、先谢谢了啊
{
for (int i = 0; i < 3; i++)
{
final Thread a = new Thread(new Runnable()
{
public void run()
{
throw new NullPointerException();
}
});
Thread b = new Thread(new Runnable()
{
public void run()
{
a.start();
}
});
b.start();
try
{
Thread.sleep(5000);
}
catch (InterruptedException ex)
{
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}</pre>
<p> </p>
<p>测试结果</p>
<pre name="code" class="java">Exception in thread "Thread-0" java.lang.NullPointerException
at testexception.Main$1.run(Main.java:29)
at java.lang.Thread.run(Thread.java:619)
Exception in thread "Thread-2" java.lang.NullPointerException
at testexception.Main$1.run(Main.java:29)
at java.lang.Thread.run(Thread.java:619)
Exception in thread "Thread-4" java.lang.NullPointerException
at testexception.Main$1.run(Main.java:29)
at java.lang.Thread.run(Thread.java:619)</pre>
<p> </p>
<p> </p>
<div class="quote_div">
<p> </p>
<p class="MsoNormal"><span>问:如果产生一个异常、不对进行任何处理、这个异常最终会抛向哪里?</span></p>
<p class="MsoNormal"><span>解析:通过上面的提示、知道方法调用栈的存在、那么这个异常的产生肯定是在在方法调用栈的栈顶的那个方法、当然我们在看控制台抛出的是异常栈、如果我们不对其进行处理、那么它会继续向下抛(栈的特性)、一次都不对其处理、最后会抛到这个栈的栈底、就是程序的起始位置、那么一个</span><span lang="EN-US">java</span><span>程序的入口地址是哪里呢?</span><span lang="EN-US">main</span><span>方法、对、就是这、</span> </p>
</div>
<p> </p>
<p>绝对不是main方法。</p>
<p> </p>
<p>每个方法都在一个线程里运行, 在Java代码可以处理的范围内,最顶层的就是 Thread.run()方法了。</p>
<p> </p>
<p>至于Thread.run()方法抛出的异常,应该是JVM处理的范围了。一般我们可以观察到的结果就是如果Thread.run()方法抛出的异常(比如RuntimeException)</p>
<p> </p>
<p>JVM会把方法栈打印到System.out中。</p>
<p> </p>
<p> </p>
<div style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff; margin: 8px;">
<div class="quote_title" style="font-weight: bold; margin-top: 5px; margin-right: 0px; margin-bottom: 0px; margin-left: 15px; padding: 5px;">Vicent_Lee 写道</div>
<div class="quote_div" style="margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 15px; background-color: #fafafa; padding: 3px; border: 1px solid #cccccc;">
<p style="margin: 0px;"> </p>
<p class="MsoNormal" style="margin: 0px;"><span>问:那如果是</span><span lang="EN-US">J2EE</span><span>应用呢?异常抛向哪里?前提也是不对其进行任何处理。</span></p>
<p class="MsoNormal" style="margin: 0px;"><span>求解!</span></p>
<p class="MsoNormal" style="margin: 0px;"> </p>
</div>
</div>
<p>J2EE应用程序和Java应用程序本质上是一样的。</p>
<p> </p>
<p>不过,对于容器来说,每一个请求到来时,都会开始一个新线程或者从线程池中重用一个线程,容器会在Thread.run()方法中捕获所有异常进行处理的。</p>
<p> </p>
<p>想了解更详细的话,可以去读Tomcat源码。只是处理请求部分就可以了。</p>
<p> </p>
发了篇和这个问题相关的帖子,LZ可以参考一下:http://www.iteye.com/topic/1039883
错别字这个问题、我没法解决啊、我用SOUGUO输入法、能理解就行呗、谁敢保证自己打字没错别字啊
发表评论
-
String、StringBuffer与StringBuilder之间区别
2011-05-10 09:41 774三者在执行速度方面的比较:StringBuilder > ... -
支持国际化转码
2011-05-09 09:35 1850jar cvf fileName1 file ... -
iText创建PDF文件
2011-05-03 10:35 863iText创建PDF文件:http://cpdw.ite ... -
关于java.lang.String类的split()方法
2011-05-03 10:32 1038刚才看到这样一篇帖子:http://cpdw.iteye.co ... -
字符串拼接
2011-04-29 16:22 781String sum ="" ; for ... -
各种语言注释详解
2011-04-29 16:02 965java 行注释://这里是注释 块注释:/*这里是注释* ... -
java反射应用实例及讲解
2011-04-18 16:16 701Java提供了一套机制来动态执行方法和构造方法,以 ... -
jvm的分区管理
2011-01-03 09:26 1923采用分区管理机制的JVM将JVM所管理的所有内存资源分为2个大 ...
相关推荐
第三方支付企业实现高速成长 2021行业发展去向何方?.docx
赎金在哪里?看Ransomwhere如何摸清勒索赎金去向 安全开发 网络信息安全 安全实践 web安全 安全管理
银行行业周报:美债利率提升背景下,银行股去向何方?.pdf
宠物食品渠道系列二:医院及零售门店去向何方?-东北证券-191020_宠物行业研究报告.pdf
农林牧渔行业深度报告·宠物食品渠道系列二:医院及零售门店去向何方?-191020_宠物行业研究报告
学生就业去向管理,可以查询,添加,修改,删除等基本功能。
农林牧渔行业深度报告·宠物食品渠道系列二:医院及零售门店去向何方?-1020-东北证券-32页.pdf
农林牧渔行业深度报告·宠物食品渠道系列二:医院及零售门店去向何方?-20191020-东北证券-32页.pdf
当代大学生的毕业去向,呈现出多元化,主要集中在考研、就业和出国留学三个方面。本文运用层次分析法,建立大学生毕业去向的数学模型,不仅为即将毕业的学生提供一种选择自己去向的参考,也能使低年级学生的从中找到...
大学生毕业去向调查报告
HJ 523-2009 废水排放去向代码,本标准确定了废水排放去向的分类与代码。废水排放包括工业废水、生活废水、污水处理设施、以 及垃圾填埋厂、堆肥厂、焚烧厂、危险废物处置厂等设施的排水。本标准适用于废水排放信息...
Java基于大数据的毕业生去向系统源码.zip
基于ssh的毕业生去向信息管理系统毕业课程设计源码
它是一款公司用来记录员工去工去向和来回所用时间的小软件录入完工作内容后在输入end退出。数据保存在D盘的a.txt里。
去向哪里比与谁同行更重要.doc
及谁同行比去向哪里更重要.doc
金柚网:行思致远,智慧教育的来路与去向.pdf