2 sixping sixping 于 2016.04.03 16:35 提问

按书上写了一段java捕获异常的代码,不知道问题出在哪里

源代码如下:
package com.Sixping.Ncre;

public class Rethrow {
public static void rt() throws Exception {//定义方法,抛出Exception类的异常
System.out.println("old exception in rt()");
throw new Exception("thrown from rt()");
}
public static void wq() throws Throwable {//定义方法,调用rt(),捕获rt()抛出的异常
try {
rt();
} catch (Exception e) {
System.out.println("Inside wq(),e.printStackTrace():");
e.printStackTrace(); //输出堆栈使用情况
throw e; //重新抛出异常
}
}
public static void main(String[] args) throws Throwable {
try {
wq(); //产生被重新抛出的对象
} catch (Exception e) {
System.out.println("Caught in main,e.printStackTrace():");
e.printStackTrace(); //再次输出堆栈信息
}
}
}

运行报错如下:
old exception in rt()

java.lang.Exception: thrown from rt()
at com.Sixping.Ncre.Rethrow.rt(Rethrow.java:6)
at com.Sixping.Ncre.Rethrow.wq(Rethrow.java:10)
at com.Sixping.Ncre.Rethrow.main(Rethrow.java:19)
java.lang.Exception: thrown from rt()
at com.Sixping.Ncre.Rethrow.rt(Rethrow.java:6)
at com.Sixping.Ncre.Rethrow.wq(Rethrow.java:10)
at com.Sixping.Ncre.Rethrow.main(Rethrow.java:19)
Inside wq(),e.printStackTrace():
Caught in main,e.printStackTrace():

求大神解答

3个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.04.03 18:16
已采纳

没有错误啊,你不就是测试异常抛出嘛,流程是这样的;
首先,rt()方法抛出了异常,然后你在wq()方法中捕获并上抛出,直至main方法中捕获的是Exception,但是wq抛出的Throwable异常没有处理,所以被main方法继续抛出给虚拟机了。
代码运行是正确的,这不是运行时报错,而是你就是测试的throw e,抛出异常后你在捕获分支中使用的是e.printStack打印堆栈信息了。这个流程是对的,你可以注释调用e.printStackTrace(); 就能发现不会打印堆栈日志了。

CSDNXIAOD
CSDNXIAOD   2016.04.03 16:42

关于Java异常一段很有意思的代码
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

ljheee
ljheee   Rxr 2016.04.04 21:38

代码没有什么语法、逻辑错误。
rt()方法抛出了异常,在wq()方法中捕获并继续抛出,抛给main方法,main方法继续抛给虚拟机,虚拟机能做的就是终止程序。
这些行堆栈日志 信息由e.printStackTrace(); 打印输出

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
判断电脑不能上网问题出在哪里
判断电脑不能上网问题出在哪里 判断电脑不能上网问题出在哪里 判断电脑不能上网问题出在哪里判断电脑不能上网问题出在哪里
基于COCOS2DX的推箱子 源代码
cocos2dx 推箱子 源代码 apk 的运行效果和 exe 有区别 不知道问题出在哪里
TCP服务器(socket)
服务器以及客户端程序,不知道为什么连接不上~求助~请大家帮忙看一下问题出在了哪里,谢谢~
struts2 jasper iReport 报表
按书上写了一小JAVABEAN的报表,
请问:问题出在哪里???
<br />#include <stdio.h> <br />#include <stdlib.h> <br />#include <string.h> <br />#include <conio.h> <br />struct record <br />{ <br />char id[10]; <br />char name[20]; <br />char phone[20]; <br />char adress[40]; <br />char postcode[10]; <br />char e_mai
创意作品,BUT问题出在哪里了?????????
#include using namespace std; int main() {     double sum;     cout     cin >>sum ;     if (sum=1)         cout     else         if (sum=2)         cout     else         if (sum=3)  
到底问题出在哪里???
今天她来我家玩,她是我的女友,她在中山我在广州。她坐得是学校得包车。在前几天,我们吵得很凶,几乎到了不理对方的地步了。过了1天后,她说来我家玩,我说好,就这样我们又和好了。当她说来我家时候我说,你坐车辛苦,我出去广州接你,也是为了之前跟她吵闹之后想好好爱护一下她。她当时没有说不用,我害怕她一个小女生,自己坐车不安全,而且她只来过我家一次,不知道她认不认识路来我家。      过2天之后,她跟我
log4net调试配置
这是我刚开始接触C#开发时总结的,开发最重要的就是测试,如果不知道问题出在哪里,你就根本想不到解决的方案,对症下药才能药到病除。
严蔚敏数据结构书上的全部代码实现
严蔚敏数据结构书上的全部代码实现,帮助大家学习,非常实用,欢迎下载!!!!
C++ 捕获异常
throw 要写在try 中 ,throw 出的异常,由catch 接住,然后做相应的处理 C++异常机制使用了三个新的关键字  try    ──标识可能出现的异常代码段 throw  ──抛出一个异常 catch  ──标识处理异常的代码段   提示:  使用异常处理将