黑马程序员技术交流社区

标题: 异常小问题,有经验的大侠来回答 [打印本页]

作者: 魏-玉-彪    时间: 2012-9-3 07:41
标题: 异常小问题,有经验的大侠来回答
本帖最后由 魏-玉-彪 于 2012-9-3 08:03 编辑
  1. package com.itheima;



  2. //import package com.itheima.Demo3;
  3. //import package com.itheima.FuShuException;







  4. class FuShuException extends Exception //getMessage();
  5. {
  6.         private int value;

  7.         FuShuException()
  8.         {
  9.                 super();
  10.         }
  11.         FuShuException(String msg,int value)
  12.         {
  13.                 super(msg);
  14.                 this.value = value;
  15.         }

  16.         public int getValue()
  17.         {
  18.                 return value;
  19.         }

  20. }



  21. class Demo3
  22. {
  23.         int div(int a,int b)throws FuShuException
  24.         {
  25.                 if(b<0)
  26. throw new FuShuException("出现了除数是负数的情况------ / by fushu",b);
  27.                 //手动通过throw关键字抛出一个自定义异常对象。

  28.                 return a/b;
  29.         }
  30. }


  31. class  ExceptionDemo3
  32. {
  33.         public static void main(String[] args)
  34.         {
  35.                 Demo3 d = new Demo3();
  36.                 try
  37.                 {
  38.                         int x = d.div(4,-9);
  39.                         System.out.println("x="+x);               
  40.                 }
  41.                 catch (FuShuException e)
  42.                 {
  43.                         System.out.println(e.toString());
  44.                         //System.out.println("除数出现负数了");
  45.                         System.out.println("错误的负数是:"+e.getValue());
  46.                 }
  47.                
  48.                

  49.                 System.out.println("over");

  50.         }
  51. }

复制代码
此段代码,Eclipse环境下,在毕老师的原包中运行会出现
Exception in thread "main" java.lang.NoSuchMethodError:


codes.day09.FuShuException.<init>(Ljava/lang/String;I)V
        at codes.day09.Demo3.div(ExceptionDemo3.java:82)
        at codes.day09.ExceptionDemo3.main(ExceptionDemo3.java:97)



把代码考呗到其他包运行正常,结果为:


com.itheima.FuShuException: 出现了除数是负数的情况------ / by fushu
错误的负数是:-9
over


谁知道是哪的问题?为何在其他包没问题?


作者: 全海波    时间: 2012-9-3 07:57
本帖最后由 全海波 于 2012-9-3 08:00 编辑
  1. package com.itheima;
  2. //import package com.itheima.Demo3;
  3. //import package com.itheima.FuShuException;


  4. /*class FuShuException extends Exception //getMessage();
  5. {
  6. private int value;

  7. FuShuException()
  8. {
  9. super();
  10. }
  11. FuShuException(String msg,int value)
  12. {
  13. super(msg);
  14. this.value = value;
  15. }

  16. public int getValue()
  17. {
  18. return value;
  19. }

  20. }



  21. class Demo3
  22. {
  23. int div(int a,int b)throws FuShuException
  24. {
  25. if(b<0)
  26. throw new FuShuException("出现了除数是负数的情况------ / by fushu",b);//手动通过throw关键字抛出一个自定义异常对象。

  27. return a/b;
  28. }
  29. }


  30. class ExceptionDemo3
  31. {
  32. public static void main(String[] args)
  33. {
  34. Demo3 d = new Demo3();
  35. try
  36. {
  37. int x = d.div(4,-9);
  38. System.out.println("x="+x);
  39. }
  40. catch (FuShuException e)
  41. {
  42. System.out.println(e.toString());
  43. //System.out.println("除数出现负数了");
  44. System.out.println("错误的负数是:"+e.getValue());
  45. }



  46. System.out.println("over");

  47. }
  48. }

  49. */
  50. <FONT color=red>class FuShuException extends Exception //getMessage();
  51. {
  52. private int value;

  53. FuShuException()
  54. {
  55. super();
  56. }
  57. FuShuException(String msg,int value)
  58. {
  59. super(msg);
  60. this.value = value;
  61. }

  62. public int getValue()
  63. {
  64. return value;
  65. }
  66. </FONT>
  67. }



  68. class Demo3
  69. {
  70. int div(int a,int b)throws FuShuException
  71. {
  72. if(b<0)
  73. throw new FuShuException("出现了除数是负数的情况------ / by fushu",b);
  74. //手动通过throw关键字抛出一个自定义异常对象。

  75. return a/b;
  76. }
  77. }


  78. class ExceptionDemo3
  79. {
  80. public static void main(String[] args)
  81. {
  82. Demo3 d = new Demo3();
  83. try
  84. {
  85. int x = d.div(4,-9);
  86. System.out.println("x="+x);
  87. }
  88. catch (FuShuException e)
  89. {
  90. System.out.println(e.toString());
  91. //System.out.println("除数出现负数了");
  92. <FONT color=red>System.out.println("错误的负数是:"+e.getValue());</FONT>
  93. }



  94. System.out.println("over");

  95. }
  96. }
复制代码
红色部分为出现此类问题的原因!


作者: 魏-玉-彪    时间: 2012-9-3 08:05
为何在其他包正常?
作者: 武庆东    时间: 2012-9-3 09:43
实验了下,总结一下应该是你运行时的Main Class问题,由于类太多所以IDE不知道应该从那个类是主类,所以出现上述情况!
可以将ExceptionDemo3 类修饰符改为public修饰或者进行右键run as-->run configurations 中的Main Class 下的运行运行类改为 当前包名.主类名(这里的主类名为ExceptionDemo3 )
有不对的地方还请补充哈!
作者: 黑马-李勇    时间: 2012-9-3 17:05
我的运行正常。结果如下
lianxi.FuShuException: 出现了除数是负数的情况------ / by fushu
错误的负数是:-9
over

未命名.JPG (20.52 KB, 下载次数: 24)

未命名.JPG

作者: 魏-玉-彪    时间: 2012-9-4 07:15
此问题已解决

谢谢各位大侠,经本人多次试验,可能是因为同一包内有了同名class FuShuException extends Exception 类文件,把包内其他 class FuShuException extends Exception 注释后结果正常。
作者: 魏-玉-彪    时间: 2012-9-4 07:22
黑马-李勇 发表于 2012-9-3 17:05
我的运行正常。结果如下
lianxi.FuShuException: 出现了除数是负数的情况------ / by fushu
错误的负数是: ...

class Demo3 是创建自定义的异常类对象的, 至于为什么这里有,我也不知道




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