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日

相关文章

  • 原生JS实现$.param() 函数的方法

    当我们使用jQuery库时,我们通常使用$.param()函数来将一个对象序列化为一个字符串形式的参数列表,以便可以在URL,Ajax请求等中使用。但是如果我们需要在没有引入jQuery的情况下使用该函数,我们可以考虑使用原生JS来实现。 下面是用原生JS实现$.param()函数的方法: 1. 将一个对象序列化为查询字符串 将一个对象序列化为查询字符串的方…

    Java 2023年6月15日
    00
  • Java基于线程实现带有滚动效果的Label标签实例

    下面我将详细讲解如何实现Java基于线程实现带有滚动效果的Label标签的完整攻略。 1. 了解需求 在实现这个功能之前,我们需要了解需求,即带有滚动效果的Label标签到底是什么,有什么功能和特点。经过了解,我们知道: 带有滚动效果的Label标签是一种标签,可以显示文字、图片等内容。 它的滚动效果可以是从左到右、从右到左、从上到下、从下到上等四个方向中的…

    Java 2023年6月15日
    00
  • Java实现一个简单的长轮询的示例代码

    下面是Java实现一个简单的长轮询的示例代码的攻略。 什么是长轮询? 长轮询指的是在客户端发起请求后,服务器会一直等待直到有数据更新或超时才返回。相较于短轮询,长轮询可以减少客户端和服务器之间的请求次数,提高网络传输效率。 实现长轮询的步骤 在Java中实现长轮询的步骤如下: 客户端发起一个GET请求,服务器接收请求并判断是否有新的数据更新; 如果有新的数据…

    Java 2023年5月19日
    00
  • JSON–List集合转换成JSON对象详解

    那么我们先从题目入手,谈一下什么是JSON,然后再讲解如何将List集合转换成JSON对象。 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以易于阅读和编写的方式设计,同时也便于机器解析和生成。JSON格式与JavaScript语言中的对象、数组非常类似,因此很容易理解和使用。JSON格式的数据…

    Java 2023年5月20日
    00
  • java多线程实现取款小程序

    下面是针对Java多线程实现取款小程序的完整攻略。 准备工作 在开始之前,我们需要先了解一些Java多线程方面的基础知识,如线程创建与启动、线程同步、线程通信等。这些知识我们可以通过阅读相关的书籍或者在线教程来学习掌握。 实现步骤 创建一个银行账户类,包括账户余额、账户号码等属性,以及存、取款等方法。 public class Account { priva…

    Java 2023年5月18日
    00
  • 什么是Java Agent?

    Java Agent是一种Java应用程序的附加组件,它可以通过Java虚拟机的自定义类加载器来加载并执行,从而在应用程序生命周期内提供额外的功能和服务。Java Agent常见的应用场景包括:性能监测、应用程序调试、代码覆盖率和行为分析、安全检测、依赖项注入等。本文将介绍Java Agent的完整使用攻略,并给出两个实际示例说明。 一、Java Agent…

    Java 2023年5月11日
    00
  • mysql jdbc连接步骤及常见参数

    MySQL是一个常见的开源关系型数据库管理系统,在Java中通常使用JDBC(Java Database Connectivity)连接MySQL数据库。下面是MySQL JDBC连接步骤及常见参数的完整攻略。 JDBC连接MySQL的步骤 连接MySQL需要进行以下步骤: 加载MySQL JDBC驱动程序:Class.forName(“com.mysql.…

    Java 2023年5月20日
    00
  • java Spring Boot 配置redis pom文件操作

    Java Spring Boot 是一个快速开发应用程序的框架,而 Redis 是一个基于内存存储的数据结构存储系统。在 Spring Boot 应用程序中,我们可以配置 Redis,以便有效地管理数据。 以下是配置 Redis 的 pom 文件操作的完整攻略: 步骤1:引入 Redis 依赖项 在 pom.xml 文件中添加以下代码: <depend…

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