本文共 3182 字,大约阅读时间需要 10 分钟。
Throwable(最顶层) Error:出现的不能够处理的严重问题 Exception:可以处理的问题
就是java程序在运行时期发生的问题。
在Java中,把异常信息封装成了一个类。当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置、原因等)。 在Java中使用Exception类来描述异常。 Exception类继承自Throwable这个类,Throwable类也是异常的最顶层类,其下有一个和Exception类同级的类Error,Error表示java程序在运行过程中出现的错误
,也就是说,只有修改代码才能够解决 try { // 需要被检测的语句。}catch(异常类 变量) { // 异常的处理语句}finally { // 一定会被执行的语句。}
通过try…catch来对一场进行捕捉,将有可能发生异常的代码写入try的代码块中,如果发生异常,则执行catch代码块中的内容,如果try中代码没有发生异常,则不会执行catch代码块中的内容,但是finally代码块中的内容,不论有没有异常发生,都会被执行,按照顺序执行的方式
- try…catch的执行顺序:首先执行try语句 如果发现异常,异常下面的代码不再执行,直接跳入catch语句中,catch语句结束后,整个try...catch结束 如果没有发现异常,try语句执行结束后,try...catch直接结束, 不再执行catch语句,然后执行finally中内容
权限修饰符 返回值类型 方法名(形参列表) throws 异常类型1,异常类型2….{}
void show() { // 不用throws try{ throw new Exception();// 产生异常,直接捕获处理 }catch(XxxException e){ // 处理方式 }catch(YyyException e){ // 处理方式 }catch(ZzzException e){ // 处理方式 }}
注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。
String getMessage(); // 返回此 throwable 的详细消息字符串String toString(); // 返回此 throwable 的简短描述void printStackTrace(); // 打印异常的堆栈的跟踪信息
public static void main(String[] args) { try { System.out.println(2 / 0); } catch (ArithmeticException e) { // String getMessage() : 原因 System.out.println(e.getMessage()); // 打印结果:/ by zero // String toString() 类型和原因 System.out.println(e.toString()); // 打印结果:java.lang.ArithmeticException: / by zero // void printStackTrace():类型原因和位置 e.printStackTrace(); /* 打印结果:java.lang.ArithmeticException: / by zero * at com.bsw.exceptionDemo.ExceptionDemo.main(ExceptionDemo.java:6) */ }}
try { 代码} catch(异常类型 异常变量) { 异常处理语句} finally { //释放资源的代码}
public static void main(String[] args) throws MyExecption, MyExecption2 { int i = 10; if (i < 0) { throw new MyExecption("这个值小于0"); } else { throw new MyExecption2("这个值大于0"); }}// 自定义异常类2public class MyExecption2 extends Exception { public MyExecption2(String string) { System.out.println(string); }}// 自定义异常类1public class MyExecption1 extends Exception { public MyExecption1(String string) { System.out.println(string); }}
public void method(){ System.out.println(“递归的演示”); // 在当前方法内调用自己 method();}
public static void main(String[] args) { System.out.println(jiecheng(2));}public static int jiecheng(int i) { if (i == 1) { return 1; } else { return i * jiecheng(i - 1); }}