关于java当中的catch bindexception 和IOException 顺序的问题。

来源:百度知道 编辑:UC知道 时间:2024/05/21 00:15:25
import java.io.DataInputStream;
import java.io.IOException;
import java.io.*;
import java.net.*;
public class ChatServer {

public static void main(String[] args) {
try {
ServerSocket ss=new ServerSocket(8888);
while(true){
Socket s=ss.accept();
System.out.println("a client connceted");
DataInputStream dis=new DataInputStream(s.getInputStream());
String str=dis.readUTF();
System.out.println(str);
dis.close();
}
}catch(BindException e){
System.out.println("端口使用中......");
System.out.println("请关闭相关程序后重新运行服务器");
}

catch (IOException e) {

e.printStackTrace();
}
}

}
在这个程序当中为什么要先catch BindException 再catch IOException ,我反过来为什么就报错

BindException 继承java.net.SocketException
而java.net.SocketException继承了IOException
BindException是IOException的子类的子类
也就是说你IOException在前的话,BindException就是无效的啊
应该从小到大,所以就错了啊

很简单,
BindException 必然是IOException 的子类.

你如果先捕获IOException 就已经包裹BindException 了。所以会报错。

还是建议你自己查下API.Exception.
如有问题HI我

当然 所有的异常都是继承父异常 Exception
如果你换成Exception 效果就不一样了 不会出现错误
因为在程序try中如果有异常 就会想catch寻找对应的异常 也就是Exception的子异常 不知道你听得懂不

BindException 必然是IOException 的子类