异常:程序出现不正常 Exception的父类Throwable
严重问题:Error
问题:Exception 包括:编译期问题:不是RuntimeException的异常 运行期问题:RuntimeException
只有编译期的异常需要处理,其他的异常不处理。可能是代码的问题。
如果异常没有处理就会默认输出:异常的名称,原因,及问题的行号等输出到控制台
处理方式:try catch finally
另一种Throws抛出异常。
catch要先抓晓得异常,再抓大的异常。
异常的处理函数:string getMessage() 返回throwable的消息字符串
toString() 获取异常类名和异常信息,返回字符串,
printStackTrace()获取异常类名和异常信息,以及异常出现在程序中的位置,返回void
printStackTrace(PrintStream s) 通常用改方法将异常内容保存在日志文件中,以便查阅
throws 异常是自己处理不了,让调用者处理异常,
最终会用try catch处理掉异常。
编译期异常必须处理,运行时抛出后不需要处理。
throw异常,是不能处理需要要进行跳转时候进行。
throw new 异常类; 在方法内部抛出异常对象
如果后续程序继续运行就用try 如果不用继续,则用throws
finally 用于释放 资源
final 最终的意思,可以修饰类,类不能被继承,成员边变量,变量是常量,成员方法,方法不能被重写
finally是异常处理的一部分,用于释放资源,一般来说代码肯定会执行。除非在他之前JVM退出,
finalize()是个方法,Object垃圾回收器调用,用于回收垃圾。
如果catch里面有return语句,finally里面的语句会执行,并且在return语句之前执行,应为要想finally不执行,只有虚拟机退出
- public static int getInt() {
- int a=10;
- try {
- System.out.println(a/0);
- a=20;
- } catch (ArithmeticException e) {
- a=30;
- return a;
- /*
- * return a 在程序执行到这一步时候,这里不是return a,而是return30,这个返回路径就形成了
- * 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40
- * 再次回到以前的返回路径,继续走return 30
- *
- */
- }finally{
- a=40;
- }
- return a;
- }
复制代码
自定义异常,必须继承Exception或者RuntimeException。
自定义异常内部不需要处理,就继承就行了。