赞
踩
异常指的就是程序在运行时出现错误时通知调用者的一种机制(运行时指的是程序已经编译通过得到 class 文件了,再由 JVM 执行过程中出现的错误)
try{ 有可能出现异常的语句; // 发生异常的代码,之后的代码是不会执行的 }[catch(异常类型 异常对象){ 出现异常后的处理行为; //e.printStackTrace(); 打印异常的信息 }][finally{ 异常的出口(用于处理善后工作, 会在最后执行(无论是否存在异常, finally中的代码一定都会执行到)) // 发生了异常会向上抛出,但是 finally 里面的代码永远会得到执行 // finally 里面适合做方法的资源关闭和收尾的工作 }] 其中 catch 和 finally都可以根据情况选择加或者不加。 则: try...catch 程序走到catch代码块,处理完毕后程序会继续执行 try...finally try...catch...finally try...catch...catch...finally
try{
return 3;
}catch(Exception e){ //方法遇到return就会形成返回值,后续在修改变量,不会改变返回值(假设finally中没有 return)
return 4;
}finally{
return 5; //finally 是唯一一个可以return一次之后还能 return 的代码块,可以修改方法的返回值
}
异常处理流程:
程序先执行 try 中的代码
如果 try 中的代码出现异常, 就会结束 try 中的代码, 看和 catch 中的异常类型是否匹配.
如果找到匹配的异常类型, 就会执行 catch 中的代码
如果没有找到匹配的异常类型, 就会将异常向上传递到上层调用者.
无论是否找到匹配的异常类型, finally中的代码都会被执行到(在该方法结束之前执行).
如果上层调用者也没有处理的了异常, 就继续向上传递.
一直到 main方法也没有合适的代码处理异常, 就会交给 JVM 来进行处理, 此时程序就会异常终止.
1.运行时的异常:可以编译通过,程序在运行期间报出来的异常;
2.编译期异常:这个异常必须要处理,否则没法编译通过。
Exception下面的子类除了 RuntimeException 以外都是编译期的异常。
在没有任何的处理的情况下异常对象会自动的抛给调用端,调用端接收到这个异常对象,
由于调用端也没有任何处理,继续向上抛出抛给jvm,jvm会打印这个异常信息。
try...catch 处理异常的特点:
1. try 内部发生异常下面的代码执行
2. 产生的异常对象被 catch 块里面的参数接收
3. catch 块未处理异常(如何处理要根据具体的业务要求)
4. 如果异常对象被catch未处理就不会向上抛出
5. 若干个异常对象被处理了,异常后面的代码就会正常的执行
6. 调用端不会感知到异常的产生(因为没有向上抛出异常对象),后面的代码正常执行
1、顶层类 Throwable 派生出两个重要的子类, Error 和 Exception
2、Error 指的是 Java 运行时内部错误和资源耗尽错误,应用程序不抛出此类异常,这种内部错误一旦出现,除了告知用户并使程序终止之外,再无能无力,这种情况很少出现
3、Exception 是我们程序猿所使用的异常类的父类
4、Exception 有一个子类称为 RuntimeException,又派生出很多我们常见的异常类
NullPointerException,IndexOutOfBoundsException等
1、自定义异常通常会继承自 Exception 或者 RuntimeException
2、继承自 Exception 的异常默认是受查异常
3、继承自 Error 或 RuntimeException 的异常默认是非受查异常
如果一段代码可能抛出受查异常,那么必须显式进行处理
显示处理:
a) 使用 try catch 包裹起来
b) 在方法上加上异常说明,相当于将处理动作交给上级调用者
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。