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);
}
}
}
还有,这个程序运行后有一条语句: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);
}
}
}
给个例子:一个人要上班,可以开车,可以走路,当然开车也许会碰到中途车抛锚的情况吧.然而如果车坏了,在汽车类里面能解决么.? 汽车坏了汽车自己是解决不了的, 只能把问题交给驾驶车的人去解决,所以这个时候就要声明异常..具体情况具体对待..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有所帮助
这好比你告诉你的老板:“这件事情我有可能搞不定,你要做好我搞不定它的准备哦!”
这时候,你老板就要对你留个心了,这时,他就是在try { };同时要给出一个当你没搞定它时的补偿方案,这就是catch() { }。
因为你事先声明了你有可能搞不定,所以,就算真的没搞定,你也是没有责任的。
但如果你事先没有说,最后你搞不定了,那就可能造成整个生产链的崩溃,那你责任就大了。
所以,现在你知道throws的作用有多重要了吧?
因为你已经将object类的toString(){}方法给重写了,所以你在System.out.println("Exception caught" + e);时会使e自动调用你重写的那个toString方法,不信你改成System.out.println("Exception caught" + e。toString());,结果一样!
我能不能这样理解,在可能出现异常的类里我都加上throws语句,我把我能或我想处理的有try()catch()做了,一边让throws帮我防着点意外?
万一意外发生,是不是别人运行的时候就出现异常的语句终止程序啊?
是不是因为我要print e,所以它才调用tostring()?
是不是当我要print对象的时候,都会这样自动调用啊?
对于代码中可能抛出异常的语句,是用throws声明告诉你的调用者,还是在方法内部用try...catch...处理,甚或是catch以后再重新抛出,这都取决于具体的应用需要。异常抛出以后是否终止程序,这个依赖于具体的异常处理策略。一般来说,如果处理得当,总是有方法避免终止程序的。举个例子:
假设有一个登录界面程序,它把用户填写的登录信息提交给用户登录检查程序以验证用户的合法性,用户登录检查程序在验证失败时抛出异常。界面程序捕获到一个验证失败的异常时并不一定终止程序,它可以提醒用户重试。同时,可以设置一个登录失败次数变量,当失败达到一定次数(如三次)时,终止程序。另外,如果你什么异常都不处理(即:为main()方法声明异常,交给JVM处理),JVM会在任何异常抛出时终止程序并打印异常信息。