首页 > 编程语言 >Java——异常处理

Java——异常处理

时间:2024-11-13 10:50:40浏览次数:3  
标签:Java 处理 代码 finally catch 异常 throws

目录

定义

Java标准裤内建了一些通用的异常,这些类以Throwable为顶层父类。
Throwable又派生出Error类和Exception类。

在这里插入图片描述

错误(Error)类以及他的子类的实例,代表了JVM本身的错误错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。
异常(Exception)是程序编译运行时出现的错误或异常情况,它表示程序遇到了一种在正常情况下无法预料或处理的情况。在编程中,异常处理是一种机制,用于处理程序执行过程中可能出现的错误,以防止程序崩溃并提供错误处理的途径。
❗️❗️❗️语法错误不算在异常体系中,语法错误是自己的水平问题引起的。❗️❗️❗️
在这里插入图片描述

分类

编译时异常

  • 编译阶段就要处理的异常,提醒可能出现的问题,在编辑代码过程中会标红警告,必须处理否则无法运行。
  • 常见情况:
    • 类找不到的异常:ClassNotFoundException
    • 文件找不到的异常:FileNotFoundException
    • 没有匹配的方法异常:NoSuchMethodException
    • 输入输出流异常: IOException
    • 数据库操作异常:SQLException

运行时异常

  • 程序运行过程中出现的异常,考虑不周,出现的一些问题。
  • 常见情况:
    • 数组索引越界异常: ArrayIndexOutOfBoundsException
    • 空指针异常 : NullPointerException
    • 类型转换异常:ClassCastException
    • 迭代器遍历没有此元素异常:NoSuchElementException
    • 除0发生算数异常:ArithmeticException

处理机制

在编写代码处理异常时,对于检查异常,有2种不同的处理方式:使用try...catch...finally语句块处理它。或者,在函数签名中使用throws 声明交给函数调用者caller去解决。

捕获异常

在这里插入图片描述

try {
    //逻辑代码
   }catch(exception e){
    //异常处理代码
} finally{
    //一定要执行的代码
}
try {
   //逻辑代码
   }catch(exception e){
   //异常处理代码
}
 
try{
   //逻辑代码
}finally{
   //一定要执行的代码
}
  • 一个try至少要有一个catch块,否则, 至少要有1个finally块。但是finally不是用来处理异常的,finally不会捕获异常。finally主要做一些清理工作,如流的关闭,数据库连接的关闭等
  • finally仅在以下几种情况不执行:在这里插入图片描述
  • try块中的局部变量和catch块中的局部变量(包括异常变量),以及finally中的局部变量,他们之间不可共享使用。
  • java中,当一个函数的某条语句发生异常时,这条语句的后面的语句不会再执行,它失去了焦点。执行流跳转到最近的匹配的异常处理catch代码块去执行,异常被处理完后,执行流会接着在处理了这个异常的catch代码块后面接着执行

抛出异常

在这里插入图片描述

如果一个方法内部的代码会抛出检查异常(checked exception),而方法自己又没有完全处理掉,则javac保证你必须在方法的签名上使用throws关键字声明这些可能抛出的异常,否则编译不通过。
throws是另一种处理异常的方式,它不同于try...catch...finallythrows仅仅是将函数中可能出现的异常向调用者声明,而自己则不具体处理。采取这种异常处理的原因可能是:方法本身不知道如何处理这样的异常,或者说让调用者处理更好,调用者需要为可能发生的异常负责。

  • throw(一定抛出)
    在 Java 中,当程序发生异常时,可以使用 throw 关键字来手动抛出异常对象。throw 语句的格式为:
    throw new 异常类名称(构造函数参数);
    其中,异常类名称就是已定义的异常类,构造函数参数是为异常类的构造函数提供的参数。它可以为代码中的某个条件设置一个异常,并在需要的位置进行捕获和处理。
//例子
public void checkAge(int age) {
   if (age < 0) {
     throw new IllegalArgumentException("年龄不能为负数");
   }
}

自定义异常:在实际项目中,可以根据业务逻辑需求创建自定义异常,以便于更细致的错误分类和捕获。自定义异常类通常继承 ExceptionRuntimeException。异常定义好后,我们就可以new出异常对象,并用throw关键字来主动抛出异常。

  • throws(提醒,可能抛出)
    throws关键字用于指定方法可能抛出的异常。它标识了哪些异常可以传递到方法的调用者,需要调用者进行相应的处理;当不希望在当前方法中捕获异常,并且希望将异常传递给上层调用者来处理时,可以使用throws关键字。其格式如下:
