大家看java中一段异常的问题

来源:百度知道 编辑:UC知道 时间:2024/07/08 01:58:28
有如下代码:
class lei1{
void fa() throws Exception{
throw new Exception();
}
}

class ab{
public static void main(String args[]){
try{
lei1 a=new lei1();
a.fa();
}
catch(Exception c){
System.out.println("我输出来了");
}
}
}

上段代码是准确的,编译可以通过的,下面有三种改法:
第一种: 去掉“throw new Exception();”保留“throws Exception”
第二种: 去掉“throws Exception”保留“throw new Exception();”
第三种: 去掉main方法中的try-catch,(里面的语句要保留),而其它的也都全部保留

这三种编译时都会报错,谁能说一下这三种报错的原因分别是什么?
对了,第一种是不会报错的,说一下不报错的原因就行了,谢谢
注:在第一种方法中如果去掉了try-catch系统是会报错的

第一种因为是一个空函数,没有异常可以抛出,但函数却要求抛出异常,所以报错;
第二种因为有异常要抛出,但是既没有在函数内捕捉异常处理,也不能抛到外层函数,所以报错;
第三中和第二种有点相似,因为你缺少了try-catch来捕捉异常,也不能抛向外层函数,所以报错。

呵呵,那就说明空函数是可以带throws Exception
这东西你试一下就可以了,我没试过,只是照着你说的给你点解释而已,不过我估计会报警告warning

第一种fa() 已经抛出异常了?这样即使有错也不会报错的啊,只是抛出去了而已,也没有接受异常的地方

所谓的throws Exception 只是在你当前方法出异常而方法内部不能解决的时候抛出该异常,由调用该方法的(方法?)捕获并处理.你第一个改法,方法体里什么都不处理,也就没有异常抛出,也没有什么异常被捕获

而throw Exception和throws Exception的区别是一个指当前的操作可能抛出一个特定的异常,一个指可能方法体会抛出很多不同的异常, (看见那个throws后面的"s"没...)

你要是是去掉try-catch的话,你拿什么捕获异常? 当然要报错了