首页 > 编程语言 >Java基础语法(十二):try-catch块

Java基础语法(十二):try-catch块

时间:2023-05-15 10:32:22浏览次数:26  
标签:Java System try println catch 异常

前言

Java 异常处理机制是 Java 程序设计中至关重要的一部分。它允许程序员像处理普通数据一样处理异常,并根据异常类型采取合适的措施。其中一个非常基本的异常处理机制是 try-catch 块。本文将深入探讨 Java 中的 try-catch 块,让读者了解它的各种用法和最佳实践。

一、try-catch是什么?

理解 Java 中的 try-catch 块对于 Java 编程非常重要。try-catch 块是处理 Java 异常的一种方法。当一个方法可能会引起异常(例如无效参数或空指针引用)时,可以将代码放入 try-catch 块中。try 块中的代码是受保护的,因为如果抛出异常,异常将被捕获并跳转到 catch 块中,从而避免程序崩溃或提供有用的错误信息给用户。

在 try 块的末尾,代码将继续执行,而在 catch 块中,可以编写代码来处理异常。catch 块可以包含多个异常处理程序,以便不同的异常类型采取不同的操作。如果异常类型不匹配,它将不会被捕获,这意味着异常甚至可能传播到您的应用程序以外。

public static void main(String[] args) {
    String str = null;
    try {
        System.out.println(str.length());
    } catch (NullPointerException e) {
        System.out.println("Caught NullPointerException: " + e.getMessage());
        // 这里可以写处理异常的代码
    } finally {
        System.out.println("Finally block executed.");
    }
}

以上代码使用 try 块来保护str.length() 这一可能会出现空指针异常的代码。如果异常被抛出,它将被捕获并打印日志消息,可以在这里编写处理异常的代码。在 try 块的末尾,无论异常是否被抛出,finally 块都将被执行,用于清理资源或完成必要的任务。

在这个示例中,catch 块捕获了 NullPointerException,但是在实际应用程序中,可能会面临各种各样的异常类型,包括 IO 异常、数据库异常等等。因此,程序员需要根据不同的异常类型运用不同的异常处理程序,以确保应用程序的健壮性和可靠性。

二、其他异常处理机制

除了基本的 try-catch 块,Java 中还有一些其他的异常处理机制,可以让程序员更好地控制代码异常情况下的行为。以下是一些常用的异常处理机制:

1、try-with-resources 块

try-with-resources 块是从 Java 7 开始引入的一种异常处理机制。它允许程序员在 try 块之前声明一个或多个资源(例如文件流、数据库连接等),当 try 块完成时,系统自动关闭这些资源,避免资源泄露。以下是一个简单的例子:

try (BufferedReader br = new BufferedReader(new FileReader(path))) {
    String line = br.readLine();
    while (line != null) {
        System.out.println(line);
        line = br.readLine();
    }
} catch (IOException e) {
    System.err.println("Failed to read file: " + e.getMessage());
}

在这个例子中,我们使用 try-with-resources 块来打开一个文件并读取它的内容。在 try 块完成后,系统将自动关闭文件流,无需人为干预。

2、多重 catch 块

多重 catch 块允许程序员为不同类型的异常编写不同的异常处理程序。在以下示例中,我们尝试连接到一个 URL,如果发生连接超时,则捕获 ConnectException;如果出现 IO 异常,则捕获 IOException;如果出现任何其他异常,则捕获 Exception。

try {
    URL url = new URL("http://www.example.com");
    URLConnection conn = url.openConnection();
    conn.connect();
} catch (ConnectException e) {
    System.err.println("Failed to connect to server: " + e.getMessage());
} catch (IOException e) {
    System.err.println("IO Exception: " + e.getMessage());
} catch (Exception e) {
    System.err.println("Caught exception: " + e.getMessage());
}

在实际应用程序中,可能需要针对更多的异常类型编写 catch 块,以确保应用程序能够更好地处理不同类型的异常情况。

3、抛出异常

除了捕获异常,Java 还允许程序员在方法中显式地抛出异常。这是一个有用的技术,因为它允许程序员将异常处理推迟到调用堆栈中更高级别的代码中。以下是一个简单的例子,演示如何显式抛出异常:

public static int divide(int a, int b) throws ArithmeticException {
    if (b == 0) {
        throw new ArithmeticException("Divide by zero");
    }
    return a / b;
}
 
public static void main(String[] args) {
    try {
        int result = divide(10, 0);
    } catch (ArithmeticException e) {
        System.err.println("Caught exception: " + e.getMessage());
    }
}

