static void compute(int a)throws MyException,这里的throws MyException到底起什么作用呢?后面已经有了try和catch,那还用的到这个吗?在这里写上这句的目的,是为了防止程序中有异常而没有catch吗?发生这种情况才用到它,把它交由系统?那这时程序就被终止了吗?
还有,这个程序运行后有一条语句:Exception caughtMyException[20],不明白它是什么时候调用了public String toString()的方法呢?
谢谢
class MyException extends Exception {
private int detail;
MyException (int a) {
detail = a;
} public String toString() {
return "MyException[ "+ detail + " ] ";
}
}class ExceptionDemo {
static void compute (int a )throws MyException {
System.out.println("Called compute (" + a + ".");
if (a>10) throw new MyException (a);
System.out.println("Normal exit");
} public static void main(String args[]) {
try {
compute(1);
compute(20);
}catch (MyException e) {
System.out.println("Exception caught" + e);
}
}
}

解决方案 »

  1.   

    throws MyException到底起什么作用呢?-------在调用此方法的地方处理异常
      

  2.   

    1.",这里的throws MyException到底起什么作用呢?"    ::用来抛出自定义的异常。有可能出现的代码块中,如果自己不想处理,可以throws声明异常的类型,那意思就是我要抛异常了,谁用谁处理吧。
      

  3.   

    异常分两种.. 一种是未检查异常,这类异常通常是运行期异常,也就是RuntimeException或者其子类.当发生这类异常的时候,不用显式的try/catch去捕捉此异常也能编译通过.当然,如果你的代码发生RuntimeException的时候不要用 try/catch去处理.而是去找你的代码的错误而避免这种异常还有一种是受检查异常,非运行期异常,这类异常就需要你显式的用try/catch去捕捉,  当然,如果在这个方法里面,有能力处理或者有必要处理异常的时候就用try/catch.  当这个方法可能会抛出的异常在方法里面无法解决,或者捕捉了也没什么用的话,这个时候应该用throws把问题丢给调用者,让调用这个方法的人知道,这个方法可能会抛出受检查异常,请你捕捉
    给个例子:一个人要上班,可以开车,可以走路,当然开车也许会碰到中途车抛锚的情况吧.然而如果车坏了,在汽车类里面能解决么.? 汽车坏了汽车自己是解决不了的,  只能把问题交给驾驶车的人去解决,所以这个时候就要声明异常..具体情况具体对待..class CarException extends Exception
    {}class Car
    {
        public void run() throws CarException
        {
            System.out.println("开车");
        }
    }class Person
    {
        public void walkToWork()
        {
            System.out.println("步行上班");
        }
        
        public void driveToWork(Car car)
        {
            try
            {
                car.run();
                System.out.println("开车上班");
            }
            catch(CarException e)
            {
                walkToWork();//当车坏了的时候走路去上班
            }
        }
    }希望能对LZ有所帮助
      

  4.   

    方法声明后的throws子句是方法签名的一部分,意思是告诉方法的调用者,该方法有可能抛出异常。
    这好比你告诉你的老板:“这件事情我有可能搞不定,你要做好我搞不定它的准备哦!”
    这时候,你老板就要对你留个心了,这时,他就是在try { };同时要给出一个当你没搞定它时的补偿方案,这就是catch() { }。
    因为你事先声明了你有可能搞不定,所以,就算真的没搞定,你也是没有责任的。
    但如果你事先没有说,最后你搞不定了,那就可能造成整个生产链的崩溃,那你责任就大了。
    所以,现在你知道throws的作用有多重要了吧?
      

  5.   

    2.还有,这个程序运行后有一条语句:Exception caughtMyException[20],不明白它是什么时候调用了public String toString()的方法呢?[color=#FF0000][/color]
    因为你已经将object类的toString(){}方法给重写了,所以你在System.out.println("Exception caught" + e);时会使e自动调用你重写的那个toString方法,不信你改成System.out.println("Exception caught" + e。toString());,结果一样!
      

  6.   

    throws Exceptionthrows 一般是自己写的程序给别人使用的时候用到,就是你写的某个方法可能会出现异常又无法避免,那么就将异常抛给调用者,由别人来处理 try catch语句,一般是在调用别人的方法的时候,那个方法会抛出异常,那么你就得去捕捉,并且做相应的处理至于tostring()方法,一般是由运行环境自己去调用的,如果遇到需要转换为字符串的形式,那么它就会自动去调用这个方法,所以在平时,要注意这个方法的重载,不然运行环境去自动调用object的tostring()方法,那么你的程序就很容易出错这些只是我个人的一点看法
      

  7.   


    我能不能这样理解,在可能出现异常的类里我都加上throws语句,我把我能或我想处理的有try()catch()做了,一边让throws帮我防着点意外?
    万一意外发生,是不是别人运行的时候就出现异常的语句终止程序啊?
      

  8.   


    是不是因为我要print e,所以它才调用tostring()?
    是不是当我要print对象的时候,都会这样自动调用啊?
      

  9.   

    你的方法会不会给其调用者带来异常,这个你是完全可以自己控制的,不存在什么“让throws帮我防着点意外”,编译器会为你检查的,如果你缺少必要的throws声明,你将无法编译。
    对于代码中可能抛出异常的语句,是用throws声明告诉你的调用者,还是在方法内部用try...catch...处理,甚或是catch以后再重新抛出,这都取决于具体的应用需要。异常抛出以后是否终止程序,这个依赖于具体的异常处理策略。一般来说,如果处理得当,总是有方法避免终止程序的。举个例子:
    假设有一个登录界面程序,它把用户填写的登录信息提交给用户登录检查程序以验证用户的合法性,用户登录检查程序在验证失败时抛出异常。界面程序捕获到一个验证失败的异常时并不一定终止程序,它可以提醒用户重试。同时,可以设置一个登录失败次数变量,当失败达到一定次数(如三次)时,终止程序。另外,如果你什么异常都不处理(即:为main()方法声明异常,交给JVM处理),JVM会在任何异常抛出时终止程序并打印异常信息。
      

  10.   

    是的。print(),println()等方法会对Object参数调用其toString()方法。另外,把任何一个Object对象与字符串作相加操作时,也会调用其toString()方法。
      

  11.   

    throws MyException 这是异常说明,是方法声明的一部分。提示程序员刚方法可能会抛出MyException异常。