Topic: 异常处理时发现的一个小问题 (try-catch) |
Print this page |
1.异常处理时发现的一个小问题 (try-catch) | Copy to clipboard |
Posted by: babyone Posted on: 2004-09-11 16:22 望大侠们莱讨论一下? 菜讨论是啥玩意?:-| 原来不是菜,而是莱,来:$ 我在运行这个程序的时候,有一点让我百思不得其解: //============================================== // 程序名称:Zero.java // 程序目的:判断一个浮点数是否等于0 //============================================== import java.io.*; public class Zero { public static void main(String[] args) { float x; String sInput=new String(); System.out.println("请输入一个浮点数x="); InputStreamReader i=new InputStreamReader(System.in); BufferedReader b=new BufferedReader(i); try{ sInput = b.readLine(); }/*catch(IOException re)*/ catch(NumberFormatException e){ System.err.println(" 错误 "); } catch(IOException re){ System.err.println(" errors "); } x=Float.parseFloat(sInput); if (x==0f) System.out.println("浮点数x="+x+"等于0"); else System.out.println("浮点数x="+x+"不等于0"); } } 起先,我没有加入异常处理机制,编译器显示我出现一个IOException 异常,然后,我捕获了这个异常,可是,我自己原本的输出“错误”这两字根本没出现 ,编译器显示这样: java.lang.NumberFormatException: empty String at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:986) at java.lang.Float.parseFloat(Float.java:204) at Zero.main(Zero.java:28) Exception in thread "main" Interactive Session Ended 于是,我又把编译器显示的这个异常捕获了,但是,还是没反应,请问,大侠们,这到底是属于怎么一回事啊 ? |
2.Re:异常处理时发现的一个小问题,望大侠们莱讨论一下! [Re: babyone] | Copy to clipboard |
Posted by: 不懂不要乱说话 Posted on: 2004-09-11 18:02 楼上的NumberFormatException捕捉的不是地方,当你直接回车的时候在x=Float.parseFloat(sInput);会出现该异常……,所以异常要在此处捕捉…… java.lang.Object java.lang.Throwable java.lang.Exception java.lang.RuntimeException java.lang.IllegalArgumentException java.lang.NumberFormatException java.lang.Object java.lang.Throwable java.lang.Exception java.io.IOException NumberFormatException是一个Runtime Exception,而IOException是一个checked Exception;事实上,checked exception用来指示一种调用方能够直接处理的异常情况。而runtime exception则用来指示一种调用方本身无法处理或恢复的程序错误。也就是说我们捕捉checked exception对我们的程序有益,而对于runtime exception 我们一般是直接在控制台上打印出来,供找出错误。如果你要捕获它的话,你就会冒这样一个风险:程序代码的错误(bug)被掩盖在运行当中无法被察觉。 楼上就是一个很好的例子哦…… |
3.Re:异常处理时发现的一个小问题,望大侠们莱讨论一下! [Re: babyone] | Copy to clipboard |
Posted by: why Posted on: 2004-09-11 19:06 try{ sInput = b.readLine(); x=Float.parseFloat(sInput); // 不放在 try block 之内怎 catch? 好好读一读书吧 } catch(NumberFormatException e){ System.err.println(" 错误 "); } catch(IOException re){ System.err.println(" errors "); } |
4.Re:异常处理时发现的一个小问题,望大侠们莱讨论一下!(try-catch) [Re: babyone] | Copy to clipboard |
Posted by: babyone Posted on: 2004-09-11 20:24 照一楼大侠的说法,以我的程序为例,这个NumberFormatException 不用,也不该去捕获了 ? 另外一个问题,但是,我不捕获这个异常,则显示有个IOException,这样,捕获前,出现的异常属于checked Exception ,按道理说,需要捕获,但是,捕获后则出现了IOException异常,那我该怎么做呢 ? (另外谢谢二楼大侠的建议,程序是按我原先设想的那样,调试成功了 ! ) |
5.Re:异常处理时发现的一个小问题,望大侠们莱讨论一下!(try-catch) [Re: babyone] | Copy to clipboard |
Posted by: 不懂不要乱说话 Posted on: 2004-09-11 21:41 我的意思搂主没有读懂,之所以在x=Float.parseFloat(sInput);处出现异常,是因为sInput这个String变量为空,在调用Float.parseFloat(sInput)的时候就表现为:所给的参数并不能转化为一个浮点数,所以runtime抛出了一个NumberFormatException异常;而作为我们编写程序来说,这个runtime Exception是完全可以为我们自己控制的,即事先对这个String变量进行规范,比如说他是否为空……; 有时候出现runtime 异常是为了让程序员更好的对代码作出优化…… // 不放在 try block 之内怎 catch? 好好读一读书吧 why 也一针见血的指出了搂主代码的错误之处:搞清楚为什么会抛出NumberFormatException异常。 runtime类型的异常一旦发生就立即被抛出。 |
6.Re:异常处理时发现的一个小问题,望大侠们莱讨论一下!(try-catch) [Re: babyone] | Copy to clipboard |
Posted by: babyone Posted on: 2004-09-11 21:55 谢谢一楼大侠细心的解释,下面说的为什么会抛出NumbeFormatException这个异常我知道了 ,可是 ,我还是没弄懂我再上面提的问题 ,就是 =================================== 另外一个问题,但是,我不捕获这个异常,则显示有个IOException,这样,捕获前,出现的异常属于checked Exception ,按道理说,需要捕获,但是,捕获后则出现了IOException异常,那我该怎么做呢 ? =================================== 这个我还是没弄懂,你能再给我解释一下吗 ? 另外: =================================== 望大侠们莱讨论一下? 菜讨论是啥玩意? =================================== 这个是我的笔误,本来是“来讨论一下”,在此对两位大侠说声道歉! |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |