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 无论是否发生异常,代码总能执行
throw和throws
可以通过throws声明将要抛出何种类型的异常,通过throw将产生的异常抛出
throws:如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句声明抛出异常。
使用throw抛出异常对象
•throw用来抛出一个异常
例子;throw new IOException();
•throw抛出的只能够是可抛出类throwable或者其子类的实例对象
例子:throw new String(“出错啦”);
对于抛出异常要知道有以下2点好处:
•规避可能出现的风险
•完成一些程序逻辑
自定义异常
•使用Java 内置的异常类可以描述编程时出现的大部分异常情况
•也可以自定义异常描述特定业务产生的类型
•所谓的自定义异常,就是定义一个类,去继承Throwable或者它的子类
异常链
有时候会捕捉一个异常后再抛出另一个异常
将异常发生的原因一个传一个串起来
将底层的异常信息传递给上层,这样的样式组曾输出
实际应用的经验和总结:
•处理运行时异常,采用逻辑去合理规避同时辅助以try catch形式
•在多重catch块里面,建议尽量添加catch(Exception e){}
•对于不确定的代码,可以添加try catch处理
•尽量处理异常,不要简单的使用e.printstrace();
•具体如何处理,根据业务逻辑和不同的异常类型决定
•尽量加上finally语句块取释放占用的资源的。
•finally{ str.close(); }