捕获和抛出异常

package com.exception.demo01;

/**
 * @ClassName: Demo01
 * @Author: 南冥有猫不须铭
 * @Date: 2021/4/27-0:48
 * @Description: Error和Exception
 */
public class Demo01 {

    public static void main(String[] args) {
        new Demo01().a(); //new一个匿名内部类  //*Error

        System.out.println(11/0); //ArithmeticException
    }

    //错误(Error) 递归循环依赖
    public void a(){
        b();
    }
    public void b(){
        a();
    }
}

package com.exception.demo01;

/**
 * @ClassName: Test
 * @Author: 南冥有猫不须铭
 * @Date: 2021/4/27-23:57
 * @Description: 捕获和抛出异常
 */
public class Test {

    public static void main(String[] args) {

        try { // 一般情况下遇到异常,程序会停止,加了try、catch捕获之后,程序会正常地继续执行下去
            new Test().test(1,0);
        } catch (ArithmeticException e) {
            e.printStackTrace();
        }
    }

    //假设这个方法中,处理不了这个异常。 在方法上抛出异常(throws)
    public void test(int a,int b) throws ArithmeticException{
        if(b==0){ //throw  throws
            throw new ArithmeticException();//主动地抛出异常,一般在方法中使用(throw)
        }
        System.out.println(a/b);
    }

        /*
        //假设要捕获多个异常: 从小到大!

        try {   //try 监控区域  (代码块)    try中的代码出现异常,捕获区域就会去捕获异常

            //System.out.println(a/b); // ArithmeticException异常 ---> "程序出现异常,变量b不能为0"

            //new Test().a(); // *Error错误

        }catch(Error e){  //catch(想要捕获的异常类型 _)    捕获异常,若出现异常,执行代码块中内容
            System.out.println("Error");
        }catch (Exception e){
            System.out.println("Exception");
        }catch (Throwable t){ // Throwable ---> 最大的异常(包括Error和Exception)     写catch捕获异常时,要把最大的异常放在最下面(小的异常在上面,层层递进)
            System.out.println("Throwable");
        } finally { //finally 处理善后工作 (无论程序出不出异常,都要执行finally中的内容)
            System.out.println("finally");
        }
         */

        //finally 可以不要,但try 、catch 一定要有
        //finally:假设一些IO流,或者和资源相关的东西,关闭操作 放在finally中(善后)


    /*
    public void a(){ //互相调用 错误
        b();
    }
    public void b(){
        a();
    }
    */


}

package com.exception.demo01;

/**
 * @ClassName: Test2
 * @Author: 南冥有猫不须铭
 * @Date: 2021/4/28-1:34
 * @Description: 捕获和抛出异常
 */
public class Test2 {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;

        //快捷键:(选中代码后)Ctrl + Alt + t --->  选择对应的方法(try/catch/finally),自动包裹代码
        try {
            System.out.println(a/b);
        } catch (Exception e) {
            System.exit(1); // 可以自己加逻辑判断,让程序结束
            e.printStackTrace(); //打印错误的栈信息
        } finally {
        }
    }
}

上一篇:synchronized和reentrantlock的区别


下一篇:学习Python 十二 (异常)