我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java什么是异常?

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java什么是异常?

什么是异常?

结构不佳的代码不能运行,这是Java的基本理念。

发现错误的理想时机是在编译期。然而,编译器并不能发现所有的错误,余下的问题就需要在程序运行时解决。这就需要错误能通过某种方式,把适当的信息 传递给特定的接收者处理。

Java中的异常处理的目的在于通过使用少量的代码来简化大型、可靠的程序的生成,通过此方式让你的应用中没有未处理的错误,而且它还带来了一个明显的好处:降低错误处理代码的复杂度。

异常,根据字面理解,有意外之意。把它置于代码层面来理解,即阻止了当前方法或作用域继续执行。异常是导致程序无法在其预期的执行中运行的事件。异常有三种类型——检查异常、错误和运行时异常。

在Java中,异常被当做对象来处理,其基类是Throwable。

Java中的异常类型

Java从Throwable直接派生出Exception和Error。其中Exception是可以抛出的基本类型,在Java类库、方法以及运行时故障中都可能抛出Exception型异常。Exception表示可以恢复的异常,是编译器可以捕捉到的;Error表示编译时和系统错误,表示系统在运行期间出现了严重的错误,属于不可恢复的错误,由于这属于JVM层次的严重错误,因此这种错误会导致程序终止执行。Exception又分为检查异常和运行时异常。

异常类的结构层次图如下:

1.png

典型的RuntimeException(运行时异常)包括NullPointerException, ClassCastException(类型转换异常),IndexOutOfBoundsException(越界异常), IllegalArgumentException(非法参数异常),ArrayStoreException(数组存储异常),AruthmeticException(算术异常),BufferOverflowException(缓冲区溢出异常)等;

2.png

非RuntimeException(检查异常)包括IOException, SQLException,InterruptedException(中断异常-调用线程睡眠时候),NumberFormatException(数字格式化异常)等。

而按照编译器检查方式划分,异常又可以分为检查型异常(CheckedException)和非检查型异常 (UncheckedException)。Error和RuntimeException合起来称为UncheckedException,之所以这么 称呼,是因为编译器不检查方法是否处理或者抛出这两种类型的异常,因此编译期间出现这种类型的异常也不会报错,默认由虚拟机提供处理方式。除了Error 和RuntimeException这两种类型的异常外,其它的异常都称为Checked异常。

3.png

Java如何处理异常

try-catch, try-finally, try-catch-finally

对于checked类型异常,我们要么对它进行处理,要么在方法头使用throws抛出。

public static void createFile() throws IOException{
    File file = new File("C:/test.txt");
    if(!file.exists()){
            file.createNewFile();
    }
}
public static void main(String[] args) {
    try {
        createFile();
    } catch (IOException ex) {
        // handle exception here
    }
}

关于catch需要注意的几点:

1)、参数的异常类型必须是Throwable类或者其子类。

2)、从上往下的catch语句,其参数类型必须按照从子类到父类顺序,因为一旦匹配到一个类型,就会忽略往后的catch。比如IOException必须放到Exception前面,否则编译器会报错。

3)、可以有一个或者多个catch语句,甚至如果有finally语句的情况下,可以没有catch语句,如try-finally。

想要捕获多个异常,可以使用多个catch语句,JDK7以后提供了另外一种方式:多重捕获(multi-catch)。

try{
    // other code
} catch (IOException | SQLException ex) {
    throw ex;  
}

4)、不要忽略异常。空的catch块会使异常达不到应有的目的,除非诸如关闭FileInputStream的时候,因为你还没有改变文件的状态,因此不必执行任何恢复动作,并且已经从文件中读取到所需要的信息,因此不用终止正在进行的操作。

关于finally需要注意的几点:

1)、finally中的代码总是会被执行,除非在执行try或者catch语句时虚拟机退出(System.exit(1))。

2)、finally块可以做一些资源清理工作,如关闭文件、关闭游标等操作。

3)、finally块不是必须的。

另外,如果在try和finally块中都执行了return语句,最终返回的将是finally中的return值。

异常链

常常想要在捕获一个异常后抛出另外一个异常,并且希望把原始异常信息保存下来,这就是异常链。在JDK1.4以后,Throwable子类在构造器 中可以接受一个cause对象作为参数,表示原始异常,通过这样把原始异常传递给新的异常,使得即使在当前位置创建并抛出了新的异常,也能通过这个异常链 追踪到异常最初发生的位置。

但在Throwable子类中,只有Error, Exception, RuntimeException三类异常类提供了带cause参数的构造器,其它类型的异常则需要通过initCause()方法。例如定义了CustomException类,可以这样使用:

CustomException cmex = new CustomException();
cmex.initCause(new NullPointerException);
throw cmex;

这样一来,CustomException继承自Exception或RuntimeException,就属于自定义异常了。

一般来说,自定义异常的作用有以下情形:

1)、将检查型异常转换为非检查型异常。

2)、在产生异常时封装上下文信息、定义异常码、收集环境对象,有利于信息的传递。

异常使用指南

在知道该如何处理的情况下才捕获异常。

自定义异常类型,用以封装所有的检查型异常。

在程序的边界进行异常捕获。如服务端相应客户端的请求,在出口处catch内部有可能产生的异常,并统一throw一个封装过的异常给客户端,免得暴露服务端敏感信息。

只针对异常的情况才使用异常。不要在所有的代码中习惯性地使用try-catch,因为这会影响性能。

抛出与抽象相对的异常。如果方法抛出的异常与它执行的任务没有明显的联系,这种情形会使人不知所措。为了避免这个问题,更高层的实现应该捕获 低层的异常,同时抛出可以按照高层抽象进行解释的异常,这种做法被称为异常转译(exception translation),如下:

