异常 Exception
Error(错误):java虚拟机无法解决的问题,必须崩溃。 如:StackOverFlow, outOfMemory
Exception(异常): 分为 运行时异常[程序运行时发生的异常] 和 编译时异常[编译时,编译器检查出的异常]
运行时异常:RuntimeException
1. NullPointerException
2. ArithmeticException
3. ArrayIndexOutOfBoundsException
4. ClassCastException
5. NumberFormatException
编译异常: 必须处理,否则代码无法通过编译
1. SQLException
2. IOException
3. FileNotFoundException
异常处理方式:
1. try-catch-finally(可省略)
2. throws
细节:
1. 在try 代码块中,如果出现异常了,则try块中异常后面的代码不再执行, 直接进入catch 块
2. 如果没有出现异常,则不会进入catch 块
3. finally 块中的代码无论try中的代码有无异常,都会被执行! 通常将 释放资源,关闭连接的代码放在finally块里。
4. 如果try 代码块里有多个异常, 就可以写多个catch 分别捕获, 但是必须把父类异常写在下面,子类异常写在上面
5. 也可以只使用 try-finally, 如果有异常出现,finally中的代码会继续执行,之后程序崩掉。 finally外的代码不会再执行
6. 子类重写父类的方法时,子类抛出的异常类型 必须是 父类抛出异常类型的子类或者和父类的相同!
这里f3() 报错的原因是: 因为f3方法抛出了一个 编译异常, 但是f1方法并没有处理,所以调用f3()报错。
如果f3方法抛出的是 运行异常,则不会报错; 所以如果抛出的是编译异常,f1方法必须throws 或者 try-catch
自定义异常:
需要继承RuntimeException,因为比较方便,无需在 出现该异常的方法中显示的写出throws
throw 和 throws 的区别: