首页 > 编程语言 >Java异常代码处理代码示例

Java异常代码处理代码示例

时间:2024-03-26 12:58:06浏览次数:27  
标签:Java 示例 代码 System try println catch 异常 out

1.概念

在我们写代码时,除了会遇到编译错误,我们还会遇到文件不存在、网络连接失败、空指针引用等问题,为了使我们的程序能够运行下去,Java提供了异常处理机制。就是在我们的代码中可能会出现异常,但是这并不会影响到程序的运行。

在Java中我们有这些异常处理情况:

  • try-catch 块:try 块中包含可能抛出异常的代码,catch 块用于捕获并处理特定类型的异常。如果 try 块中的代码抛出异常,程序会跳转到对应的 catch 块进行异常处理,而不会导致程序崩溃。

  • throws 关键字:在方法声明中使用 throws 关键字可以声明该方法可能抛出的异常类型,将异常的处理责任交给调用该方法的代码。在调用带有 throws 关键字声明异常的方法时,调用方需要使用 try-catch 块或者继续向上层方法传递异常。

  • finally 块:finally 块中的代码无论是否发生异常都会被执行。通常用于释放资源或执行清理操作,比如关闭文件、数据库连接等。finally 块中的代码在 try-catch 块中的代码执行完毕后执行。

  • try-with-resources 语句:try-with-resources 语句用于自动关闭实现了 AutoCloseable 接口的资源,比如文件流、网络连接等。在 try-with-resources 语句中打开的资源会在 try 块结束时自动调用 close 方法进行资源释放,无需手动管理资源的关闭,避免了可能出现的资源泄露问题

2.代码示例

(1) try-catch块

我们先以处理除法,分母为零的情况为例

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("输入两个数:");
        int a = s.nextInt();
        int b = s.nextInt();
        try {
            divide(a, b);
        } catch (ArithmeticException e) {
            System.out.println("Cannot divide by zero!");
        }
    }

    public static void divide(int a, int b) throws ArithmeticException {
        if (b == 0) {
            throw new ArithmeticException("Division by zero");
        }
        System.out.println("Result: " + (a / b));
    }
}

我们在进行除法操作时,会出现分母为零的情况,当出现这种情况时,我们就使用 throw关键字 抛出一个分母为零的异常,接收到异常信息后,执行 catch语句 打印出错误信息提示。如果我们没有异常处理,在分母为零时我们代码在运行时就会直接报错然后终止,而我们做了异常处理,它会继续执行接下来的语句。这有助于使程序在遇到异常情况下能够进行适当的异常处理而不会导致程序崩溃。

(2)finally块

import java.io.*;

public class FinallyExample {

    public static void main(String[] args) {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("example.txt"));
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.out.println("An error occurred while reading the file: " + e.getMessage());
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
            } catch (IOException e) {
                System.out.println("Error closing the file: " + e.getMessage());
            }
        }
    }
}

在这里我们尝试读取文件中的内容,这里用 finally块去关闭文件,因为不管是否出现异常,finally块都会执行,确保了资源的正确释放。

(3)try-with-resources语句

像 if 语句,有 if- else if 这种结构,try-catch也同样有类似的语句,就是 try-with-resources语句。

public class TryWithResourcesExample {

    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (FileNotFoundException e) {
            System.out.println("File not found: " + e.getMessage());
        } catch (IOException e) {
            System.out.println("An error occurred while reading the file: " + e.getMessage());
        }
    }
}

我们使用 try-with-resources 语句初始化 BufferedReader 对象。在 try 块结束时,会自动调用 BufferedReader 的 close 方法来关闭文件流,无需手动处理资源释放。如果在读取文件时发生异常,catch 块将捕获并处理该异常。每一个 catch块 会捕获不同的异常,进行相应的操作。

这里我介绍一下常见的异常类:

  1. Checked Exception(受检异常):这些异常必须在代码中进行处理,要么通过 try-catch 块捕获和处理,要么通过 throws 关键字声明抛出。一般情况下,受检异常是程序无法控制并需要外部干预的异常情况,例如文件未找到、网络连接问题等。常见的受检异常包括:

    • IOException:表示输入输出操作遇到问题时抛出的异常。
    • FileNotFoundException:表示指定路径的文件未找到。
    • SQLException:表示与数据库相关的异常。
  2. Unchecked Exception(运行时异常):这些异常通常由程序错误或逻辑错误引起,不需要强制捕获处理,可以选择捕获处理或者让程序因异常而终止。常见的运行时异常包括:

    • NullPointerException:表示尝试访问空引用时抛出的异常。
    • ArithmeticException:表示数学运算错误,如除零操作。
    • ArrayIndexOutOfBoundsException:表示数组索引越界异常。

