知识点小结–异常
1.异常 try…catch
-
分类:
- 异常(Exception)编译时异常/运行时异常
-
错误(Error)无法解决
-
1.try+catch
程序的流程是:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句2.try+catch+finally
程序的流程是:运行到try块中,如果有异常抛出,则转到catch块,catch块执行完毕后,执行finally块的代码,再执行finally块后面的代码。如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行finally块后面的语句
3.try+finally
程序的流程是:运行到try块中,如果有异常抛出的话,程序转向执行finally块的代码。那么finally块后面的代码还会被执行吗?不会!因为你没有处理异常,所以遇到异常后,执行完finally后,方法就已抛出异常的方式退出了。 这种方式中要注意的是,由于你没有捕获异常,所以要在方法后面声明抛出异常
2.异常 throws
- 抛出异常类
- 不知道/不想处理异常,将异常抛出给处理者
- 子类抛出异常不能高于父类,RunTimeException 例外,原因待解
- 在主方法调用带throws的方法要使用try…catch包装
3.异常 thorw
- 抛出异常对象
-
模拟虚拟机处理异常的方式
原理为 e.printStackTrace
StackTraceElement[] stackTrace =e.getStackTrace();//堆栈轨迹 StackTraceElement element=stackTrace[0]; String fileName =element.getFileName(); String className =element.getClassName(); String methodName =element.getMethodName(); int lineNumber =element.getLineNumber(); System.err.format("Exception in thread \"%s\"%s : %s\r\n" + "at %s.%s(%s:%d)",methodName,className,e.getMessage(), className,methodName,fileName,lineNumber); //结束程序 System.exit(0); //运行结果 Exception in thread "main"zzy.day14.ExceptionDome : / by zero at zzy.day14.ExceptionDome.main(ExceptionDome.java:9)
-
throw和throws的区别
- throw抛出的是异常对象,throws声明的是异常类;
- throw只能够抛出一个对象,throws可以声明多个异常类;
- throw表示异常已经发生,throws是一种异常的可能性;