package com.atguigu.test04; /* * 一、异常的处理方式:try...catch * 1、语法格式: * try{ * 可能发生异常的代码 * }catch(异常类型1 异常对象名){//异常对象名绝大多数都是写e * 处理这个异常的代码 * }catch(异常类型2 异常对象名){//异常对象名绝大多数都是写e * 处理这个异常的代码 * }catch(异常类型3 异常对象名){//异常对象名绝大多数都是写e * 处理这个异常的代码 * } * 。。。。 * * 2、异常对象的常用方法 * (1)e.printStackTrace(); * 打印异常的详细信息,包括追踪跟踪信息,即这个异常对象一路经过了哪些方法 * (2)e.getMessage(); * 返回异常对象中简单的错误信息提示 * * 3、打印异常/错误信息 * System.err.println(xx);打印错误信息 * * System.out.println(xx);打印正常信息 * * 4、多个catch分支,如何匹配和执行的? * 从上到下依次判断,一旦有一个满足,后面就不看了。 * * 建议:如果多个catch中的异常类型有大小包含关系,那么小的在上,大的在下,如果没有大小包含关系,顺序随意。 * * 5、如果catch,可以捕获try中发生的异常,那么程序,会从try...catch下面的代码继续运行 ,不会崩溃。 * 如果catch无法捕获try中发生的异常,那么就会导致当前方法结束,并把异常对象抛出调用者, * 如果调用者可以处理,那么从调用者处理代码的后面继续运行,否则继续往上抛,最终到达JVM,程序就崩溃了。 */ public class TestTryCatch { //从命令行接收2个整数,求商 public static void main(String[] args) { try { int a = Integer.parseInt(args[0]);//第一个参数赋值给a变量 int b = Integer.parseInt(args[1]);//第二个参数赋值给b变量 int shang = a/b; System.out.println(a +"/" + b + "=" + shang); } catch (NumberFormatException e) { e.printStackTrace();//标准的 // System.err.println(e.getMessage()); // System.out.println(e.getMessage()); } catch (ArrayIndexOutOfBoundsException e){ e.printStackTrace(); } catch (ArithmeticException e){ e.printStackTrace(); } catch (Exception e){ e.printStackTrace(); } System.out.println("其他的代码...."); } }
package com.atguigu.test04; /* * 二、try..catch的形式二 * try{ * 可能发生异常的代码 * }catch(异常类型1 异常对象名){//异常对象名绝大多数都是写e * 处理这个异常的代码 * }catch(异常类型2 异常对象名){//异常对象名绝大多数都是写e * 处理这个异常的代码 * }catch(异常类型3 异常对象名){//异常对象名绝大多数都是写e * 处理这个异常的代码 * } * 。。。。 * finally{ * 不管try中是否发生异常,也不管catch是否可以捕获异常,这里代码都必须执行 * } * * 一般用于编写释放资源,断开连接等代码 * * 特殊情况:可以没有catch部分 * try{ * * }finally{ * * } */ public class TestTryCatchFinally { public static void main(String[] args) { try { int a = 1; int b = 0; System.out.println(a/b); } catch (ArrayIndexOutOfBoundsException e) { e.printStackTrace(); } finally{ System.out.println("最终块"); } } }