Day08 JavaSE异常机制

JavaSE 异常机制

一、什么是异常?

异常指程序中出现的不期而至的各种情况
如:文件找不到、网络连接失败、非法参数等。

  • 简单分类
    • 检查性异常:用户错误或问题引起的异常,无法预见。
    • 运行时异常:可以捕获,也可不处理
    • 错误ERROR
  • Java把异常当作对象来处理,超类:java.lang.Throwable
    • Error:JVM一般会选择终止线程。
    • Exception:在程序中尽可能的处理异常。

二、异常处理机制

1 捕获异常

使用代码块

try(){//try监控区域

}catch(){// catch(想要捕获的异常类型)捕获异常

}finally{ //处理善后工作,可以不要finally,可用在IO,资源关闭等地方,表示始终执行。

}

可使用快捷键: command+alt+T

  • 案例展示一:(1/0异常捕获)
package com.exception;

public class Demo01 {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        try { //try监控区域
            System.out.println(a/b);
        }catch (ArithmeticException e){ //捕获异常
            System.out.println("程序异常!变量b不能为零");
        }finally { //处理善后异常
            System.out.println("finally");
        }
    }
}
  • 案例展示二:(多个异常捕获)
package com.exception;
//异常捕获要从小到大捕获,不可从大到小,否则会覆盖!
public class Demo01 {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        try { //try监控区域
            System.out.println(a/b);
        }catch (Error e){
            System.out.println("Error");
        }catch (Exception e){
            System.out.println("Exception");
        }catch (Throwable e){ //捕获异常
            System.out.println("Throwable");
        }finally { //处理善后异常
            System.out.println("finally");
        }
    }
}

2 抛出异常

  • 注意throw 和throws的不同
package com.exception;

public class Demo01 {
    public static void main(String[] args) {
        try {
            new Demo01().test(1,0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //假设此方法中,处理不了这个异常,则在方法上抛出异常。
    public void test(int a, int b) throws ArithmeticException{
        if (b==0){ //注意throw和throws的区别
            throw new ArithmeticException();//主动抛出异常,一般用在方法中
        }
    }
}

3 自定义异常

用户可以自己定义异常,只需继承Exception类即可。

案例展示:

package com.exception;

//自定义异常类:接收数据+打印异常信息
public class MyException extends Exception{

    //传递数组:若该数字大于10,则抛出异常
    private int detail;

    public MyException(int a) {
        this.detail = a;
    }

    //toString:异常的打印信息
    @Override
    public String toString() {
        return "MyException{"+ detail +
                '}';
    }
}
package com.exception;
//测试类
public class Test {
    //可能会存在异常的方法

    static void test(int a ) throws MyException{
        System.out.println("传递的参数为: "+ a);
        if (a>10){
            throw new MyException(a);//定义何时抛出
        }
        System.out.println("OK!");
    }

    public static void main(String[] args) {
        try {
            test(20);
        } catch (MyException e) {
            System.out.println("MyException=>"+e);
        }
    }
}

Conclusion:

  • 处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理。
  • 在多重catch块后面,可以加一个catch(Exception)来处理可能遗漏的异常。
  • 对于不确定代码,也可以加try-catch。
  • 尽量添加finally语句快去释放占用的资源。IO~ Scanner~

写在最后

出现在别人的生活里要想一份礼物!

To Demut and Dottie!

发布了32 篇原创文章 · 获赞 39 · 访问量 1739

猜你喜欢

转载自blog.csdn.net/qq_44958172/article/details/104636092