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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fantianfei 中级黑马   /  2015-7-10 08:02  /  264 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class NovalueException extends RuntimeException
  2. {
  3.         NovalueException(String message)
  4.         {
  5.                 super(message);
  6.         }
  7. }

  8. interface Shape
  9. {
  10.         void getArea();
  11. }

  12. class Rec implements Shape
  13. {
  14.         private double length,width;
  15.         Rec(double length, double width)
  16.         {
  17.                 if(length<=0 || width<=0)
  18.                         throw new NovalueException("出现非法的值");
  19.                 this.length = length;
  20.                 this.width = width;
  21.         }
  22.         public void getArea()
  23.         {
  24.                 System.out.println("Area="+length * width);
  25.         }
  26. }

  27. class Cir implements Shape
  28. {
  29.         private double radius;
  30.         public static final double PI = 3.14;
  31.         Cir(double radius)
  32.         {
  33.                 if (radius<=0)
  34.                         throw new NovalueException("出现非法的值");
  35.                 this.radius = radius;
  36.         }
  37.         public void getArea()
  38.         {
  39.                 System.out.println("Area="+radius * radius * PI);
  40.         }
  41. }

  42. class ExceptionDemo
  43. {
  44.         public static void main(String[] args)
  45.         {
  46.                 Rec r = new Rec(-2.5,3.9);
  47.                 r.getArea();

  48.                 Cir c = new Cir(3.0);
  49.                 c.getArea();
  50.                
  51.                 System.out.println("over");
  52.         }
  53.        
  54. }
复制代码


想问我这个程序如果Rec里面出现负值了,下面的Cir就算没有负值,也检测不到,只会直接报出异常终止程序,有什么好的解决方法 两个类之间的执行不会影响到彼此

3 个回复

倒序浏览
你NovalueException继承的是RuntimeException
有异常程序就停止运行了,连try都不用.
改成Exception吧
然后在main中捕获异常处理就可以了
  1. public static void main(String[] args)
  2.         {
  3.                 try{
  4.                         Rec r=new Rec(-2.5,3.9);
  5.                         r.getArea();
  6.                 }catch(NovalueException e){
  7.                         System.out.println(e);
  8.                 }

  9.                 try{
  10.                         Cir        c = new Cir(3.0);
  11.                         c.getArea();
  12.                 }catch(NovalueException e){
  13.                         System.out.println(e);
  14.                 }
  15.                 System.out.println("over");
  16.         }
复制代码
回复 使用道具 举报
半月 发表于 2015-7-10 08:49
你NovalueException继承的是RuntimeException
有异常程序就停止运行了,连try都不用.
改成Exception吧

试了 不行
回复 使用道具 举报
半月 发表于 2015-7-10 08:49
你NovalueException继承的是RuntimeException
有异常程序就停止运行了,连try都不用.
改成Exception吧

搞定了,谢谢。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马