Java中try catch处理异常示例

yizhihongxing

下面就是“Java中try catch处理异常示例”的详细讲解。

1. 什么是异常?

在Java程序运行过程中,可能会遇到一些非正常的情况,例如读取文件时文件不存在、网络连接异常等等,这些非正常的情况被称为“异常”。

Java中的异常是Throwable类及其子类的实例,可分为检查型异常和非检查型异常(也叫运行时异常)。其中,检查型异常必须显式处理,而非检查型异常则可以不处理。

2. try-catch语句

在Java中,可以使用try-catch语句来处理异常。try块中放置可能会抛出异常的代码,catch块中处理发生的异常。

try {
    // 可能会抛出异常的代码
} catch (Exception e) {
    // 异常处理逻辑
}

catch块中的Exception类型可以换成其它的异常类型,以处理特定的异常。

3. try-with-resources语句

在Java7中新增了try-with-resources语句,用于自动关闭资源,如文件、数据库连接等。在try块中打开资源,当try块执行完成或出现异常时,将自动关闭资源。

try (InputStream is = new FileInputStream(file)) {
    // 处理文件流
} catch (IOException e) {
    // 异常处理逻辑
}

4. 示例说明

下面通过两个示例说明try-catch语句的应用。

示例1:文件读取异常处理

代码如下:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileReadDemo {
    public static void main(String[] args) {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("test.txt"));
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.out.println("文件读取错误:" + e.getMessage());
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
            } catch (IOException e) {
                System.out.println("关闭文件流失败:" + e.getMessage());
            }
        }
    }
}

上述代码中,使用BufferedReader读取文件内容,若出现异常,则捕获异常并输出异常信息。最后在finally块中关闭文件流。

示例2:数据库连接异常处理

代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBQueryDemo {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
            ps = conn.prepareStatement("select * from user");
            rs = ps.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getString("name"));
            }
        } catch (ClassNotFoundException e) {
            System.out.println("找不到数据库驱动类:" + e.getMessage());
        } catch (SQLException e) {
            System.out.println("数据库操作异常:" + e.getMessage());
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (ps != null) {
                    ps.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                System.out.println("关闭数据库连接失败:" + e.getMessage());
            }
        }
    }
}

上述代码中,连接MySQL数据库,若出现异常,则捕获异常并输出异常信息。最后在finally块中关闭数据库连接、Statement和ResultSet等资源。

以上就是Java中try catch处理异常示例的完整攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中try catch处理异常示例 - Python技术站

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

相关文章

  • 详解SpringBoot定时任务说明

    下面我来详细讲解一下“详解SpringBoot定时任务说明”的完整攻略。 什么是SpringBoot定时任务? SpringBoot定时任务是指在特定的时间或周期性的执行一些任务,比如定时生成报表、清理数据库等。SpringBoot框架中提供了丰富的定时任务支持,可以通过简单的配置来实现这些任务。 定时任务的实现方式 基于注解和功能接口实现定时任务 Spri…

    Java 2023年5月19日
    00
  • JDBC链接mysql插入数据后显示问号的原因及解决办法

    下面是关于“JDBC链接mysql插入数据后显示问号的原因及解决办法”的完整攻略。 问题描述 在使用JDBC链接mysql进行数据插入的过程中,有时候插入的数据中含有中文字符,但是插入成功后查询数据时会发现,中文字符会被显示为问号“?”。这是为什么? 问题原因 这种情况主要是因为mysql数据库中的表采用了默认的字符集编码方式,即latin1,而我们插入的中…

    Java 2023年6月16日
    00
  • JSP request(return String)用法详例

    下面是介绍JSP request(return String)用法的详例攻略。 什么是JSP request(return String)? JSP request(return String)是一种JSP编程技术,它可以在JSP页面中处理输入数据并返回结果。在这种技术中,JSP页面将被调用,并且它必须返回一个String值。这个String值可以再次被应用…

    Java 2023年6月15日
    00
  • 一文详解SpringBoot如何优雅地实现异步调用

    一文详解Spring Boot如何优雅地实现异步调用 在Spring Boot应用程序中,我们经常需要进行异步调用,以提高应用程序的性能和响应速度。本文将详细讲解如何在Spring Boot应用程序中优雅地实现异步调用。 步骤一:添加依赖 我们需要在pom.xml文件中添加以下依赖项: <dependency> <groupId>or…

    Java 2023年5月15日
    00
  • 实例讲解Android中SQLiteDatabase使用方法

    首先我们需要了解一下什么是SQLiteDatabase。它是Android系统中实现本地数据库的一种机制,也是Android开发中常用的本地存储方式之一。下面将介绍它的使用方法。 创建或打开数据库 通过以下代码可以创建或打开一个名为“test.db”的数据库,并且返回一个SQLiteDatabase对象。 SQLiteDatabase db = openOr…

    Java 2023年6月16日
    00
  • mybatis plus自动生成器解析(及遇到的坑)

    下面我将为你详细讲解 Mybatis Plus 自动生成器解析及遇到的坑。 1. 简介 Mybatis Plus 是一款基于 Mybatis 的快速开发框架,提供了常用的 CRUD 操作、分页、逻辑删除等功能,大大减少了代码量,提升了开发效率。而其中的代码生成器,更是可以帮助我们一键生成实体、Mapper、Service、Controller 等文件,减少了…

    Java 2023年6月2日
    00
  • 什么是重入锁?

    重入锁(Reentrant Lock)是一种可重入的互斥锁,它可以被同一个线程重复获取多次。在Java中,重入锁是通过java.util.concurrent.locks.ReentrantLock类来实现的。 下面是使用重入锁的完整使用攻略: 一、创建重入锁 使用重入锁需要先创建一个ReentrantLock对象。在创建ReentrantLock对象时,可…

    Java 2023年5月10日
    00
  • java线程池详解及代码介绍

    Java线程池详解及代码介绍 本文将介绍Java中的线程池,并提供代码示例。内容包括线程池的概念、线程池的优点、线程池的组成以及线程池的使用方式等。 线程池的概念 线程池是一种多线程处理的方式,它最大的特点是控制线程的数量。在多线程环境下,如果线程数量过多,会导致系统资源的浪费,而且线程的创建和销毁也需要消耗系统资源,影响系统的性能。线程池通过管理线程的创建…

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