- 浏览: 56965 次
- 性别:
- 来自: 哈尔滨
文章分类
最新评论
-
alabowa:
一旦设置了表单的enctype="multipart ...
Struts2之实现文件上传与下载 -
泛泛evil:
总结的非常好啊.....
html中的tr和td -
fengchufu:
学习了。。。
Oracle数据库的连接(OCI方式、thin方式和JdbcOdbc桥方式) -
Vicent_Lee:
<div class="quote_title ...
异常的最终去向是哪里? -
Vicent_Lee:
<div class="quote_title ...
异常的最终去向是哪里?
什么是异常:程序在运行过程中发生由于硬件设备问题、软件设计错误等导致的程序异常事件。异常本身是一个对象,产生异常就是产生了一个异常对象。异常都是从类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 818三者在执行速度方面的比较:StringBuilder > ... -
支持国际化转码
2011-05-09 09:35 1890jar cvf fileName1 file ... -
iText创建PDF文件
2011-05-03 10:35 904iText创建PDF文件:http://cpdw.ite ... -
关于java.lang.String类的split()方法
2011-05-03 10:32 1090刚才看到这样一篇帖子:http://cpdw.iteye.co ... -
字符串拼接
2011-04-29 16:22 827String sum ="" ; for ... -
各种语言注释详解
2011-04-29 16:02 1033java 行注释://这里是注释 块注释:/*这里是注释* ... -
java反射应用实例及讲解
2011-04-18 16:16 735Java提供了一套机制来动态执行方法和构造方法,以 ... -
jvm的分区管理
2011-01-03 09:26 1974采用分区管理机制的JVM将JVM所管理的所有内存资源分为2个大 ...
相关推荐
- 在登记表中记录最终去向,有助于追踪废物处理的全过程,防止非法处理。 5. **备注**: - 这一栏用于记录任何特殊情况,比如废物超量、特殊处理需求或异常事件,确保所有相关信息都被记录下来。 医疗废物的管理...
表格中的“最终去向”一栏用于记录废物的处理情况,如焚烧、填埋或其他安全处理方式。 6. **监督与签名**:在交接过程中,除了收集和接收人员的签名外,还需要监督人的签名,以确保整个流程的透明度和合规性,防止...
IQC进行形态和包装检查,判定去向并取样分析;仓管员最终确认入库,监督卸货过程。 - **废物入库**:仓管员填写物料卡、标签、手工台账等,物控员在系统中办理入库,记录管理需按规范化要求存档。 5. **相关文件**...
- 客户订单号码:关联到具体的销售订单,便于了解产品的最终去向和需求。 - 检验日期:记录检验的具体时间,确保信息的时效性。 - 品名与规格:描述产品的具体类型和尺寸,确保检验符合产品特性。 - 订单数量与...
6. 错误处理需求:定义系统在面对错误或异常情况时的响应方式,以保证系统能够正确处理异常,防止数据丢失或系统崩溃。 在进行需求分析时,通常会采用以下方法: - 访谈:通过与用户进行正式或非正式的交谈,了解...
15. **题目内容**:“查询”菜单下的“查询去向”命令指定了查询结果的输出去向,输出去向不包括? - A. 报表 - B. 标签 - C. 文本文件 - D. 图形 **正确答案**:C **解析**: - 查询结果可以输出到报表、...
11. 氧的最终去向:人体吸收的氧气主要用于氧化分解有机物,释放能量,因此C选项正确。 12. 血液成分分析:根据表格数据,1是尿液,因为其中蛋白质和葡萄糖含量为0,尿素含量高。 13. 视觉形成过程:光线依次经过...
21. 人体吸收的氧最终去向:人体吸收的氧主要用于氧化分解有机物,释放能量供生命活动使用。 以上是对试题内容涉及知识点的详细解析,涵盖了生物课程中的基础营养、消化系统、呼吸系统、新陈代谢等多个方面。
《成品检验汇总表》是质量管理中的重要工具,主要用于记录和分析产品的最终检查结果,确保出厂产品的质量符合标准。这份文档通常包含多个关键组成部分,旨在提供一个全面、系统的方式来跟踪和控制生产过程中的品质...
3. **票据号码**:对于涉及支票或电子转账等非现金支付方式的交易,票据号码是确认交易的重要依据,能帮助财务部门跟踪资金的去向。 4. **摘要**:摘要部分简明扼要地描述了交易的内容,例如“销售收入”、“采购...
4. C++源程序文件的默认扩展名为`.cpp`,编译后生成的目标文件扩展名为`.obj`,最终链接生成可执行文件的扩展名通常是`.exe`。 5. 对于面向对象编程,类C中的实例方法是可以被子类覆盖的,这是多态性的体现。选项A...
14. 氧气的最终去向:氧气最终在细胞内参与氧化分解有机物,释放能量(题目中的第十五题)。 15. 呼吸运动:图中甲表示吸气,膈肌收缩;乙表示呼气,膈肌舒张(题目中的第十六题)。 16. 呼吸系统健康:森林公园内...
这包括污泥的总量、含水率、处理方式和最终去向等信息。准确的污泥处理记录对于控制污泥产量、合理处理和运输污泥至关重要,同时能够有效预防二次污染,保证环境的安全和卫生。 化验室水质检测记录对污水处理厂同样...
每个工序都有其特定的任务和目标,确保产品从原材料转化为最终成品。而“上道工序名称”和“下道工序名称”则明确了工序之间的逻辑关系,前一工序的产出是后一工序的输入,形成有序的生产流程。 “要求完工时间”是...
- **作业流程**:车辆根据货物去向解体、集结、编组,最终形成新列车待发,整个过程需控制在一定时间内,以保持高效运转。 #### 知识点八:限制条件与目标指标 - **重量与长度限制**:每辆重车不超过80T,列车总...
1. **物料管理**:物料管理是企业运营的核心部分,包括采购、存储、发放和跟踪原材料,以及中间产品和最终产品的过程。有效的物料管理能提高生产效率,减少浪费,降低库存成本。 2. **生产状况记录**:生产用料记录...
首先,报表的日期部分是记录每日提交情况的基础,年、月、日的填写有助于追踪和分析物料流动的时间序列数据,从而发现规律或异常,及时调整采购策略。例如,通过分析历史数据,可以预测未来的物料需求高峰期,提前...
此外,对于学生旷课出走等异常情况,班主任需立即进行家访,以掌握学生的去向和安全状况。学校的领导和教师实行值日制度,对学校的日常安全状况进行记录和监控,确保能够及时发现和处理安全隐患。 在具体的学科教学...