java中的异常处理

article/2025/10/30 14:28:43

异常概述

异常的作用:增强程序的健壮性。


java中异常以什么形式存在?

  1. 异常在java中以类的形式存在,每一个异常类都可以创建异常对象。
    JVM执行到某一处觉得有异常,会new异常对象,并且将new的异常对象抛出,打印输出信息到控制台了。如:new ArithmeticException(“/ by zero”);
  2. 异常对应的现实生活
    火灾(异常类)
    • 2008年8月8日,小明家着火了(异常对象)
    • 2008年8月9日,小红家着火了(异常对象)

异常体系结构
在这里插入图片描述
注意:所有异常都是在运行阶段发生的,因为只有程序运行阶段才可以new对象,因为异常的发生就是new异常对象。


编译时异常和运行时异常的区别:

  • 编译时异常一般发生的概率比较高。对于一些发生概率较高的异常,需要在运行之前对其进行预处理。比如,外面在下雨,如果不拿伞出去我可能会生病(异常),所以拿伞就是对“生病异常”发生之前的处理。
  • 运行时异常一般发生的概率比较低。对于一些发生概率较低的异常,没必要提前对这种发生概率较低的异常进行预处理。如果处理这种异常,你会活的很累。
  • 编译时异常也叫受检或受控异常:CheckedException;运行时异常也叫未受检或未受控异常:UnCheckedException。

java中处理异常有两种方式:

  • 第一种方式:在方法声明的位置上,使用throws关键字,抛给上一级。谁调用我,我就抛给谁。
  • 第二种方式:使用try…catch语句进行异常的捕捉。
  • 异常发生之后,如果我选择了上抛,抛给了我的调用者,调用者需要对这个异常继续处理,那么调用者处理这个异常同样有两种处理方式。Java中异常发生之后如果一直上抛,最终抛给了main方法,main方法向上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果:终止java程序。(方法1 --> 方法2 --> … --> JVM)

try…catch:

  • catch后面小括号中的类型可以是具体的异常类型,也可以是该异常类型的父类型。
  • catch可以写多个,从上到下,必须遵守从小到大。
  • 建议catch的时候,精确的一个一个处理,有利于程序的调试。

java8新特性:
可以这样书写:catch(FileNotFoundException | ArithmeticException | NullpointerException e) { … }


throws 和 try…catch怎么选?
如果希望调用者来处理,选择throws上报,其他情况使用捕捉的方式。


异常对象两个重要的方法:

  • 获取异常简单的描述信息:exception.getMessage();
  • 打印异常追踪的堆栈信息:exception.printStackTrace();

finally语句:
放在finally语句块中的代码是一定会执行(除了调用System.exit(0) 退出JVM),即使try中有return。如果try中有return,会先执行finally再return。


finally面试题:

public static int m() {int i = 100;try {return i;} finally {i++;}
}

返回结果是:100。
问题:不是应该先执行finally语句进行 i++,再return出去吗?
解释java有一条语法规则,方法体中的代码必须遵循自上而下顺序依次逐行执行。第一行 i=100,第二行 return i,就应该返回100。如果 i=100,再 i++,再return,这样就违背了java的语法规则。但是finally还是执行了,这段代码的内部执行顺序是这样的:
在这里插入图片描述
结论在 finally 中改变返回值的做法是不好的。因为如果存在 finally 代码块,try中的 return 语句不会立马返回调用者,而是记录下返回值待 finally 代码块执行完毕之后再向调用者返回其值,然后如果在 finally 中修改了返回值,就会返回修改后的值。

从JVM的角度分析:

public class Demo3_12_2 {public static void main(String[] args) {int result = test();System.out.println(result); // 20}public static int test() {try{return 10;} finally {return 20;}}
}

在这里插入图片描述

public class Demo3_12_2 {public static void main(String[] args) {int result = test();System.out.println(result); // 10}public static int test() {int i = 10;try{return i;} finally {i = 20;}}
}

在这里插入图片描述


Java中如何自定义异常:

  1. 编写一个类继承Exception或者RuntimeException。
  2. 提供两个构造方法,一个无参,一个带有String参数的。
    public class MyStackOperationException extends Exception {public MyStackOperationException () {}public MyStackOperationException () {super(s);}
    }
    /*
    public class MyStackOperationException extends RuntimeException{ //运行时异常
    }
    */
    
