代码如下:package test;
public class TestException
{
public static void main(String [] args)
{
int result = new Test().devide(3, 1);
System.out.println("the result is" + result );
}
}
class Test
{
     public int devide(int x, int y) throws Exception
{
int result = x/y;
return x/y;
}
}
书中解答说将出现如下的编译错误:
TestException.java:5: unreported exception java.lang.Exception; must be caught or declared to be thrown
                        int result = new Test().devide( 3, 1 );
但是我的运行结果是:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Unhandled exception type Exception问题一: 请问编译结果应该是?
问题二: 是否在真实的程序编写中,都加上try…catch…帮助查找编译异常的原因。这样有什么负作用么?

解决方案 »

  1.   

    你devide()抛出了异常main方法没处理,肯定编译不过。一般来说没啥副作用,就是开销有点大。不放循环等一些执行率很大的程序里面影响不大
      

  2.   

    人家书里说的是“编译错误”
    你这个代码压根就不能编译成功,何谈运行呢。问题一: 请问编译结果应该是? c:\jdk\bin>javac -g TestException.java
    TestException.java:7: 错误: 未报告的异常错误Exception; 必须对其进行捕获或声明以便抛出
        int result = new Test().devide(3, 1);
                                      ^
    1 个错误
    问题二: 是否在真实的程序编写中,都加上try…catch…帮助查找编译异常的原因。这样有什么负作用么?真正写java程序都是在eclipse或者其他ide环境中写代码,这种编译错误在写的时候就能提示给你。一般来说自己处理不了的错误就抛出去,让上层逻辑去处理。不要try catch。除非你明确知道这里有什么错误,并需要记录日志或处理异常导致的一系列问题才去try catch
      

  3.   

    1.public int devide(int x, int y) throws Exception//这里就是说谁调用它就需要抛出异常
    所以你调用的时候就try      catch 下就ok
    2.一般在开发都会自己try  catch 方便找问题,写工具就会 throws出去因为用的人不是自己,一句话谁用谁 try  catch 
      

  4.   

    java编译器很智能的,你那个方法可能存在除数为0的情况,所以就会抛出异常,必须try。另外不是所有的方法都要try的,只有针对那些运行时可能会抛出异常的才要去捕获
      

  5.   

    int result = new Test().devide(3, 1);
    你这行代码有误!你要new这个实例的话说明你前面的应该不是静态方法,所以你前面应该创建这个方法的对象来接收,而不是直接接收。
      

  6.   

    Test类里的方法抛出了异常main里面要么try catch 要么也throws,这就是你的程序不能运行的原因。
    至于什么时候使用try catch,  
     因为trycatch 的开销比较大,效率低,一般不要把已知的可能产生的错误去使用异常机制去处理,不要刻意的用异常机制去代替正常的程序流程,
    还有不要使用过大的try catch块等等。。
      

  7.   

    补充一下   你的代码里相除的那个方法,可能出现的异常是ArithmeticException,属于RuntimeException,完全可以不用try catch 和throws的java自己就能解决的