我们在写代码的时候,经常出现一些小问题,那么为了方便我们处理这些问题,java为我们提供了异常机制
异常:不正常,我们在写代码的时候出现的编译或者运行时的错误
异常的体系结构:
Throwable(最顶层)
Error:出现的不能处理的严重问题
Exception:可以处理的问题
如:电脑坏了
系统中毒:重装系统(Erroe)
主板坏了:买一台新的(Exception)
1异常体系 & 异常处理
异常处理方式分为两种:
1、捕获处理:
捕获处理: try...catch语句 try{ 有可能出现问题的代码 } catch(ArithmeticException ae){ 处理异常; } try...catch的执行顺序 首先执行try语句 如果发现异常。异常下面的代码不再执行,直接跳入catch语句中,catch语句结束后,整个try...catch结束 如果没有发现异常 。try语句执行结束后,try..catch直接结束,不再执行catch语句
public class ExceptionDemo2 { public static void main(String[] args) throws Exception { try { System.out.println(1); //System.out.println(2 / 0); System.out.println(2); } catch(ArithmeticException ae) { System.out.println("除数不能为0"); } System.out.println(3); } }
2、抛出去:
当我们不想处理异常,或者没有能力处理的时候,我们可以选择抛出异常,谁调用方法谁处理异常
使用关键字throws在方法的声明出抛出异常
public class ExceptionDemo2 {
public static void main(String[] args) throws Exception {
function();
}
public static void function() throws Exception {
FileWriter fw = new FileWriter("a.txt");
}
如何让处理多个异常:
1、 可以使用多个try...catch语句
2、使用一个try和多个catch
注意:多个catch之间的顺序
1、 多个catch之间可以有子父类的关系
2、平级之间没有顺序关系
3、子父级有顺序关系。有父类一定要放在子类后面
public class ExceptionDemo3 {
public static void main(String[] args) {
try {
String s = null;
System.out.println(s.length());
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println("出现数组越界了");
}
catch(NullPointerException e) {
System.out.println("出现空指针了");
}
catch(Exception e) {
System.out.println("出现异常了");
}
}
2Throwable常用方法&自定义异常
2.1 Throwable常用方法
String getMessage() 返回此 throwable 的详细消息字符串 简称原因
String toString() 返回此 throwable 的简短描述 简称类型和原因
void printStackTrace() 打印异常的堆栈的跟踪信息 简称:类型原因和位置
2.2 finally的概述和应用场景
finally -- finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止
finally:组合try...catch使用,用于释放资源等收尾工作,无论try...catch语句 ,finally的代码一定会执行
try{
有可能出现问题的代码
}catch(异常对象){
处理异常;
}finally{
释放资源;
清理垃圾;
}
public class ExceptionDeom5 {
public static void main(String[] args) {
//method();
FileWriter fw =null;
try {
System.out.println(2/0);
fw =new FileWriter("c.txt");
fw.write("hello");
fw.write("java");
//System.out.println(2/0);
fw.write("world");
//fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//释放资源
try {
if(fw !=null) {
fw.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private static void method() {
try {
System.out.println(2/1);
} catch (ArithmeticException e) {
System.out.println("除数不能为0");
}finally {
System.out.println("清理垃圾");
}
}
}