JavaSE知识点回顾


声明:以下内容参考https://how2j.cn/,仅供个人回顾基础知识点。


一、什么是异常?

定义: 导致程序的正常流程被中断的事件,叫做异常。

二、Java的异常处理办法

关键词:try,catch,finally,throws.,throw

代码中出现异常时,通常有两种处理方法:1.用try…catch进行捕获处理;2.不处理,在方法声明上把该异常用throws抛出去。

1.try…catch…finally

举例来说:当我们试图打开d盘目录下一个不存在的文件

代码如下(示例):

...
File f = new File("d:/LOL.exe");
try {
     System.out.println("试图打开 d:/Onmyoji.exe ");
     //不处理该异常,就会有编译错误。
     new FileInputStream(f);//Unhandled exception: java.io.FileNotFoundException
     System.out.println("打开成功");
 } catch (FileNotFoundException e) {
     System.out.println("d:/Onmyoji.exe 不存在");
     e.printStackTrace();
 } 
 ...

有时候,一段代码中会抛出多种异常,此时,有两种处理方法:
一是分别进行catch:

...
File f = new File("d:/Onmyoji.exe");
try {
     System.out.println("试图打开 d:/Onmyoji.exe ");
     //不处理该异常,就会有编译错误。
     new FileInputStream(f);//Unhandled exception: java.io.FileNotFoundException
     System.out.println("打开成功");
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
     Date date = sdf.parse("20210302");
} catch (FileNotFoundException e) {
    System.out.println("d:/Onmyoji.exe 不存在");
    e.printStackTrace();
} catch (ParseException e) {
    System.out.println("日期格式解析错误");
    e.printStackTrace();
}
...

二是把多个异常,放在一个catch里统一捕捉,但在判断具体异常类型时需要用instanceof进行判断:

...
File f = new File("d:/Onmyoji.exe");
try {
     System.out.println("试图打开 d:/Onmyoji.exe");
     new FileInputStream(f);
     System.out.println("打开成功");
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
     Date d = sdf.parse("20210302");
} catch (FileNotFoundException | ParseException e) {
    if (e instanceof FileNotFoundException)
        System.out.println("d:/Onmyoji.exe不存在");
    if (e instanceof ParseException)
        System.out.println("日期格式解析错误");

    e.printStackTrace();
}
...

需要注意的是finally。事实上,不管是否catch到异常,finally代码块总会执行,分析相关源代码可以发现,finally代码块通常是最后执行的。

/**
 * @description 练习:异常处理
 * 假设有一个方法 public int method(), 会返回一个整数
 * 在这个方法中有try catch 和 finally.
 * try 里返回 1
 * catch 里 返回 2
 * finally 里 返回3
 * 那么,这个方法到底返回多少?
 */
public class TestException2 {
    public static void main(String[] args){
        System.out.println(method());//3
    }

    private static int method(){
        try{
            //int i = 2 / 0;
            return 1;
        }catch (Exception e){
            e.printStackTrace();
            return 2;
        }finally {
            return 3;
        }
    }
}

2.throws/throw

首先,需要了解throws和throw的区别:
(1)throws出现在方法声明上,而throw往往存在于方法体中;
(2)throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某个异常对象。

代码如下(示例):

public class TextException {
    public static void main(String[] args){
        metho![在这里插入图片描述](https://img-blog.csdnimg.cn/20210302152516578.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NodVllbw==,size_16,color_FFFFFF,t_70)
d();
    }

    private static void method(){
        try{
            method2();
            System.out.println("打开成功");
        }catch(FileNotFoundException ffe){
            System.out.println("d:/Onmyoji.exe 不存在");
            ffe.printStackTrace();
        }
    }

    private static void method2() throws FileNotFoundException{
        File f = new File("d:/Onmyoji.exe");
        System.out.println("试图打开 d:/Onmyoji.exe ");
        new FileInputStream(f);//Unhandled exception: java.io.FileNotFoundException
    }
}

三、Java异常的分类

在这里插入图片描述

如上图所示,异常一般分为三种:1)CheckedException,必须进行处理的异常;2)RuntimeException,运行时异常,不是必须进行try…catch的异常;3)Error,系统级别的异常,与运行时异常一样,错误也不要求强制捕捉。

四、Java Throwable接口

在这里插入图片描述

Throwable是类,Exception和Error都继承了该类
所以在捕捉的时候,也可以使用Throwable进行捕捉
如图: 异常分Error和Exception
Exception里又分运行时异常和可查异常。

五、自定义异常

类似Java内部帮我们定义好的异常,当进行自定义时,只需要正常声明,调用,利用好throw,throws,try…catch…finally等进行异常处理即可。


总结

文章主要简单了解了一下异常的基本概念、分类,以及如何处理等,并没有对底层源码进行深入分析。如有必要,后面会继续进行补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值