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

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

前言

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

三种类型的异常

  • 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
  • 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
  • 错误错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

异常处理

Java中的异常处理是一种机制,用于处理程序中可能出现的错误和异常。当程序遇到错误或异常时,它会产生一个异常对象,并抛出该对象,然后程序控制权就会被传递到相应的异常处理程序中。

主要步骤:

  1. 在程序中可能发生异常的代码周围使用try-catch语句块。
  2. 在try语句块中包含可能产生异常的代码。
  3. 在catch语句块中编写处理异常的代码。
  4. 可以使用多个catch块来处理不同类型的异常
  5. 可以使用finally语句块来在任何情况下执行某些代码(例如关闭文件或释放资源)。

try {
    // 可能会抛出异常的代码
} catch (ExceptionType1 ex) {
    // 处理类型为ExceptionType1的异常
} catch (ExceptionType2 ex) {
    // 处理类型为ExceptionType2的异常
} finally {
    // 在try或catch块结束后一定会执行的代码
}

我们使用了一个try-catch-finally语句块来处理可能出现的异常。如果try块中的代码抛出了类型为ExceptionType1的异常,那么程序将跳转到第一个catch块,并执行相应的异常处理代码。如果try块中的代码抛出了类型为ExceptionType2的异常,那么程序将跳转到第二个catch块,并执行相应的异常处理代码。无论在try块中发生了什么,finally块中的代码都会被执行

JAVA内置异常类

为了处理可能出现的异常,Java提供了一些内置的异常类

Java 语言定义的一些异常类在 java.lang 标准包中。

标准运行时异常类的子类是最常见的异常类。由于 java.lang 包是默认加载到所有的 Java 程序的,所以大部分从运行时异常类继承而来的异常都可以直接使用。

常见的Java内置异常类:

ArithmeticException:数学运算异常,例如除以零操作。

ArrayIndexOutOfBoundsException:数组下标越界异常,例如访问不存在的数组元素。

ClassNotFoundException:类找不到异常,例如使用Class.forName()方法时,找不到所需的类。

IOException:输入输出异常,例如读取或写入文件时发生的异常。

NullPointerException:空指针异常,例如调用空对象的方法或属性。

IllegalArgumentException:非法参数异常,例如传递给方法的参数不合法。

InterruptedException:线程中断异常,例如调用Thread.sleep()方法时,线程被其他线程中断。

RuntimeException:运行时异常,例如在程序运行过程中发生的未知异常。

每个异常类都有自己的特点和处理方式,处理异常是Java编程中的一个重要概念

Exception 类的层次

所有的异常类是从 java.lang.Exception 类继承的子类。

Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。

Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外

Error 用来指示运行时环境发生的错误。

例如,JVM 内存溢出。一般地,程序不会从错误中恢复。

异常类有两个主要的子类:IOException 类和 RuntimeException 类。


目录
相关文章
|
1天前
|
Java
Java 继承与多态:代码重用与灵活性的巧妙结合
在 Java 中,可以从一个类继承属性和方法到另一个类。我们将“继承概念”分为两类: 子类(child): 从另一个类继承的类 超类(parent): 被继承的类 要从一个类继承,使用 extends 关键字。
40 2
|
2天前
|
存储 Oracle Java
Java 包和 API 深度解析:组织代码,避免命名冲突
Java 中的包 用于将相关的类分组在一起。可以将其视为文件目录中的一个文件夹。我们使用包来避免名称冲突,并编写更易于维护的代码。 包分为两类: 内置包(来自 Java API 的包) 用户定义的包(创建自己的包)
176 2
|
5天前
|
Java Linux 数据安全/隐私保护
Java【代码 16】将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
【2月更文挑战第3天】Java 将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
27 0
|
9天前
|
Java 测试技术
|
9天前
|
人工智能 文字识别 Java
AI工具【OCR 01】Java可使用的OCR工具Tess4J使用举例(身份证信息识别核心代码及信息提取方法分享)
【2月更文挑战第1天】Lept4J和Tess4J都是基于Tesseract OCR引擎的Java接口,可以用来识别图像中的文本,本次介绍Tess4J
37 0
|
10天前
|
NoSQL Java MongoDB
java 连接mongodb的样例代码
java 连接mongodb的样例代码
|
2月前
|
设计模式 Java 程序员
优雅整洁的 Java 代码命名技巧,风之极·净化
优雅整洁的 Java 代码命名技巧,风之极·净化
97 0
|
2月前
|
Java
用Java编写一个代码实现计算器功能
【1月更文挑战第17天】用Java编写一个代码实现计算器功能
16 0
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
|
2月前
|
Java
数据结构 AVL树概念以及实现插入的功能(含Java代码实现)
数据结构 AVL树概念以及实现插入的功能(含Java代码实现)
28 0

相关产品

  • 云迁移中心