标签:Java,示例,代码,System,try,println,catch,异常,out
From: https://blog.csdn.net/2301_80284166/article/details/137033984

相关文章

  • asp net在View视图下通过javascript访问服务器上的文件
    以通过javascript访问服务器上的文件为例控制器:[HttpPost]publicActionResultCheckFileExists(stringaFile){//检查文件是否存在if(System.IO.File.Exists(aFile))//theFile包括完整的路径和文件{returnContent("文件存在");}else{......
  • java计算机毕业设计(附源码)新知书店(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:新知书店,作为一家专注于传播知识和文化的零售场所,承载着促进社会文化发展和满足人们精神需求的重要使命。在数字化时代背景下,实体书店面临着前所未有的挑......
  • 英特尔开发套件“哪吒”快速部署YoloV8 on Java
    作者:英特尔创新大使黄明明0.前言OpenVINO™工具套件基于OneAPI开发,可以加快高性能计算机视觉和深度学习应用开发速度的工具套件,适用于从边缘到云的各种英特尔计算平台上,帮助用户更快地将更准确的真实世界数据的AI推理结果部署到生产系统中。通过简化的开发工作流程,OpenV......
  • JAVA接口详解
    一,抽象类抽象类为用abstract修饰的类1,定义的成员变量与普通的类没有区别2,抽象类不可以被实例化3,当一个类不具体描述某个对象时,可以定义为抽象类4,如果一个类包含抽象方法,则这个类必须是抽象类,没有抽象方法,也可以被称为抽象类5,一个方法可以被修饰为abstract,这个方法可以不......
  • Java基础语法(三)
    1.if语句1.1格式一 if(关系表达式){  语句体;   }执行流程    ①首先计算关系表达式的值    ②如果关系表达式的值为true就执行语句体    ③如果关系表达式的值为false就不执行语句体    ④继续执行后面的语句内容......
  • [开源初探]screenshot-to-code:将截图转化为代码
    介绍说明将截图转化为 HTML 代码的工具。该项目可以将屏幕截图转化为 HTML/JS/TailwindCSS 代码,它使用 GPT-4Vision 生成代码、DALL-E3 生成相似的图片。 安装运行为了方便演示及保持原有系统的简洁,将使用 docker 的方式来安装运行 screenshot-to-code。由于项......
  • Java中的运算符使用
    运算符算术运算符+ - * / %++ --不要使用小数进行相等判断++:一元运算符,把原数据加1,再放回去。例:i++等价于 i=i+1;i++或++i单独出现时,没有区别,都是直接加1就行。i++;++i;当参与混合运算时,i++是先使用后加1,++i是先加1后使用。当一个计算公式中,出......
  • UE4.27, 代码实践, 资源加载 FSoftClassPath / FSoftObjectPath
    //以下的FSoftClassPath/FSoftObjectPath都公开在Editor里设定 //iteminTArray<FSoftClassPath>FSoftClassPathtemp=FSoftClassPath_UsedInBluePrint_BuildFunc(item);UClass*LoadedClass=temp.TryLoadClass<AActor>();FSoftClassPathFSoftClassPath_UsedInBlu......
  • 卡码java基础课 | 21.图形的面积(面向对象)
    学习内容:面向对象的特性,封装、继承、多态。重点归纳:成员变量的定义:访问修饰符、数据类型、变量名。访问修饰符,private只能类内部使用,protected只能类内部和子类使用,public可以从任何地方访问。方法:访问修饰符、返回类型、方法名、参数列表。以及构造函数。1.封装:通过将属性设......
  • java打包docker镜像
    参考:https://blog.csdn.net/liuxianwen1990/article/details/136256490 1,把jar包复制/opt/test,cd到这个目录下 2,创建Dockerfile文件,jdk8版本vimDockerfileFROMopenjdk:8-jre-alpineCOPYdemo-0.0.1-SNAPSHOT.jardemo-0.0.1-SNAPSHOT.jarCMD["java","-jar&q......