在这个例子中,我们定义了一个divide() 方法,用于将一个数除以另一个数。如果第二个数是零,则我们显式地抛出一个ArithmeticException 异常。在主程序中,我们调用divide() 方法,并使用 try-catch 块捕获异常。

总结

在 Java 编程中,异常处理是非常重要的一部分。除了基本的 try-catch 块,Java 还提供了一些其他的异常处理机制,例如 try-with-resources 块、多重 catch 块和显式抛出异常等。了解这些异常处理机制非常重要,因为它们可以帮助程序员更好地控制代码中的异常情况,以确保应用程序的健壮性和可靠性。

标签:Java,System,try,println,catch,异常
From: https://blog.51cto.com/u_15949341/6276925

相关文章

  • EME16 Software industry & market
    Softwareindustry&market16.1EconomicalcharacteristicsofsoftwareSoftwareevolutionSoftwarewillbeevolution,notinvolution.Hardwarewillbeworn-Bathtubcurve(1)Softwarewillbedeteriorated(退化)-Sailcurve(2)Themarginalcostof......
  • Java常见操作
    1交换两个变量的操作 eg.  public static void main(String[] args) { int m=10; int n=20; System.out.println("m="+m+",n="+n); //交换两个变量的值的操作 int temp=m; m=n; n=temp; }}2 交换数组中指定两个位置元素的值publuc void swap(i......
  • JavaScript 好书推荐
    javascript好书[^2022_V1]开始[^必学基础-红宝书]新手入门系统学习的书籍一:20年8月出版的[《JavaScript高级程序设计(第4版)》](JavaScript高级程序设计(第4版)(豆瓣)(douban.com))有电子版和纸质版。此书虽然是JS必学之一的红宝书,但章节安排欠佳(比如面对对象章节放于函数章......
  • java~"与运算"实现保留一个数的低8位
    int类型另外介绍int类型的封装类型是Integer类型,它是有符号的类型,即它有负数和正数两部分,最小为-232,最大值是232-1。int类型由32位二进制数组成,每4位二进制数表示为1位16进制数,每8位2进制数占用存储空间为1字节、即每2位16进制也占用1字节一个int类型的数字,占用32/8=4,占用的......
  • 5种你未必知道的JavaScript和CSS交互的方法
    随着浏览器不断的升级改进,CSS和JavaScript之间的界限越来越模糊。本来它们是负责着完全不同的功能,但最终,它们都属于网页前端技术,它们需要相互密切的合作。我们的网页中都有.js文件和.css文件,但这并不意味着CSS和js是独立不能交互的。下面要讲的这五种JavaScript和CSS共同合作的方......
  • Java多线程笔记
    Java多线程基本概念线程是操作系统能够调度的最小单位,他被包含再进程志宏,是进程中的实际运作单位进程进程是程序的基本执行实体并发和并行并发:在同一时刻,有多个指令在单个CPU上交替执行并行在同一时刻,有多个指令在多个CPU上同时执行多线程的实现方式继承Thread类的方式......
  • Java电影订票管理系统
    电影订票系统主要是为了实现电影院的电影信息能够实时的展现上映电影信息以及对顾客能够根据上映电影进行网上购票支付的系统。一个经典的电影订票系统一般都需要提供良好的交互界面页面,但由于还没有学习前端方面的知识,所以交互仍在控制台中。从功能上来看,需要包括网民可以通过电影......
  • 老杜 JavaWeb 讲解(六) ——Servlet对象的生命周期
    (八)Servlet对象的生命周期对应视频:10-Servlet对象的生命周期8.1什么是Servlet对象生命周期?Servlet对象什么时候被创建。Servlet对象什么时候被销毁。Servlet对象创建了几个?Servlet对象的生命周期表示:一个Servlet对象从出生在最后的死亡,整个过程是怎样的。8.2Servle......
  • java数组
    数组数组是相同类型数据的有序集合数组创建dataType[]arrayName或者dataTypearraName[];效果相同但是前者为首选例如:int[]a=newint[10];//声明+创建分配空间intb[]=newint[10];a[0]=1;//获取数组长度array.length内存分析java内存:堆:存放new的对象和......
  • Errors:java: 程序包org.springframework.stereotype不存在(解决方法)
    错误截图错误描述java:程序包org.springframework.stereotype不存在解决更改maven项目运行时的编译方式为maven找到File->Settings->Maven->Runner,进行勾选......