修饰符 返回类型 方法名(参数列表) throws 异常列表 {
    // 方法体
}
//例子
public void readFile(String filename) throws FileNotFoundException {
    File file = new File(filename);
    FileInputStream stream = new FileInputStream(file);
    // ...
}

参考博客

一次搞懂Java异常处理(超详细!!!)!
Java中的异常有哪几类?
Java基础语法(十三):throw和throws

标签:Java,处理,代码,finally,catch,异常,throws
From: https://blog.csdn.net/qq_51706641/article/details/143725039

相关文章

  • 第三百二十二节 Java线程教程 - Java原子变量、Java显式锁
    Java线程教程-Java原子变量新线程并发包java.util.concurrent和java.util.concurrent.atomic和java.util.concurrent.locks包括非常有用的并发构造。线程并发包以四种方式支持并发。原子变量锁同步器并发集合原子变量原子变量类的命名类似于AtomicXxx,例如,AtomicInteg......
  • 第三百二十三节 Java线程教程 - Java同步器
    Java线程教程-Java同步器同步器对象与一组线程一起使用。它维护一个状态,根据它的状态,它让一个线程通过或强迫它等待。本节将讨论四种类型的同步器:SemaphoresBarriersLatchesExchangers信号量信号量用于控制可以访问资源的线程数。java.util.concurrent包中的Semaphor......
  • 番外-JDBC:2024年最新java连接数据库教程
    前言JavaScript的内容晚点更新,今天继续更新一点番外,今天更新的是jdbc,如何用java连接数据库1.导包要使java能够连接数据库我们需要导入一个包,请按照以下操作安装并导包1.进入官网MySQL以上为官网链接进去后点击下载继续按图片点击 根据自己使用的语言选择,这里演示的......
  • Java设计模式--单例模式(懒汉式实现)
    1、单例模式(SingletonPattern)    单例模式是一种常见的设计模式,目的是确保一个类只会存在一个实例,并且该类提供全局进行访问此实例的方法。2、懒汉式/***@authorHao*单例模式:懒汉式*懒汉式是线程不安全的,懒汉式在多线程环境下,可能会出现多个实例,所以需......
  • 在 Java 中,什么时候用重载,什么时候用重写
     重载概念:重载是在同一个类中,有多个同名的方法,但参数类型、数量或顺序不同。目的:提供多种方式调用同一名称的方法,以适应不同的场景。应用:当需要以统一的方式来处理不同类型的数据时,可以用重载。重写概念:重写发生在继承关系中,子类重新定义父类的方法。目的:子......
  • 在 Java 中,什么时候用重载,什么时候用重写
      重载概念:重载是在同一个类中,有多个同名的方法,但参数类型、数量或顺序不同。目的:提供多种方式调用同一名称的方法,以适应不同的场景。应用:当需要以统一的方式来处理不同类型的数据时,可以用重载。重写概念:重写发生在继承关系中,子类重新定义父类的方法。目的:......
  • 基于Java的高校实习信息发布系统
    高校实习信息发布系统一:基本介绍开发环境功能模块图系统功能部分数据库表设计二:部分系统页面展示登录页面网站首页查看企业信息查看实习职位信息查看个人简历信息用户交流论坛管理职位实习列表页面公告信息管理页面企业管理页面源码一:基本介绍开发环境·开发语......
  • SpringBoot 处理 CORS 跨域请求的三种方法
    原文链接:SpringBoot处理CORS跨域请求的三种方法–每天进步一点点 0.前言pringboot跨域问题,是当前主流web开发人员都绕不开的难题。但我们首先要明确以下几点跨域只存在于浏览器端,不存在于安卓/ios/Node.js/python/java等其它环境跨域请求能发出去,服务端能收到请求并......
  • JSON 处理技术:字符串与对象的转换
    JSON处理技术:字符串与对象的转换在现代Web开发中,JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集。JSON格式易于人阅读和编写,同时也易于机器解析和生成。本文将探讨JSON.parse()和JSON.stringify()方法,这两个方法在处理JS......
  • 探索jQuery与原生JavaScript:事件绑定的比较
    探索jQuery与原生JavaScript:事件绑定的比较在现代网页开发中,事件处理是实现用户交互的关键部分。开发者可以选择使用原生JavaScript或jQuery来绑定事件。本文将通过一个简单的示例,比较这两种方法在事件绑定上的不同,并探讨它们的优缺点。事件绑定基础事件绑定是将事件监听......