•什么是异常
•如何处理异常
•try catch finally
•throw
•throws
•自定义异常
•异常链
异常本质上是程序上的错误,意外或者例外
编译期间的错误
1、{}没有正常配对
2、少了 ;
3、关键字编写错误。。。。。
运行时异常
•String str = null; sysout(str.length());
•数组下标越界
•算术运算除数为0
•类型转换异常。。。。。。
Java通过throwable以及它的子类对异常进行描述
throwable
•Error:是程序无法处理的错误,表示运行应用程序中较严重的问题。
(error发生的错误一般和我们操作者没关系的,是Java虚拟机发生了问题)
•虚拟机错误:
•内存溢出
•线程死锁
•exception是程序本身可以处理的异常
•非检查异常 Unchecked Exception
•编译器不要求强制处理的异常 这些异常在编译阶段是不报错的,但是在运行阶段时报错的。
•空指针异常 nullpointerexception
•数组下标越界异常 Arrayindexoutofboundsexception
•算数异常 Arithmeticexception
•类型转换异常 Classcastexception
•检查异常 Checked Exception 编译器要求必须处理的异常
•Ioexception IO异常
•SQLexception SQL异常
异常处理
•捕捉异常
•出现异常时,Java提供一系列的处理机制对其进行处理
•抛出异常 程序出现异常时,会产生异常对象,将对象作抛出去的处理
•异常对象:异常类型、异常出现的程序状态等。。。
异常处理的5个关键字
try catch finally throw throws
捕获异常
1、try 执行可能产生异常的代码
2、catch 捕获异常
3、finally 无论是否发生异常,代码总能执行
声明异常
1、throws 声明可能抛出的异常
抛出异常
1、throw 手动抛出异常
try后可接0个或多个catch块,如果没有catch块,那也必须跟一个finally块
组合使用
1、catch finally 不可以
2、try finally可以的
3、try catch 可以的
try catch
try catch finally
try catch catch catch
try finally
ide: eclipse myeclipse intellij idea
使用多重catch块包裹
return在try catch块里如何使用?
throw和throws
可以通过throws声明将要抛出何种类型的异常,通过throw将产生的异常抛出
throws:如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句声明抛出异常。
使用throw抛出异常对象
•throw用来抛出一个异常
例子;throw new IOException();
•throw抛出的只能够是可抛出类throwable或者其子类的实例对象
例子:throw new String(“出错啦”);
对于抛出异常要知道有以下2点好处:
•规避可能出现的风险
•完成一些程序逻辑
自定义异常
•使用Java 内置的异常类可以描述编程时出现的大部分异常情况
•也可以自定义异常描述特定业务产生的类型
•所谓的自定义异常,就是定义一个类,去继承Throwable或者它的子类
异常链
有时候会捕获一个异常后抛出另一个异常
异常链在新抛出的异常会导致前面的异常信息丢失的情况
如何解决带出前面的异常信息
方案1:
方案2:
异常链
有时候会捕捉一个异常后再抛出另一个异常
将异常发生的原因一个传一个串起来
将底层的异常信息传递给上层,这样的样式组曾输出
实际应用的经验和总结:
•处理运行时异常,采用逻辑去合理规避同时辅助以try catch形式
•在多重catch块里面,建议尽量添加catch(Exception e){}
•对于不确定的代码,可以添加try catch处理
•尽量处理异常,不要简单的使用e.printstrace();
•具体如何处理,根据业务逻辑和不同的异常类型决定
•尽量加上finally语句块取释放占用的资源的。
•finally{ str.close(); }