简明 Java 错误处理机制

用个最简单的例子来展示为什么需要错误处理,以及怎么用。

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class ThrowsTest {
    public static void main(String[] args) throws FileNotFoundException {

        try {
            throwsTest();
        } catch (FileNotFoundException e) {
            System.out.println("File is not found!");
            throw e;
        } catch (NullPointerException e) {
            System.out.println(e);
        }

        System.out.println("hi");
    }

    public static void throwsTest() throws FileNotFoundException,NullPointerException {
        new FileInputStream("shiyanlou.file");

        throw new NullPointerException("have a try!");

    }
}

上面的代码中, throwsTest 抛出了两个 exception:一个错误是由它调用的方法 FileInputStream 抛给它的,另一个是它自己抛出的。

在 main 函数中,通过 try-catch 来捕捉这两个 exception 并处理。

基本原则是:

  1. 抛出的 exception 肯定会被 catch。

  2. catch 到的 exception 可以当场处理掉,则 exception 被终止。

  3. catch 到的 exception 也可以再 throw 给上一级调用者处理。

  4. 如果一级级往上抛,最终由 JVM 来 catch 的话,就是直接终止程序并打印 stack frame 错误。

我们使用 exception 的核心目的,就是为了避免第 3 中情况发生。

可以想象,如果因为某个文件没有找到,我们的软件就直接崩溃了,这是件很难接受的事情;从使用角度来讲,大不了重新指定路径。

所以,我们要努力做好前 3 件事。

前辈总结的 exception 使用心得:

简明 Java 错误处理机制

exception 的继承关系:

简明 Java 错误处理机制

发挥问题:是不是可以自己定义 Throwable ?

Original: https://www.cnblogs.com/pied/p/11023687.html
Author: Biiigfish
Title: 简明 Java 错误处理机制

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/539252/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MarkDown学习

    MarkDown学习 二级标题 三级标题 四级标题 MarkDown语法中’#’代表一级标题最高支持六级标题 字体 helloWord!//在字体两边各加*…

    Java 2023年6月14日
    074
  • docker 命令记录

    1、docker 安装 docker pull 名称:版本号 示例:docker pull mysql:5.7 2、docker 镜像查看 docker images:查看 doc…

    Java 2023年6月5日
    060
  • 1

    1 posted @2022-09-25 23:44 山海自有归期 阅读(21 ) 评论() 编辑 Original: https://www.cnblogs.com/ljq202…

    Java 2023年6月7日
    085
  • [学习标准库]assert.h

    打算趁留在学校的最后一段时间好好补习一下一直以来都忽略掉的C/C++标准库,大概就是以头文件为单位了。以一个最简单的头文件入手,然后逐渐展开来……第一个头文…

    Java 2023年6月5日
    074
  • 代码审查:从 ArrayList 说线程安全

    本文从代码审查过程中发现的一个 ArrayList 相关的「线程安全」问题出发,来剖析和理解线程安全。 案例分析 前两天在代码 Review 的过程中,看到有小伙伴用了类似以下的写…

    Java 2023年6月5日
    0114
  • Convert Set to array in Java

    This post will discuss how to convert a set to an array in plain Java, Java 8, and the Gua…

    Java 2023年5月29日
    072
  • 创建SpringCloud项目

    一、创建父工程 1、选择maven,直接–>next 2、填写项目相关的信息,next 3、填写项目名和项目位置–>finish 4、修改pom…

    Java 2023年5月30日
    0107
  • Export大数据量导出和打包

    Export大数据量导出和打包 项目需求 ​ 导出生成大批量数据的文件,一个Excel中最多存有五十万条数据,查询多余五十万的数据写多个Excel中。导出完成是生成的多个Excel…

    Java 2023年6月7日
    061
  • Java分布式IP限流和防止恶意IP攻击方案

    限流是分布式系统设计中经常提到的概念,在某些要求不严格的场景下,使用Guava RateLimiter就可以满足。但是Guava RateLimiter只能应用于单进程,多进程间协…

    Java 2023年5月29日
    077
  • Eclipse Java EE 创建 Dynamic Web Project

    1. 创建一个web工程,此处用eclipse创建(如果对创建web工程很熟悉,可以不看的,本文目的是做一个记录) 1) 打开新建工程对话框,选择Dynamic web Proje…

    Java 2023年5月29日
    0105
  • 1NF | 2NF | 3NF的区分以及什么是函数依赖、部分函数依赖、值传递依赖(最详细的讲解1NF、2NF、3NF的关系)

    1NF | 2NF | 3NF的区分以及什么是函数依赖、部分函数依赖、值传递依赖 符合3NF一定符合2NF、一定符合1IF 简单区分。2NF不存在部分函数依赖,3NF不存在传递函数…

    Java 2023年6月13日
    068
  • 二进制转换与位运算

    在应用程序常用的进制包含 二进制 八进制 &am…

    Java 2023年6月16日
    081
  • Java事务失效

    问题复现,用伪代码复现问题! 事务配置文件 controller层代码 /** * excel批量导入信息 */ @RequestMapping(path="/pre/p…

    Java 2023年6月8日
    077
  • Git 使用入门

    学习之前,要明白一个概念: 版本控制 什么是版本控制 版本迭代,新的版本,需要版本管理器 版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或…

    Java 2023年6月9日
    073
  • 【碎】@Value 注解

    注意lombok和spring posted @2022-09-16 14:12 HypoPine 阅读(6 ) 评论() 编辑 Original: https://www.cnb…

    Java 2023年6月15日
    083
  • 红黑树添加删除

    上一篇写了234树对比红黑树,和红黑树某些情况需要调整的原因,这篇就只写红黑树的添加和删除 红黑树 JAVA技术交流群:737698533 性质 每个节点要么红色要么黑色 根节点是…

    Java 2023年6月6日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球