1、Java异常介绍
总类;Throwable 是一个接口 有两个子类 Exception (z主要了解和使用的), Error(系统级别的异常,不可控)
Exception 下面很又很多异常,常见有空指针异常,造型异常....
异常捕获机制:try-catch
try块:包含可能出现的错误代码片段
catch块:包含try块出现错误的种类,可以出现1-n次。好的编程习惯在最后一次捕获Exception异常
catch的捕i获由上到下,所以不要把父类的异常放上面,下面的子类异常永远不会执行,报错
2、throw
主动抛出异常。一般使用在业务逻辑上的出错。
方法中有参数的时候,方法由逻辑引发的错误就可以使用主动抛出异常。若是由自身方法引发的异常,应由方法自身解决
3、throws
使用在方法,因参数问题,方法自身不能解决,抛给方法的调用者。使用直接在方法后面加上 throws 异常的类型
--------------
throw 与 throws 的区别
throw是主动抛出异常
throws是方法中自身不能解决抛出异常给方法调用者解决
--------------
4、Exception异常
运行时异常:在编译时不进行检查的异常(RuntimeException)
可检查异常:在编译的时候进行检查
在方法中使用throw时,如果是运行时异常可以不要再方法中抛出异常,如果不是咋需要使用关键字throws抛出异常,否则话编译不通过!!
常见的运行时异常有:NullPointerException (空指针)、StringIndexOutOfBoundsException (字符串数组越界)、 造型异常
5、finally
无条件执行
public class FinallyDemo {
public static void main(String[] args) {
System.out.println(
test(null)+","+test("0")+","+test(""));
/**
* 输出结果?
* 1,0,2
* 4,4,4正确结果
*/
}
public static int test(String str){
try {
return str.charAt(0)-'0';
} catch (NullPointerException e) {
return 1;
}catch (RuntimeException e) {
return 2;
}catch (Exception e) {
return 3;
}finally{//在这里面最好不要return
return 4;
}
}
一个小例子:最后结果是4,4,4 不是1,0,2.
可以说finally语句无条件太强大了,可以覆盖原来的return返回值
----------
作为笔试题目比较......
----------
6、继承某个类时,其中方法有抛出异常的话,重写这个方法的的异常可以不写,或者抛出的异常只能是父类方法中异常中的子类(也相当于异常已有继承关系)