异常-Exception

news2024/12/23 11:08:26

文章目录

  • 异常-Exception
    • 常见的运行时异常
      • NullPointerException(空指针异常)
      • ArithmeticException(数学运算异常)
      • ArrayIndexOutOfBoundsException(数组下标越界异常)
      • ClassCastException(类型转换异常)
      • NumberFormatException(数字格式异常)
    • 常见的编译异常
      • IOException
      • SQLException
      • ClassNotFoundException
      • NoSuchMethodException 和 NoSuchFieldException
      • InterruptedException
    • 异常处理机制
      • try-catch
      • throws
    • 自定义异常

异常-Exception

Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)

执行过程中所发生的异常事件可分为两大类

1)Error(错误):Java虚拟机无法解决的严重问题。如JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError(栈溢出)和OOM(out of memory),Error是严重错误,程序会崩溃。

2)Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问,试图读取不存在的文件等等,Exception分为两大类:运行时异常和编译时异常。

请添加图片描述

常见的运行时异常

NullPointerException(空指针异常)

当应用程序试图在需要对象的地方使用 null,这种异常就会发生。例如,调用 null 对象的实例方法、访问 null 对象的属性、计算 null 对象的长度、使用 throw 语句抛出 null 等情况。

Object obj = null;
obj.toString(); // 这将抛出 NullPointerException

ArithmeticException(数学运算异常)

  1. 当出现异常的运算条件时,例如除以零,这种异常就会发生。
int result = 10 / 0; // 这将抛出 ArithmeticException

ArrayIndexOutOfBoundsException(数组下标越界异常)

如果数组的索引为负或大于等于数组大小,那么这种异常就会发生。

int[] array = new int[10];
int number = array[10]; // 这将抛出 ArrayIndexOutOfBoundsException

ClassCastException(类型转换异常)

当试图将对象强制转换为不是实例的子类时,这种异常就会发生。

Object x = new Integer(0);
System.out.println((String)x); // 这将抛出 ClassCastException

NumberFormatException(数字格式异常)

当试图将一个不适合特定数字格式的字符串转换为该格式的数字时,这种异常就会发生。

int num = Integer.parseInt("XYZ"); // 这将抛出 NumberFormatException

以上这些都是运行时异常,也就是 RuntimeException 的子类,Java编译器不会检查它们。但是,良好的编程和设计实践通常是尽量避免这些异常的发生,或者在它们发生时能够适当地处理。

常见的编译异常

IOException

这是发生I/O错误产生的异常,比如读写文件时发生的异常。这类异常通常涉及到文件、网络、数据库等I/O操作。

try {
    FileReader reader = new FileReader("somefile.txt");
} catch (IOException e) {
    e.printStackTrace();
}

SQLException

这是处理数据库操作时可能发生的异常。

try {
    connection = DriverManager.getConnection("jdbc:mysql://localhost/test", "user", "password");
} catch (SQLException e) {
    e.printStackTrace();
}

ClassNotFoundException

当应用程序试图通过字符串名称加载类,而在类路径中找不到这个类时,抛出该异常。

try {
    Class.forName("com.example.NonExistentClass");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

NoSuchMethodException 和 NoSuchFieldException

当访问一个不存在的方法或字段时,抛出这类异常。

try {
    Class clazz = Class.forName("java.lang.String");
    Method method = clazz.getMethod("nonExistentMethod");
} catch (NoSuchMethodException | ClassNotFoundException e) {
    e.printStackTrace();
}

InterruptedException

当一个线程处于睡眠、等待或占用,并且被中断时,抛出该异常。

try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

这些都是必须处理的异常,如果不处理,编译器就会报错。这是Java设计者为了提高Java程序的健壮性而采取的一种策略,通过强制程序员处理可能出现的异常,使得Java程序能更好地应对错误情况。

异常处理机制

try-catch

try-catch是Java中用来捕获和处理异常的主要机制。

  • try块包含可能会抛出异常的代码。如果在try块中的代码抛出了异常,那么与之匹配的catch块就会被执行。
  • catch块用于捕获和处理特定类型的异常。你可以为不同类型的异常提供不同的catch块。
  • finally块是可选的,包含在任何情况下都需要执行的代码,无论是否发生异常。
try {
    // 可能会抛出异常的代码
} catch (IOException e) {
    // 处理IOException的代码
} catch (SQLException e) {
    // 处理SQLException的代码
} finally {
    // 无论是否发生异常都会执行的代码
}

快捷键:ctrl + atl + t

throws

throws关键字用于在方法声明中指示该方法可能会抛出哪些类型的异常。这些异常可能是Java库中的异常,也可能是你自定义的异常。使用throws关键字可以将异常的处理责任传递给方法的调用者

在方法中声明用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类

public void readFile() throws Exception {
    // 可能会抛出Exception的代码
}

注意事项:

1)对于编译异常,程序中必须处理(使用try-catch或者throws)。

