BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #13576同步于 2010/3/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

求助异常处理的设计

nature1089
2010/3/20镜像同步11 回复
自己写代码的时候,有点搞不懂异常的处理策略,比如下面的一段代码 import java.net.*; import java.io.*; public class CSocket throws IOException{ // Socket CSocket; InputStream csIn; OutputStream csOut; DataInputStream csis; DataOutputStream csos; String str; Socket Cocket=new Socket("127.0.0.1",5555); public String read(){ csOut=Cocket.getOutputStream(); csos=new DataOutputStream(csOut); return str=new String(csis.readUTF()); } public void send(String msg){ csIn=CSocket.getInputStream(); csis=new DataI.nputStream(csIn); csos.writeUTF(msg); } // catch (IOException e){System.out.println("出现了IO异常");} } 该怎么设计异常的处理呢
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
wardensky机器人#1 · 2010/3/20
1. 你不应该在class类定义处抛出异常,应该在方法那里抛出。 2. 我好像没有看到你在任何地方try,为什么就直接catch了呢,这样是不对的。 3. 我处理异常的方法,如果自己能处理,就处理,并输出到控制台或者日志中;如果自己不能处理,就抛出,可能是直接抛出,也可能抛出自己定义的一个异常。 4. 我建议你用eclipse去写程序,很多编译错误能找出来。 【 在 nature1089 (换个昵称) 的大作中提到: 】 : 自己写代码的时候,有点搞不懂异常的处理策略,比如下面的一段代码 : import java.net.*; : import java.io.*; : ...................
greedisgood机器人#2 · 2010/3/20
有两种, 一是直接解决,即catch住不再抛出。适用于最终应用开发的部分,不适用于开发类库部分。 二是抛出,包括直接抛出或者catch住再抛出,把异常留给调用者处理。适用于开发标准代码供其他人或其他地方使用,不适用于最终应用开发的部分。
greedisgood机器人#3 · 2010/3/20
所有第三方类库都是选择始终抛出异常,不能自己解决。始终把最终处理权留给使用者。
nature1089机器人#4 · 2010/3/20
【 在 wardensky 的大作中提到: 】 : 1. 你不应该在class类定义处抛出异常,应该在方法那里抛出。 : 2. 我好像没有看到你在任何地方try,为什么就直接catch了呢,这样是不对的。 : 3. 我处理异常的方法,如果自己能处理,就处理,并输出到控制台或者日志中;如果自己不能处理,就抛出,可能是直接抛出,也可能抛出自己定义的一个异常。 : ................... 这段代码我改了很多地方,改糊涂了就贴上来了呵呵 那个,抛出的时候throws和throw分别该怎么用啊
nature1089机器人#5 · 2010/3/20
【 在 greedisgood 的大作中提到: 】 : 有两种, : 一是直接解决,即catch住不再抛出。适用于最终应用开发的部分,不适用于开发类库部分。 : 二是抛出,包括直接抛出或者catch住再抛出,把异常留给调用者处理。适用于开发标准代码供其他人或其他地方使用,不适用于最终应用开发的部分。 : ................... 您指的最终应用开发和开发类库部分应该怎样理解啊,能举个例子嘛,呵呵
wardensky机器人#6 · 2010/3/20
我不针对你这段代码,自己写一个抛出的,你参考一下吧。 import java.io.IOException; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.DataInputStream; public class ExceptionDemo { public static void main(String[] args) { catchExce(); try { throwExce(); } catch (Exception e) { e.printStackTrace(); } } public static void catchExce() { try { DataInputStream in = new DataInputStream(new BufferedInputStream( new FileInputStream("/home/chunhui/tmp"))); while (in.available() != 0) System.out.print((char) in.readByte()); } catch (IOException e) { e.printStackTrace(); } } public static void throwExce() throws IOException { try { DataInputStream in = new DataInputStream(new BufferedInputStream( new FileInputStream("/home/chunhui/tmp"))); while (in.available() != 0) System.out.print((char) in.readByte()); } catch (IOException e) { throw e; } } } 【 在 nature1089 (换个昵称) 的大作中提到: 】 : 这段代码我改了很多地方,改糊涂了就贴上来了呵呵 : 那个,抛出的时候throws和throw分别该怎么用啊
wardensky机器人#7 · 2010/3/20
我理解: 如果你是自己做项目或者自己学习,考虑到你这些代码别人重用的机会比较小,就把异常catch住;如果你的代码可能打成jar文件,提供给别人用,而且是那种最基本的库文件方式,你就应该抛出异常,让别人去处理这些异常。 【 在 nature1089 (换个昵称) 的大作中提到: 】 : 您指的最终应用开发和开发类库部分应该怎样理解啊,能举个例子嘛,呵呵
greedisgood机器人#8 · 2010/3/20
【 在 wardensky 的大作中提到: 】 : 我理解: : 如果你是自己做项目或者自己学习,考虑到你这些代码别人重用的机会比较小,就把异常catch住;如果你的代码可能打成jar文件,提供给别人用,而且是那种最基本的库文件方式,你就应该抛出异常,让别人去处理这些异常。 恩。
greedisgood机器人#9 · 2010/3/20
【 在 nature1089 的大作中提到: 】 : 这段代码我改了很多地方,改糊涂了就贴上来了呵呵 : 那个,抛出的时候throws和throw分别该怎么用啊 throws和throw没有什么联系。 throws跟在方法后面,可以抛出一个或多个异常。 throw是方法里的,用于抛出新异常或者catch到的异常。