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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹德君 中级黑马   /  2013-4-26 11:50  /  1183 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曹德君 于 2013-4-26 21:03 编辑
  1. import java.util.*;

  2. class  TreeSetDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                
  7.                 TreeSet ts = new TreeSet();
  8.                 ts.add(new Person("lisi001",10));
  9.                 ts.add(new Person("lisi002",20));
  10.                 ts.add(new Person("lisi003",30));
  11.                 ts.add(new Person("lisi004",40));
  12.                 ts.add(new Person("lisi007",40));
  13.                 ts.add(new Person("lisi002",40));

  14.                 for (Iterator it=ts.iterator();it.hasNext(); )
  15.                 {
  16.                         //Object obj =it.next();这里有类型提升。必须强转成Person才能输出名字和年龄。
  17.                         Person p = (Person)it.next();
  18.                         sop(p.getName()+"..m.."+p.getAge());
  19.                 }
  20.         }
  21.         public static void sop(Object obj)
  22.         {
  23.                 System.out.println(obj);
  24.         }
  25. }

  26. class Person implements Comparable
  27. {
  28.         private String name;
  29.         private int age;

  30.         Person(String name,int age)
  31.         {
  32.                 this.name=name;
  33.                 this.age=age;
  34.         }
  35.         public String getName()
  36.         {
  37.                 return name;
  38.         }
  39.         public int getAge()
  40.         {
  41.                 return age;        
  42.         }
  43.         public int compareTo(Object obj)
  44.         {        
  45.                 if (!(obj instanceof Person))
  46.                 {
  47.                         throw new RuntimeException("不是Person对象");//1疑问这里为什么要抛出RuntimeException异常?用horows抛为什么不行??
  48.                 }
  49.                 Person  p=(Person)obj;
  50.                 if (this.age>p.age)
  51.                         return 1;
  52.                 if (this.age==p.age)
  53.                         //字符串本身也具备比较性String类里面的comparaTo()方法
  54.                         return this.name.compareTo(p.name);
  55.                 return  -1;
  56.         }
  57.         
  58. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

2 个回复

倒序浏览
if (!(obj instanceof Person))
                {
                        throw new RuntimeException("不是Person对象");//1疑问这里为什么要抛出RuntimeException异常?用horows抛为什么不行??
                }
                Person  p=(Person)obj;

直接抛出RuntimeException是可以终止程序的。
如果这个地方接收进来的不是一个Person对象那这段代码就失去了意义,就没有执行下去的必要了。所以选择终止程序。
而且补充一下。RuntimeException是不可以throws的。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 孙浩 于 2013-4-26 12:38 编辑

RuntimeException可以抛也可以不抛,编译器不检查该类的子异常!你这里不能抛是因为: compareTo(obj)方法是实现Comparable接口的方法,在Comparable接口中没有抛出任何异常,那么在它的实现类中只能处理!因为:子类方法声明的异常范围只能小于或等于父类方法所声明的异常!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马