4、throws 抛出(在方法的定义上)
1)格式: throws 异常类名,可以一次抛出多个
这个格式必须跟在方法的括号后面。
public void test7() throws ArithmeticException {}
2)注意:
调用该方法的方法,需要处理该异常,如不处理,继续抛出。
3)小结:
编译期异常抛出,将来调用者必须处理。
运行期异常抛出,将来调用可以不用处理。
5、throw(在方法体内)
1)格式:throw 异常对象
如果出现了异常情况,我们可以把该异常抛出,这个时候的抛出的应该是异常的对象。
throw new ArithmeticException();
一般用于自定义的异常使用
2)面试题:throw和throws是的区别
throw:
在方法体中,后面跟的是异常对象名,并且只能是一个。
抛出的是一个异常对象,说明这里肯定有一个异常产生了。
throws:
在方法声明上,后面跟的是异常的类名,可以是多个。
是声明方法有异常,是一种可能性,这个异常并不一定会产生。
(三)finally关键字及其面试题
1、finally用于释放资源,它的代码永远会执行。特殊情况:在执行到finally之前jvm退出了
2、面试题
final,finally,finalize的区别?
final:最终的意思,可以修饰类,成员变量,成员方法
修饰类,类不能被继承
修饰变量,变量是常量
修饰方法,方法不能被重写
finally:是异常处理的一部分,用于释放资源。
一般来说,代码肯定会执行,特殊情况:在执行到finally之前jvm退出了
finalize:是Object类的一个方法,用于垃圾回收。
如果在catch里面有return,请问finally还执行吗?如果执行,在return前还是后
会执行,在 return 前面执行。
注意:返回路径就形成问题。*
/*
* 面试题:
* 1:final,finally和finalize的区别
* final:最终的意思,可以修饰类,成员变量,成员方法
* 修饰类,类不能被继承
* 修饰变量,变量是常量
* 修饰方法,方法不能被重写
* finally:是异常处理的一部分,用于释放资源。
* 一般来说,代码肯定会执行,特殊情况:在执行到finally之前jvm退出了
* finalize:是Object类的一个方法,用于垃圾回收
*
* 2:如果catch里面有return语句,请问finally里面的代码还会执行吗?
* 如果会,请问是在return前,还是return后。
* 会。前。
*
* 准确的说,应该是在中间。
*
* 3:try...catch...finally的格式变形
* A:try...catch...finally
* B:try...catch
* C:try...catch...catch...
* D:try...catch...catch...finally
* E:try...finally
* 这种做法的目前是为了释放资源。
*/
public int test10(){
int a = 10;
try {
System.out.println(a / 0);
a = 20;
} catch (ArithmeticException e) {
a = 30;
return a;
/*
* return a在程序执行到这一步的时候,这里不是return a而是return 30;这个返回路径就形成了。
* 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40
* 再次回到以前的返回路径,继续走return 30;
*/
} finally {
a = 40;
return a;//如果这样结果就是40了。
}
// return a;
}