黑马程序员技术交流社区

标题: 毕向东_Java基础源代码Codes\day16\MapTest.java 中的一个疑问? [打印本页]

作者: 王洪波    时间: 2013-5-12 11:27
标题: 毕向东_Java基础源代码Codes\day16\MapTest.java 中的一个疑问?
本帖最后由 王洪波 于 2013-5-12 19:26 编辑
  1. public boolean equals(Object obj)
  2.         {
  3.                 if(!(obj instanceof Student))
  4.                         throw new ClassCastException("类型不匹配");  //!!我的疑问所在

  5.                 Student s = (Student)obj;

  6.                 return this.name.equals(s.name) && this.age==s.age;
  7.         }
复制代码
我的理解是这行不用写。理由:
若obj不是Student的实例,即类型不匹配,则在执行下边的语句Student s = (Student)obj时,强转失败虚拟机会自动抛出
ClassCastException异常。
各位大侠意见如何?

作者: 蔡增辉    时间: 2013-5-12 11:37
个人理解,单作为一个练习的小程序,楼主的说法是没问题的。
但在开发时,这里一般是要先try{}  catch(){} 语句块的。
毕老师在视频中由于时间的限制,只是做了简化处理,没有按正规方式处理。
作者: 王洪波    时间: 2013-5-12 11:48
蔡增辉 发表于 2013-5-12 11:37
个人理解,单作为一个练习的小程序,楼主的说法是没问题的。
但在开发时,这里一般是要先try{}  catch(){}  ...

这里好像用try catch没用。毕老师的意思好像是让程序终止。期待更有深度的回贴。
作者: 蔡增辉    时间: 2013-5-12 12:21
王洪波 发表于 2013-5-12 11:48
这里好像用try catch没用。毕老师的意思好像是让程序终止。期待更有深度的回贴。 ...


我的理解是:正常开发中应该把抛出异常的语句放置在catch(){}中;
这样程序也可以被终止。
这只是小问题,不用太纠结。
作者: 王洪波    时间: 2013-5-12 12:35
蔡增辉 发表于 2013-5-12 12:21
我的理解是:正常开发中应该把抛出异常的语句放置在catch(){}中;
这样程序也可以被终止。
这只是小问题 ...

往往小问题中蕴含着大道理。要善于发掘嘛。:P
作者: 殇_心。    时间: 2013-5-12 17:43
多态。父类引用子类对象。
obj 实际指向的是 Student 对象。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2