2)对于运行时异常,程序中如果没有处理,默认就是throws的方式处理。

3)子类重写父类的方法时,所抛出的异常要么与父类抛出的异常一致,要么为父类抛出异常的子类型。

4)在throws过程中,如果有try-catch,就相当于异常处理,就不必使用throws。

自定义异常

在Java中,可以通过继承现有的异常类来创建自定义异常。自定义异常可以让你更准确地表示程序中可能出现的特定错误条件,这有助于提高代码的可读性和可维护性。

创建自定义异常通常涉及以下步骤:

  1. 创建一个新的类,这个类应该继承自Exception类(用于编译时异常)或RuntimeException类(用于运行时异常)。
  2. 添加构造方法,这些构造方法应该调用父类的构造方法。通常,你至少需要提供两个构造方法:一个无参数的构造方法,和一个带有字符串参数的构造方法。字符串参数用于提供关于异常的详细信息。
  3. (可选)添加自定义字段和方法,这些字段和方法可以提供关于异常的额外信息。

以下是一个自定义异常的例子:

public class CustomException {
    public static void main(String[] args) throws AgeException {
        int age = 180;
        //要求范围在 18 – 120  之间,否则抛出一个自定义异常
        if(!(age >= 18 && age <= 120)) {
            //这里我们可以通过构造器,设置信息
            throw new AgeException("年龄需要在 18~120 之间");
        }
        System.out.println("你的年龄范围正确.");
    }
}

class AgeException extends RuntimeException { 
    public AgeException(String message) {	//构造器
        super(message);
    }
}

throw 和 throws 的区别:

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1501362.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS补充(下),弹性布局(上)

高级选择器 1.兄弟选择器 2.同时满足 div.bg{background-color: red;}p.bg{background-color: green;}spam.bg{background-color: blue;}注&#xff1a;选择器中间没有空格&#xff0c;有明确标识的选择器写在后面 3.各种伪类的应用 3.1作为第几个子元素 选择器:nth-child…

Windows的自动更新和自带的杀毒软件怎么弄掉!

关闭Windows系统更新 Windows系统更新是为了保持设备的平稳和安全运行,保持操作系统安全、稳定及获取新功能修复已知问题并修补安全漏洞的重要过程。如果您想要临时或永久关闭Windows系统的自动更新,可以采用以下几种方式。不过,请务必意识到,禁用系统更新可能会导致您的系…

Java多线程——如何保证原子性

目录 引出原子性保障原子性CAS 创建线程有几种方式&#xff1f;方式1&#xff1a;继承Thread创建线程方式2&#xff1a;通过Runnable方式3&#xff1a;通过Callable创建线程方式4&#xff1a;通过线程池概述ThreadPoolExecutor API代码实现源码分析工作原理&#xff1a;线程池的…

【C++ STL详解】——string类

目录 前言 一、string类对象的常见构造 二、string类对象的访问及遍历 1.下标【】&#xff08;底层operator【】函数&#xff09; ​编辑 2.迭代器 3.范围for 4.at 5.back和front 三、string类对象的容量操作 1.size 和 length 2.capacity 3.empty 4.clear 5.res…

Xilinx 7系列 FPGA硬件知识系列(九)——FPGA的配置

1.3 端口配置 每组配置模式都有一组特定的接口管脚&#xff0c;它们跨越7系列FPGA上的一个或多个I/O BANK。7系列器件支持3.3V、2.5V、1.8V或1.5V的I/O配置&#xff0c;包括&#xff1a; BANK 0 中的JTAG管脚、BANK0中的专用配置管脚 BANK14和BANK15中与特定配置模式相关的管…

2024 批量下载公众号文章内容/阅读数/在看数/点赞数/留言数/粉丝数导出pdf文章备份(带留言):公众号半佛仙人近1500篇历史文章在线查看,找文章方便了

关于公众号文章批量下载&#xff0c;我之前写过很多文章&#xff1a; 视频更新版&#xff1a;批量下载公众号文章内容/话题/图片/封面/音频/视频&#xff0c;导出html&#xff0c;pdf&#xff0c;excel包含阅读数/点赞数/留言数 2021陶博士2006/caoz的梦呓/刘备我祖/六神读金…

包含字母数字及特殊字符 三种组合的正则两种写法

//长度8~16位&#xff1b;包含字母、数字及特殊字符 #$%^&*_-//正则1 写法&#xff1a;let reg_1 /^(?![A-Za-z0-9]$)^(?![A-Za-z#$\%^&*_\-]$)^(?![0-9#$\%^&_*\-]$)([A-Za-z0-9#$\%^&*_\-]{8,16})$///正则2 写法&#xff1a;let reg_2 /^(?![A-Za-z#$%…

在别的地方下载的二次封装Windows镜像怎么安装?GHO镜像详细安装教程

