2020年9月4日 异常处理

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("最终块");
        }
    }
}
原文地址:https://www.cnblogs.com/douyunpeng/p/13614466.html