Java经典面试题汇总:异常

Java经典面试题汇总:异常

常见的异常类型

Java中常见的异常有三类:

  1. Checked Exceptions 受检异常
  2. Runtime Exceptions 运行时异常
  3. Errors 错误

Checked Exceptions

Checked Exceptions 又称为受检异常,是在编译阶段就被检测出来的异常。他们必须要被捕捉处理或者是被声明抛出。如 IOExceptionSQLException等等。

Runtime Exceptions

Runtime Exceptions 又称为运行时异常,是在程序运行时才能被捕获的异常。它们可以直接通过 throw 关键字抛出,也可以通过 Java 运行时系统检测出来。如 NullPointerExceptionArrayIndexOutOfBoundsException等等。

Errors

Errors 错误是无法被恢复和处理的异常,是由于 JVM 运行引起的。如 OutOfMemoryErrorStackOverflowError等等。

Java中的异常处理方式

Java中主要用 try-catch 语句来进行异常处理,可以选择性地使用 finally 关键字进行资源释放或者是清理工作。

try-catch-finally

每一个 try 块可以有多个 catch 语句和一个 finally 块。try 块中的程序代码被执行的过程中,倘若异常抛出,便跳转到 catch 块,在 catch 块中进行异常处理。

finally 块中的程序无论如何都会被执行,它的作用主要用来进行资源释放和清理工作,如关闭文件句柄、释放数据库连接等等。

下面是一个 try-catch-finally 的示例:

try{
    // 可能抛出异常的代码
} catch (SomeException ex) {
    // 处理异常的代码
} finally {
    // 执行清理工作
}

finally的特定用法

finally 根据数据类型的不同又可细分为如下三种:

  1. 处理在 trycatch 中可能出现的异常。
  2. 关闭数据库连接或文件句柄等清理工作。
  3. 在程序中抛出异常后,其中的代码将仍然执行。

下面是一些具体的 finally 的示例:

  1. 处理在 trycatch 中可能出现的异常。