前言 在系统之家或者其他地方下载的镜像文件怎么装到电脑上&#xff1f; 首先要知道系统之家下载的Windows镜像文件基本上都是.iso结尾的&#xff0c;要进入到对应镜像包才能看出系统镜像是什么格式。 如何分辨镜像的格式 选择对应的.iso镜像&#xff0c;点击【鼠标右键】-【装…

力扣大厂热门面试算法题 9-11

9. 回文数&#xff0c;10. 正则表达式匹配&#xff0c;11. 盛最多水的容器&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.08 可通过leetcode所有测试用例。 目录 9. 回文数 解题思路 完整代码 Java Python 10. 正则表达式…

3dmax渲染出来是黑色的怎么办?

灯光问题&#xff1a;渲染场景中的灯光可能全部关闭&#xff0c;包括默认灯光&#xff0c;或者手动添加的灯光没有开启全局光照&#xff08;GI&#xff09;。解决方法是检查并开启场景中的灯光&#xff0c;确保全局光照已开启。 摄像机问题&#xff1a;摄像机可能被黑色对象挡…

golang 注释插件

Goanno插件 自动生成golang注释,该插件为 Intellij/Goland 中的 golang 提供自动生成注释 如何使用&#xff1f; control command / (for windows: control alt /)&#xff08;生成注释&#xff09;Right click -> Generate -> Goanno&#xff08;生成注释&#x…

系统架构设计师 2023年 案例分析

一、大数据架构 Lambda架构和Kappa架构 某网作为某电视台在互联网上的大型门户入口,某一年成为某奥运会中国大陆地区的特权转播商,独家全程直播了某奥运会全部的赛事,积累了庞大稳定的用户群,这些用户在使用各类服务过程中产生了大量数据,对这些海量数据进行分析与挖掘,将…

重学SpringBoot3-WebMvcAutoConfiguration类

重学SpringBoot3-WebMvcAutoConfiguration类 是什么什么用生效条件作用 自定义配置的三种方式自定义配置举例1. 自定义 DispatcherServlet 配置2. 静态资源配置3. 自定义MVC配置4. 消息转换器5. 异常处理 是什么 org.springframework.boot.autoconfigure.web.servlet.WebMvcAut…

Linux mmap系统调用

文章目录 前言一、mmap()函数简介二、代码演示2.1 mmap使用场景2.2 私有匿名映射2.3 私有文件映射2.4 共享匿名映射2.5 共享文件映射 参考 前言 NAMEmmap, munmap - map or unmap files or devices into memorySYNOPSIS#include <sys/mman.h>void *mmap(void *addr, siz…

AcWing 505. 火柴排队(每日一题)

目录 题目链接&#xff1a;505. 火柴排队 - AcWing题库 解题思路&#xff1a; 离散化&#xff1a; 归并排序求逆序对&#xff1a; 总代码&#xff1a; 题目链接&#xff1a;505. 火柴排队 - AcWing题库 涵涵有两盒火柴&#xff0c;每盒装有 n 根火柴&#xff0c;每根火柴…

牛客小白月赛88

E.多重映射 解题思路 对集合进行整体操作&#xff0c;集合大小只增不减&#xff0c;问最后集合标号维护集合&#xff0c;考虑并查集但直接用并差集维护会有以下问题&#xff1a;当前集合变标号&#xff0c;可能会和之前标号相同&#xff0c;则进行并查集操作时&#xff0c;会接…

在Linux(Ubuntu)中使用终端编译 vscode安装

文章目录 &#x1f4da;在Linux&#xff08;Ubuntu&#xff09;中使用终端编译&#x1f407;.cpp程序编译&#x1f407;.py程序编译&#x1f407;查看Python、C编程环境 &#x1f4da;vscode安装 &#x1f4da;在Linux&#xff08;Ubuntu&#xff09;中使用终端编译 虚拟机安装…

VR全景技术在VR看房中有哪些应用,能带来哪些好处

引言&#xff1a; 随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术在房地产行业中的应用也越来越广泛。其中&#xff0c;VR全景技术在VR看房中的运用尤为突出。今天&#xff0c;让我们一起深入探讨VR全景技术在VR看房中的应用及其带来的种种好处。 一、…

博特激光——激光打标机工作原理介绍

激光打标机&#xff0c;作为现代标识技术的杰出代表&#xff0c;其工作原理的高效与精确性使得它在众多行业中占据了举足轻重的地位。今天&#xff0c;我们将深入探讨激光打标机的工作原理及其背后的科技魅力。 激光打标机的工作原理主要基于激光的高能量和聚焦特性。首先&…

Python实现归并排序算法

Python实现归并排序算法 以下是 Python 中的归并排序算法实现示例&#xff1a; def merge_sort(arr):if len(arr) > 1:mid len(arr) // 2 # 计算中间索引left_half arr[:mid] # 划分左半部分right_half arr[mid:] # 划分右半部分# 递归调用对左右两半进行排序me…