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

a31605605 02-15 18:01:52 148

方法后边加throws XXX 声明该方法将指定异常(Throwable 及其子类)。该方法的方法对可能抛出的异常做处理,例如使用try catch块包裹,或调用方法也声明向上抛出该异常或异常的父类。
方法后不加throws XXX,且其内部并没有trh catch块,则出现异常时默认向上抛出。
何时抛出异何时捕获并处理异常,什么是运行时异常,什么是非运行时异常请自行查找。

把异常抛给调用它方,如果你不加的话,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是自定义异常类。

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

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

初学java遇到了相同的问题,读完最佳答案后仍感觉一头雾水,亲测后我发现这个问题其实是这样子的,希望能后来人。
一、如果E是一个非运行时异常
1、如果一个方法后面跟了throws E,且(函数体中包含有throw E语句或这个函数调用了方法后面跟了throws E的函数),那么这个函数必须放在一个try..catch(E1)中调用,否则发生编译错误(非运行时异常未处理),其中E1为E或E的父类。
2、如果一个方法后面跟了throws E,但函数体其实并不会throw E,那么这个函数也必须放在一个try..catch(E1)中调用,否则发生编译错误(非运行时异常未处理),这说明方法后面是否跟了throws E是编译器是否会检查这个错误的标志。
3、如果一个方法后面没跟throws E,但函数体内使用了throw E,那么会发生编译错误(异常未处理)
4、如果try...catch(E)中调用的代码没有包含跟throws E的函数,那么会发生编译错误(不可达的异常)
5、如果一个方法后面跟了throws E,且被放在try..catch(E)中了,那么如果发生异常会被捕捉。
二、如果E是一个运行时异常,上述四种情况均不会发生编译错误。不管有没有跟throws E,都不影响捕捉异常。
三、如果一个异常只是Exception的子类,不是RuntimeException的子类,那么这是一个非运行时异常。否则,这是一个运行时异常。不管这个异常是系统自带还是自定义的都是如此。
四、联系题主的程序。当跟了throws时,是【一、】中的第5种情况。而没跟throws时,是【二、】中所说的情况。

类在哪里!static方法的调用得把类名加上!

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

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

有区别

因为下面主函数有try catch,所以上面的exception可以不加