一、运行异常和受检查异常有什么区别
运行异常:RuntimeException及其子类都被称为运行时异常,Java编译器不会检查它,倘若既"没有通过throws声明抛出它",也"没有用try-catch语句捕获它",还是会编译通过如:空指针异常、指定的类找不到、数组越界、方法传递参数错误、数据类型转换错误。
受检异常::Exception类本身,以及Exception的子类中除了"运行时异常"之外的其它子类都属于被检查异常。 Java编译器会检查它此类异常,要么通过throws进行声明抛出,要么通过try-catch进行捕获处
理,否则不能通过编译。
二、throw 与 throws 的区别是什么?
throw用在方法体中,表示抛出异常由方法体语句处理,throw 是具体向外抛出异常的动作,所以它抛出的是一个异常实例;
throws用在参数后边表示把异常抛给调用者
三、try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
执行,并且finally的执行早于try里面的return
结论:
1、不管有木有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保
存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是
在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
四、finally 是不是一定会被执行到?
不一定。下面列举两种执行不到的情况:
1、当程序进入 try 块之前就出现异常时,会直接结束,不会执行 finally 块中的代码;
2、当程序在 try 块中强制退出时也不会去执行 finally 块中的代码,比如在 try 块中执行 exit 方法。
五、Error 和 Exception 有什么区别?
Error 表示系统级的错误,是 java 运行环境内部错误或者硬件问题
Exception 表示程序需要捕捉、需要处理的异常是程序出现的异常