一文带你理清Java异常体系,提高开发效率

一、概述

我们在项目开发的过程中使用异常是必不可少的事情,那么异常会带来哪些好处呢?

我们知道异常带来的最明显的好处是,它能够降低错误处理代码的复杂度。不使用异常的话,我们就必须检查一些特定的错误,并且在程序中许多地方都要去处理它。而当我们使用异常的时候,就不需要在方法的调用处进行检查,因为异常机制能够捕获到这个错误信息。然后我们只需要在一个地方处理这个错误。这种处理方式不仅能节省代码量,而且还能把“描述在正常执行过程中做什么事”的代码(try)和“出了问题怎么办”的代码(catch)之前进行分离。

总之,与之前处理错误的方法相比较,异常机制让代码可读性更强,使编码更有条理性,调试更加有序。

在程序员的开发过程中,由于程序员没有考虑的十分周全,或者遗漏掉某些特定的场景,而会产生一系列的bug,如系统中存在的脏数据、打开并不存在的文件、进行相除运算分母为0等情况。为了能够处理这些在程序运行过程中出现的错误,Java专门引入了异常类。

 

二、异常产生的原因及使用原则

 

异常产生的原因主要有三种情况,详情如下:

    1、Java内部错误发生异常(Java虚拟机发生了内部错误)。

    2、编写的程序代码中产生的异常,例如空指针异常、类找不到异常、IO异常以及数组越界异常等。这种异常称为未检査的异常,一般需要在代码里面处理这些异常。

    3、通过throw语句抛出的异常,这种异常称为检査的异常,一般用来告知该方法的调用者一些必要的信息。


Java是通过面向对象的方式来处理异常的。在该方法的运行过程中,一旦发生了异常,则该方法就会产生一个代表该异常的对象,并且把它交给运行时的系统,运行时系统寻找相应的代码来处理这一异常。

我们把生成的异常对象提交给运行时系统的过程称为拋出异常即throw。运行时系统在方法的调用栈中查找,一直到能够找到处理该类型异常对象的时候,这一个过程称为捕获异常即catch。

Java异常会强制要求用户去考虑程序的强健性以及安全性。如果将异常处理应用来控制程序的正常流程是不合理的,他的主要作用就是为了捕获程序运行过程中发生的异常并进行相应处理。

 

我们编写代码处理某个方法可能出现的异常,应该遵循以下三个原则:

    1、在可能出现异常的方法中使用try catch语句来捕获异常。

    2、如果一个方法被覆盖时,那么覆盖它的方法必须拋出相同的异常或异常的子类。

    3、如果父类抛出多个异常时,那么覆盖方法必须拋出那些异常的一个子集,而不能拋出新的异常。

 

三、Java中常见的异常类型及体系结构图

 

异常体系结构图:

 

Java的异常主要分为两大类:

 

1、Checked异常

    是编译器在编译时进行校验的,通过throws语句或者try{}cathch{} 语句块来处理检测异常。编译器会分析哪些异常会在执行一个方法或者构造函数的时候抛出。

 

2、Unchecked异常(运行时异常RuntimeException)

    这种异常不需要编译器来检测。RuntimeException是所有可以在运行时抛出的异常的父类。一个方法除了要捕获异常外,如果它执行的时候可能会抛出RuntimeException的子类,那么它就不需要用throw语句来声明抛出的异常。

举个栗子,我们来看下面的这段代码:

程序并没有报错,但是我们都知道0是不能当做被除数的,当我们运行的时候会报如下的错

针对这样的情况我们该如何处理呢,正确的处理方式是捕获这个异常并处理,处理结果如下:

我们来运行这段代码,结果如下:

类似像上面程序中出现的异常情况,就叫运行异常。运行异常一般都可以正常运行,只有在特定的场景下会发生异常。只要我们对运行异常类有一个清晰的认识,就能解决大多数程序上面的问题了。 

原创声明:本文为【Java学习提升】原创博文,转载请注明出处。

本文来源于公众号:【Java学习提升】 专注于Java领域技术分享,Java知识体系学习、分享面试经验,让我们结伴而行,共同成长!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark是一个快速通用的集群计算框架,它可以处理大规模数据,并且具有高效的内存计算能力。Spark可以用于各种计算任务,包括批处理、流处理、机器学习等。本文将你了解Spark计算框架的基本概念和使用方法。 一、Spark基础概念 1. RDD RDD(Resilient Distributed Datasets)是Spark的基本数据结构,它是一个分布式的、可容错的、不可变的数据集合。RDD可以从Hadoop、本地文件系统等数据源中读取数据,并且可以通过多个转换操作(如map、filter、reduce等)进行处理。RDD也可以被持久化到内存中,以便下次使用。 2. Spark应用程序 Spark应用程序是由一个驱动程序和多个执行程序组成的分布式计算应用程序。驱动程序是应用程序的主要入口点,它通常位于用户的本地计算机上,驱动程序负责将应用程序分发到执行程序上并收集结果。执行程序是运行在集群节点上的计算单元,它们负责执行驱动程序分配给它们的任务。 3. Spark集群管理器 Spark集群管理器负责管理Spark应用程序在集群中的运行。Spark支持多种集群管理器,包括Standalone、YARN、Mesos等。 二、Spark计算框架使用方法 1. 安装Spark 首先需要安装Spark,可以从Spark官网下载并解压缩Spark安装包。 2. 编写Spark应用程序 编写Spark应用程序通常需要使用Java、Scala或Python编程语言。以下是一个简单的Java代码示例,用于统计文本文件中单词的出现次数: ```java import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import java.util.Arrays; import java.util.Map; public class WordCount { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("WordCount").setMaster("local"); JavaSparkContext sc = new JavaSparkContext(conf); JavaRDD<String> lines = sc.textFile("input.txt"); JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator()); Map<String, Long> wordCounts = words.countByValue(); for (Map.Entry<String, Long> entry : wordCounts.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); } sc.stop(); } } ``` 3. 运行Spark应用程序 将编写好的Spark应用程序打包成jar包,并通过以下命令运行: ```bash spark-submit --class WordCount /path/to/wordcount.jar input.txt ``` 其中,--class参数指定应用程序的主类,后面跟上打包好的jar包路径,input.txt是输入文件的路径。 4. 查看运行结果 Spark应用程序运行完毕后,可以查看应用程序的输出结果,例如上述示例中的单词出现次数。 以上就是Spark计算框架的基本概念和使用方法。通过学习Spark,我们可以更好地处理大规模数据,并且提高计算效率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值