在java中的方法后面加个throws抛出异常有什么作用?我试了不加的运行效果一样

public static void show() throws Exception {
Scanner input = new Scanner(System.in);
System.out.println("请输入被除数:");
int num = input.nextInt();
System.out.println("请输入除数");
int num1 = input.nextInt();
System.out.println(String.format("%d / %d = %d",num,num1,num/num1) );
}
public static void main(String[] args) {

try{
show();

}catch(Exception e){
System.out.println("输入错误,除数和被除数必须是整数");
System.out.println("未知异常");
e.printStackTrace();
}finally{

System.out.println("谢谢使用本程序");
}
}

把异常抛给调用它的地方,如果你不加的话,main里的try catch是拿不到 这个异常的。也就是说,你show方法出错了。上一次也不知道怎么回事。。。
同时,你加上throw exception。调用 的地方就必须try catch,不然编译都不过。。这样代码就更健壮了。不会跟c语言一样,一出错,没处理。系统可能就崩溃了。追问

方法后面没加throws Exception ,main里面也捕捉到异常了,怎么回事?

追答

默认为把exception往上一级抛。所以throw exception。但如果你没加这一句。main方法里,可以不用try catch。如果加了。main方法必须try catch。或者再在后面throw exception。
这个要看经验。。。你现在很难理解。
我觉得应该是这样。

如果你的方法是别人要调用的,你又明知道可能会出错异常的代码。比如算数。输入输出流。当然,你要是简单到可以肯定不会出异常,就可以不做处理。你就应该把代码内部先try catch。然后再throw 一个自定义异常。这样别人就知道出在哪里。
ublic static void show() throws BusinessException{
try{
Scanner input = new Scanner(System.in);
System.out.println("请输入被除数:");
int num = input.nextInt();
System.out.println("请输入除数");
int num1 = input.nextInt();
System.out.println(String.format("%d / %d = %d",num,num1,num/num1) );
}catch(Exception e){
throw new BusinessException("显示异常",e);
}
}

BusinessException是自定义异常类。

追问

有点明白,又不太明白,你说的跟编程思想上的一样难懂!

追答

不用纠结。代码写多了,就会懂得。。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-30
方法后边加throws XXX 声明该方法将抛出指定异常(Throwable 及其子类)。调用该方法的方法中需对可能抛出的异常做处理,例如使用try catch块包裹,或调用方法也声明向上抛出该异常或异常的父类。
方法后不加throws XXX,且其内部并没有trh catch块,则出现异常时默认向上抛出。
何时抛出异常,何时捕获并处理异常,什么是运行时异常,什么是非运行时异常请自行查找。
第2个回答  2012-03-27
因为下面主函数有try catch,所以上面的exception可以不加
第3个回答  2021-10-15
使用throws和让系统自动抛出异常的区别:
也没啥区别,系统自动抛出也是一层一层往上抛的,就是调用有throws修饰过的方法的程序必须使用try catch括起来,就相当于一个编译期的异常。
第4个回答  2012-03-27
类在哪里!static方法的调用得把类名加上!追问

我的方法是类方法,不加也可以运行

追答

比如类名为A 这样A.show()

相似回答