返回信息流自己写代码的时候,有点搞不懂异常的处理策略,比如下面的一段代码
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异常");}
}
该怎么设计异常的处理呢
这是一条镜像帖。来源:北邮人论坛 / java / #13576同步于 2010/3/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
求助异常处理的设计
nature1089
2010/3/20镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
1. 你不应该在class类定义处抛出异常,应该在方法那里抛出。
2. 我好像没有看到你在任何地方try,为什么就直接catch了呢,这样是不对的。
3. 我处理异常的方法,如果自己能处理,就处理,并输出到控制台或者日志中;如果自己不能处理,就抛出,可能是直接抛出,也可能抛出自己定义的一个异常。
4. 我建议你用eclipse去写程序,很多编译错误能找出来。
【 在 nature1089 (换个昵称) 的大作中提到: 】
: 自己写代码的时候,有点搞不懂异常的处理策略,比如下面的一段代码
: import java.net.*;
: import java.io.*;
: ...................
有两种,
一是直接解决,即catch住不再抛出。适用于最终应用开发的部分,不适用于开发类库部分。
二是抛出,包括直接抛出或者catch住再抛出,把异常留给调用者处理。适用于开发标准代码供其他人或其他地方使用,不适用于最终应用开发的部分。
【 在 wardensky 的大作中提到: 】
: 1. 你不应该在class类定义处抛出异常,应该在方法那里抛出。
: 2. 我好像没有看到你在任何地方try,为什么就直接catch了呢,这样是不对的。
: 3. 我处理异常的方法,如果自己能处理,就处理,并输出到控制台或者日志中;如果自己不能处理,就抛出,可能是直接抛出,也可能抛出自己定义的一个异常。
: ...................
这段代码我改了很多地方,改糊涂了就贴上来了呵呵
那个,抛出的时候throws和throw分别该怎么用啊
【 在 greedisgood 的大作中提到: 】
: 有两种,
: 一是直接解决,即catch住不再抛出。适用于最终应用开发的部分,不适用于开发类库部分。
: 二是抛出,包括直接抛出或者catch住再抛出,把异常留给调用者处理。适用于开发标准代码供其他人或其他地方使用,不适用于最终应用开发的部分。
: ...................
您指的最终应用开发和开发类库部分应该怎样理解啊,能举个例子嘛,呵呵
我不针对你这段代码,自己写一个抛出的,你参考一下吧。
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分别该怎么用啊
我理解:
如果你是自己做项目或者自己学习,考虑到你这些代码别人重用的机会比较小,就把异常catch住;如果你的代码可能打成jar文件,提供给别人用,而且是那种最基本的库文件方式,你就应该抛出异常,让别人去处理这些异常。
【 在 nature1089 (换个昵称) 的大作中提到: 】
: 您指的最终应用开发和开发类库部分应该怎样理解啊,能举个例子嘛,呵呵
【 在 wardensky 的大作中提到: 】
: 我理解:
: 如果你是自己做项目或者自己学习,考虑到你这些代码别人重用的机会比较小,就把异常catch住;如果你的代码可能打成jar文件,提供给别人用,而且是那种最基本的库文件方式,你就应该抛出异常,让别人去处理这些异常。
恩。
【 在 nature1089 的大作中提到: 】
: 这段代码我改了很多地方,改糊涂了就贴上来了呵呵
: 那个,抛出的时候throws和throw分别该怎么用啊
throws和throw没有什么联系。
throws跟在方法后面,可以抛出一个或多个异常。
throw是方法里的,用于抛出新异常或者catch到的异常。