【JAVA】我们该如何规避代码中可能出现的错误?(二)

简介: 【JAVA】我们该如何规避代码中可能出现的错误?(二)

前言

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误00有时候是可以避免的,学习一些异常处理方式往往可以使我们编程的时间大大减少。

注:本文为系列文章,前文可点击观看➡️【JAVA】我们该如何规避代码中可能出现的错误?(一)

异常方法(Throwable类)

Java中的Throwable类是所有错误或异常的父类,它有两个子类:Exception和Error。Exception表示程序可以处理的异常,而Error表示程序无法处理的错误。

Throwable类定义了许多方法来获取异常信息,例如getMessage()方法可以获取异常的描述信息,getStackTrace()方法可以获取异常发生时调用堆栈中的信息,toString()方法可以将异常转换为字符串。子类可以根据需要覆盖这些方法来提供特定的异常信息。

通常情况下,在Java程序中抛出异常时,可以使用try-catch语句捕获异常并进行处理。如果没有处理异常,程序将会终止并输出异常信息。当然也可以使用throws关键字将异常抛给上层调用者处理。

Throwable类的方法

public String getMessage()

返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。

public Throwable getCause()

返回一个 Throwable 对象代表异常原因。

public String toString()

返回此 Throwable 的简短描述。

public void printStackTrace()

将此 Throwable 及其回溯打印到标准错误流。。

public StackTraceElement [] getStackTrace()

返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。

public Throwable fillInStackTrace()

用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中。

捕获异常

try
{
   // 程序代码
}catch(ExceptionName e1)
{
   //Catch 块
}

在Java中,捕获异常是通过try-catch语句块实现的。try语句块中包含可能抛出异常的代码,catch语句块中处理异常。如果try语句块中的代码抛出异常,则会尝试寻找与异常类型匹配的catch语句块来处理异常。在catch语句块中,可以使用异常对象的信息来执行任何必要的操作,例如输出错误消息、记录日志或恢复程序执行。

try {
    // 可能抛出异常的代码
    int x = 10/0; // 除以0将会抛出一个ArithmeticException异常
} catch (ArithmeticException e) {
    // 处理异常
    System.out.println("发生异常:" + e.getMessage());
    e.printStackTrace();
}

在上面的例子中,当执行10/0操作时,将会抛出一个ArithmeticException异常。catch语句块中的代码将处理该异常,输出错误消息并打印异常堆栈跟踪信息。

多重捕获块

一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获。

多重捕获块的语法如下所示:

try{
   // 程序代码
}catch(异常类型1 异常的变量名1){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}catch(异常类型3 异常的变量名3){
  // 程序代码
}

上面的代码段包含了 3 个 catch块。

可以在 try 语句后面添加任意数量的 catch 块。

如果保护代码中发生异常,异常被抛给第一个 catch 块。

如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。

如果不匹配,它会被传递给第二个 catch 块。

如此,直到异常被捕获或者通过所有的 catch 块。


相关文章
|
11月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
721 6
|
11月前
|
Java 数据处理 API
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
450 115
|
11月前
|
安全 Java 编译器
为什么你的Java代码需要泛型?类型安全的艺术
为什么你的Java代码需要泛型?类型安全的艺术
348 98
|
11月前
|
Java 编译器 API
java最新版和java8的区别,用代码展示
java最新版和java8的区别,用代码展示
761 43
|
11月前
|
安全 Java 容器
告别空指针噩梦:Optional让Java代码更优雅
告别空指针噩梦:Optional让Java代码更优雅
593 94
|
11月前
|
安全 Java 容器
告别繁琐判空:Optional让你的Java代码更优雅
告别繁琐判空:Optional让你的Java代码更优雅
|
12月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
1399 3
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
1308 3
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
814 0