FileOutputStream file = null;
try {    
    file = new FileOutputStream("file.txt");
    file.write("Hello World".getBytes());
    // 执行其他业务代码
    int i = 1 / 0; // 这里故意除数是 0,就会抛出异常
} catch (IOException e) {
    e.printStackTrace();
    // 处理 IOException 异常
} catch (ArithmeticException e) { // 捕捉 ArithmeticException 异常
    e.printStackTrace();
    // 处理发生的异常
} finally {
    try {
        file.close(); // 释放资源或者是清理工作
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在以上代码中,在 try-catch 块中执行文件的输入输出和其他业务,当发生异常时,会捕捉异常,并在 catch 语句中对异常进行处理,在 finally 语句中清理文件句柄等内存资源。

  1. 关闭数据库连接或文件句柄等清理工作。
public void resourceManage() {
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    try {
        conn = getConnection();
        stmt = conn.createStatement();
        rs = stmt.executeQuery(SQL_QUERY);
        while (rs.next()) {
            // 业务逻辑的处理
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            if (rs != null) {
                rs.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException se) {
            se.printStackTrace();
        }
    }
}

在以上代码中,在 try-catch 块中进行SQL语句的查询,并在 finally 语句中对三个资源进行关闭操作,释放资源或者是清理工作。

  1. 在程序中抛出异常后,其中的代码将仍然执行。
public int sum(int a, int b) {
    try {
        int c = a / b;
        return c;
    } catch (Exception e) {
        return -1;
    } finally {
        System.out.println("sum() was executed");
    }
}

在以上代码中,在 try-catch 块中进行实数的除法,当出现异常时,返回一个 -1。在 finally 语句中输出信息,即使在 catch 语句块中 return 语句返回的结果与 finally 块无关,也会在 finally 块中执行。

总结

Java 中的异常处理主要采用 try-catch-finally 的方式,其中 try-catch 块用来处理捕获的异常。finally 块用于释放资源和清理工作。根据 finally 的不同用法可以分为如下三种:处理在 trycatch 中可能出现的异常、关闭数据库连接或文件句柄等清理工作和在程序中抛出异常后,其中的代码将仍然执行。

以上是 Java 异常处理的完整攻略。

参考:

  1. Java异常处理完全指南
  2. Java 异常

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java经典面试题汇总:异常 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 如何把char数组转换成String

    将char数组转换成String通常可以使用String类的构造函数方法或valueOf()方法。 使用String类的构造函数方法 示例1: char[] charArray = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’}; String str = new String(charArray); System.out.println(str); /…

    Java 2023年5月26日
    00
  • 什么是Java缓存技术?

    Java缓存技术是指将计算机处理的结果或持久化数据存储在计算机内存中,以便更快地访问这些数据。Java缓存技术主要用于改善性能,减少应用程序请求数据的间隔时间。在Java中,常用的缓存技术包括内存缓存、文件缓存和Redis缓存等。 内存缓存 内存缓存是一种基于Java集合框架的缓存技术,它将数据存储在应用程序的内存中。内存缓存能够提供快速响应时间,但受到内存…

    Java 2023年5月11日
    00
  • Spring Data Jpa 中原生查询 REGEXP 的使用详解

    下面是关于“Spring Data Jpa 中原生查询 REGEXP 的使用详解”的完整攻略。 什么是 Spring Data Jpa Spring Data Jpa 是 Spring Data 家族中的一员,它简化了对关系型数据库的访问,使得开发人员可以更方便地使用 JPA 来访问数据库。相比于原生 JPA,Spring Data Jpa 提供了更高层次的…

    Java 2023年6月3日
    00
  • SpringBoot超详细讲解事务管理

    SpringBoot超详细讲解事务管理 什么是事务管理? 在数据库中,事务是一组要么全部执行、要么全部不执行的操作序列。如果在事务中任何一个操作失败,整个事务都应该失败并回滚到事务开始状态。 事务管理就是保证在数据库操作中,一组操作要么全部完成,要么全部不完成的机制。 Spring中的事务管理 Spring框架中提供了多种方式进行事务管理,包括声明式事务管理…

    Java 2023年5月15日
    00
  • java以json格式向后台服务器接口发送请求的实例

    下面我来详细讲解「Java以JSON格式向后台服务器接口发送请求的实例」: 1.什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。在前后端通信的接口中,JSON格式被广泛应用。它具有易读性好、可解析性强等特点,通常使用键值对表示数据。键值对之间使用冒号(:)分割,不同的键值对之间使用逗号(,)分割,键…

    Java 2023年5月26日
    00
  • Spring Boot的Controller控制层和页面

    Spring Boot是一个快速创建Web应用程序的框架,它提供了许多便捷的功能和工具,其中包括控制层和页面。控制层是Web应用程序的核心,它处理HTTP请求并返回响应。页面是Web应用程序的用户界面,它向用户展示数据和交互式元素。下面是详解Spring Boot的Controller控制层和页面的完整攻略: 创建控制器类 首先,我们需要创建一个控制器类来处…

    Java 2023年5月14日
    00
  • 实例讲解Java的Spring框架中的AOP实现

    实例讲解Java的Spring框架中的AOP实现 什么是AOP? AOP(Aspect-oriented programming)面向切面编程,是一种新的编程思想,它通过定义切面(Aspect)来装配系统,一个切面横切整个系统中的多个点,切面可以通过切点(PointCut)和通知(Advice)来定义在何处以及何时执行程序代码,从而达到复用和降低系统复杂度的…

    Java 2023年5月19日
    00
  • tk.mybatis扩展通用接口使用详解

    tk.mybatis扩展通用接口使用详解 什么是tk.mybatis? tk.mybatis是MyBatis的一个扩展插件,它进一步简化了MyBatis的使用。tk.mybatis对MyBatis进行了增强,提供了一套通用的Mapper接口,可以让我们写更少的代码来完成CRUD操作。同时tk.mybatis提供了一些实用的功能,例如自动填充创建时间和更新时间…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部