try{
    // use lower-level abstraction to do our bidding
} catch(LowerLevelException ex){
    throw new HigherLevelException(...);
}

另外一种特殊的异常转译称为异常链,上面已作描述。如果低层的异常对于调试导致高层异常的问题非常有帮助,使用异常链就很合适。高层的异常提供访问方法(Throwable.getCause)来获得低层的异常。

每个方法抛出的异常要有文档描述。利用Javadoc的@throws标记,记录抛出每个异常的条件。如果一个方法可能抛出多个异常,不要使 用这些异常类的某个超类。如不要声明一个方法“throws Exception”或“throws Throwable”,这将没有任何指导信息。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

java什么是异常?

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java什么是异常?

什么是异常?结构不佳的代码不能运行,这是Java的基本理念。发现错误的理想时机是在编译期。然而,编译器并不能发现所有的错误,余下的问题就需要在程序运行时解决。这就需要错误能通过某种方式,把适当的信息 传递给特定的接收者处理。Java中的异常处理的目的在于通过使
java什么是异常?
2021-12-02

java什么是异常

Java中的异常(Exception)又称为例外,是一个在程序执行期间发生的事件,它中断正在执行的程序的正常指令流。为了能够及时有效地处理程序中的运行错误,必须使用异常类。在程序中,错误可能产生于程序员没有预料到的各种情况,或者超出程序员可控范围的环境,例如用
java什么是异常
2018-10-08

java中什么是异常?

异常是指程序运行过程中产生的错误,它出现在程序运行过程中。 Java中的异常(Exception)又称为例外,是一个在程序执行期间发生的事件,它中断正在执行的程序的正常指令流。为了能够及时有效地处理程序中的运行错误,必须使用异常类。【推荐学习:java课程】异
java中什么是异常?
2020-11-10

Java中异常是什么

这篇文章将为大家详细讲解有关Java中异常是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。基础概念  (1)异常:Java程序在运行时期发生的不正常情况。     Java就按照面向对象的思想对不正常
2023-06-20

java中什么是异常

Java 中的异常(Exception)又称为例外,是一个在程序执行期间发生的事件,它中断正在执行的程序的正常指令流。为了能够及时有效地处理程序中的运行错误,必须使用异常类。异常简介在程序中,错误可能产生于程序员没有预料到的各种情况,或者超出程序员可控范围的环
java中什么是异常
2019-02-18

java中的异常是什么

Java 中的异常(Exception)又称为例外,是一个在程序执行期间发生的事件,它中断正在执行程序的正常指令流。为了能够及时有效地处理程序中的运行错误,必须使用异常类。异常简介:在程序中,错误可能产生于程序员没有预料到的各种情况,或者超出程序员可控范围的环
java中的异常是什么
2019-06-19

Java中的NumberFormatException异常是什么

NumberFormatException是Java中的一个异常类,它表示当尝试将一个字符串转换为数字类型时发生了格式错误。当使用像Integer.parseInt()或Double.parseDouble()这样的方法将一个字符串转换为整
2023-08-08

Java内存异常原理是什么

本篇内容主要讲解“Java内存异常原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java内存异常原理是什么”吧!1 . 对象的创建过程关于对象的创建,第一反应是new关键字,那么本文就
2023-06-02

JAVA异常处理方式是什么

这篇文章主要讲解了“JAVA异常处理方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JAVA异常处理方式是什么”吧!1:try-catch结构:* 结构: * try{ * 可能出
2023-06-03

Java异常处理规则是什么

这篇文章主要讲解了“Java异常处理规则是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java异常处理规则是什么”吧!  举个例子,想象你有一个加载了这个接口的服务器应用:   pub
2023-06-03

Java异常处理的优劣是什么

本篇内容介绍了“Java异常处理的优劣是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先解释一些java异常处理中必须搞清楚的定义和机
2023-06-17

Java异常的学习心得是什么

这期内容当中小编将会给大家带来有关Java异常的学习心得是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一. 异常机制异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全
2023-06-17

invocationtargetexception是什么异常

JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。Java反射机制指的是在Java程序运行状态中,对于任何
invocationtargetexception是什么异常
2018-12-10

java中的不抛出的异常是什么

RuntimeException与其子类和错误(Error)不是必须要捕获或抛出。Java异常Throwable分为两类:Error和Exception,Error类是错误,程序本身不能处理的。Exception有分为两类:IOException(非运行时异常
java中的不抛出的异常是什么
2014-12-27

Java异常处理的的方法是什么

本篇内容主要讲解“Java异常处理的的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java异常处理的的方法是什么”吧!1) 为可恢复的错误使用检查型异常,为编程错误使用非检查型错误。
2023-06-16

java异常处理机制原理是什么

Java异常处理机制的原理是基于异常(Exception)的概念。在Java中,异常是指在程序运行过程中发生的错误或异常情况。当代码出现异常时,可以使用异常处理机制来捕获和处理异常,以保证程序的正常运行。Java的异常处理机制基于三个关键词
2023-09-16

Java自定义异常的方法是什么

本文小编为大家详细介绍“Java自定义异常的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java自定义异常的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、异常分为哪几种异常分为两种,分
2023-07-06

系统异常是什么

系统异常是指在程序运行过程中出现的不正常的情况或错误,当程序执行过程中遇到无法处理的错误或异常情况时,系统无法正常进行下去的状态。系统异常可以分为两种情况,一种是硬件异常,另一种是软件异常,硬件异常是指由于计算机硬件设备出现故障或损坏导致的
2023-08-18

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录