    public void push(Object obj) throws MyStackOperationException {if(index >= elements.length - 1) {//注意:这里手动抛出异常,要throws出去,不要try...catch,自己抛自己捕获没有意义throw new MyStackOperationException("压栈失败,栈已满!");}
    }
    

注意:重写之后的方法不能比重写之前的方法抛出更多的异常,可以更少。



http://chatgpt.dhexx.cn/article/M2aanj9P.shtml

相关文章

Java异常的分类和类结构图

1.异常的分类 Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。Throwable又派生出Error类和Exception类。 错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因…

一、java异常的处理与捕获

一、认识异常 在Java中所有的异常(Exception)和错误(Error)都继承了同一个父类Throwable,他们的关系如下: 1.1 Error(错误): 是指程序无法处理的错误,表示运行应用程序时比较严重的问题。大多数错误与代码编写者执行的操作无关&a…

Java异常处理(Java必备知识)

在程序设计和运行的过程中,程序员也是尽可能规避错误,但使程序被迫停止的错误仍然不可避免。Java提供了异常处理机制来帮助程序员检查可能出现的错误,提高了程序的可读性和可维护性。Java中将异常封装到一个类中,出现错误就会抛出…

【2022最新Java面试宝典】—— Java异常面试题(33道含答案)

目录 一、Java异常架构与异常关键字1. Java异常简介2. Java异常架构1.Throwable2. Error(错误)3. Exception(异常)运行时异常编译时异常 3. Java异常关键字 二、Java异常处理1. 声明异常2. 抛出异常3. 捕获异常4. 如何选择异常类型…

java 异常堆栈输出_打印Java异常堆栈信息

背景 在开发Java应用程序的时候,遇到程序抛异常,我们通常会把抛异常时的运行时环境保存下来(写到日志文件或者在控制台中打印出来)。这样方便后续定位问题。 需要记录的运行时环境包含两部分内容:抛异常时的参数信息和函数调用堆栈。针对堆栈信息,如果直接调用Exception的g…

Java 异常的捕获及处理

🍎个人主页:亮点的博客 🍊个人信条:理想如果不向现实做一点点屈服,那么理想也将归于尘土 🍑刷题专栏:【Java】牛客网刷题 🥭刷题网站:牛客网 学习的一种有效途径就是刷题…

java异常分类三大类_Java异常的分类

首先,java的异常分为Error和Exception。这两类都是接口Throwable的子类。Error及Exception及其子类之间的关系,大致可以用下图简述。 注意事项: 1。 Error仅在java的虚拟机中发生,用户无需在程序中捕捉或者抛出Error。 2。 Exception分为一般的Exception和RuntimeException…

JAVA异常分类及处理

程序错误一般分为三种: 编译错误: 编写程序时没有遵循语法规则,编译程序能够自己发现错误并提示位置和原因。运行错误:程序在执行的时候运行环境发现了不能执行的操作。比如,JVM出错了,内存溢出等。逻辑错…

JAVA异常都有哪些

1.异常 一、Error和Exception package org.psmaxwell.exception; //Exception in thread "main" java.lang.StackOverflowError public class Demo01 {public static void main(String[] args) {new Demo01().a();}public void a(){b();}public void b(){a();} }pack…

Java异常类详解

目录 异常简介: 异常体系: 异常的处理: 自定义异常类: 一.异常简介: 1.1 异常定义: 异常是运行程序的过程中产生的异常情况。异常的情况是指程序在运行过程中,可能由于外界条件的变更&…

java异常处理方式

java异常处理方式 java通过面向对象的方式进行异常处理,一旦方法出现异常,系统自动根据该异常对象寻找合适的异常处理器(Exception Handler)来处理异常,把各种不同的异常进行分类,并提供了良好的接口。 j…

Java异常

Java笔记 文章目录 一、简介二、空指针异常三、自定义异常 一、简介 一个健壮的程序必须能够处理各种异常。 我们应该如何处理异常?两种方式: 返回约定错误码,例如200表示成功。在语言层面提供异常处理机制。 必要性说明: 异常需…

java异常体系

java异常体系结构图 一:java异常体系 1.Thorwable类(表示可抛出)是所有异常和错误的超类,两个直接子类为Error和Exception,分别表示错误和异常。 2.其中异常类Exception又分为运行时异常(RuntimeException)和非运行时…

Java 异常

Java异常 Java异常是Java提供的一种识别及响应错误的一致性机制。 Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答3个问题:异常类型…

JAVA异常详解

异常的定义 异常就是有异于常态,和正常情况不一样,有错误出现。在java中,阻止当前方法或作用域的情况,称之为异常。 异常的分类 Error:是程序中无法处理的错误,表示运行应用程序中出现了严重的错误。此类错…

java异常判断_Java异常类

异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错…

2020-11-08

Java:详解Java中的异常(Error与Exception) 置顶 王小二(IT) 2018-06-22 16:54:26 66242 收藏 389 分类专栏: 编程语言(Java基础) 文章标签: try catch finally Error 版权 《Java:详解Java中的异常(Error与Exception)》《Jav…

Java中异常详解

目录 介绍 : 异常体系: 异常的分类 : Java 默认处理异常的方式(报错) : 异常处理方法: try...catch : try...catch...finally: try...catch ....catch.....catch.... 异常对象的常见方法&#xff…

Java中的异常

目录 1. 异常产生的原因和分类 1.1 异常产生的原因 1.2 异常分类 2. 异常的处理 2.1 防御式编程 2.2 异常的抛出(throw) 2.3 异常的捕获 2.3.1 throws异常声明 2.3.2 try-catch捕获异常并处理 2.3.3 finally 3.自定义异常类 Java中的异常&…

Java异常(超详细!)

1、什么是异常,java提供异常处理机制有什么用? 什么是异常:程序执行过程中的不正常情况。异常的作用:增强程序的 健壮性。 eg. public class ExceptionTest01 {public static void main(String[] args) {int a 10;int b 0;//…