A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张飞年 中级黑马   /  2012-9-21 00:12  /  1494 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张飞年 于 2012-9-26 00:21 编辑

今天在写一个完整的聊天程度的时候碰到一个问题,想好半天不知原因到底是不是这样,发上来大家一起注意下,知道的大虾说说自己意见
这是正确的格式(不报错):
  1. ServerSocket ss = null;
  2. try {
  3.                         ss = new ServerSocket(10008);// 创建服务端
  4.                 } catch (BindException e) {
  5.                         System.out.println("端口忆经被占用");
  6.                 } catch (IOException e) {
  7.                 }
  8. //或者
  9. ServerSocket ss = null;
  10.   try {
  11.    ss = new ServerSocket(10008);// 创建服务端
  12.   } catch (IOException e) {
  13.    System.out.println("端口忆经被占用");
  14.   }
复制代码
这样子就会出现错误:
  1. ServerSocket ss = null;
  2.                 try {
  3.                         ss = new ServerSocket(10008);// 这里会出错,让再加一个catch或者try-catch
  4.          } catch (BindException e) {
  5.                         System.out.println("端口忆经被占用");
  6.                 }
复制代码
我想这里的原因是不是因为BindException是IOException的子类的缘故,这创建端口的过程中不光可能发生端口占用异常还有可能发生IO异常,所以try了该产生服务端口的语句后只处理Io就没事,而只处理了端口占用异常就把IO异常给拉下了没处理,是 不是这样?

5 个回复

倒序浏览
是这样的,亲
回复 使用道具 举报
给张图片看看:

a.png (3.88 KB, 下载次数: 18)

a.png
回复 使用道具 举报
嗯,3楼的朋友回答的很好,相信楼主已经明白了.
回复 使用道具 举报


        ServerSocket 的构造方法 ServerSocket (int port)  抛出了一个 IOException ,这个异常必须处理,调用的方法捕捉,或再抛出


        

搜狗截图_2012-09-21_01-29-09.jpg (3.55 KB, 下载次数: 23)

搜狗截图_2012-09-21_01-29-09.jpg
回复 使用道具 举报
你抓住的异常不够大 来个狠点的直接抓住Exception肯定不会错的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马