Java 异常(Throwable)

1. Throwable

Throwable: 所有异常和错误的根类。实现 Throwable 或其子类的对象才能被 throw 或 catch。
Error: 表示严重的系统级问题,通常不应该被捕获或处理,程序通常无法从中恢复。
Exception: 表示程序可以处理的问题。分为 运行时异常、 受检异常 两类。
运行时异常: 不强制要求 try-catch 处理。通常是程序逻辑错误。
受检异常: 编译时必须处理(try-catch 或 throws)。表示外部环境问题或可恢复的异常。

java.lang.Throwable : 
├── java.lang.Error : 错误
│   ├── java.lang.VirtualMachineError : JVM 出现严重问题
│   │   ├── java.lang.OutOfMemoryError : 内存不足
│   │   ├── java.lang.StackOverflowError : 栈溢出
│   │   ├── java.lang.UnknownError : 未知的虚拟机错误
│   │   └── ...
│   ├── java.lang.LinkageError : 类依赖问题
│   │   ├── java.lang.ClassFormatError : 类文件格式错误
│   │   ├── java.lang.NoClassDefFoundError : 类在编译时存在,运行时找不到
│   │   ├── java.lang.UnsupportedClassVersionError : JVM 版本不支持该类版本
│   │   └── ...
│   ├── java.lang.ThreadDeath : 线程被终止(调用 thread.stop())
│   ├── java.lang.ExceptionInInitializerError : 静态初始化出错
│   └── ...
│
└── java.lang.Exception : 异常├── java.lang.RuntimeException : 运行时异常│   ├── java.lang.ArithmeticException : 算术异常(除0)│   ├── java.lang.ArrayStoreException : 数组存储类型不匹配│   ├── java.lang.ClassCastException : 类型转换异常│   ├── java.lang.IllegalArgumentException : 非法参数│   │   ├── java.lang.NumberFormatException : 字符串转数字失败│   │   └── ...│   ├── java.lang.IndexOutOfBoundsException : 索引越界│   │   ├── java.lang.ArrayIndexOutOfBoundsException : 数组索引越界│   │   └── java.lang.StringIndexOutOfBoundsException : 字符串索引越界(charAt, substring, indexOf, codePointAt)│   ├── java.lang.NullPointerException : 访问孔对象的属性或方法│   ├── java.lang.SecurityException : 安全限制阻止操作│   └── ...│├── java.io.IOException : I/O异常(受检异常)│   ├── java.io.FileNotFoundException : 文件不存在│   ├── java.io.InterruptedIOException : I/O被中断│   └── ...│├── java.lang.ClassNotFoundException : 找不到类├── java.lang.CloneNotSupportedException : 不允许克隆├── java.lang.IllegalAccessException : 访问权限不足├── java.lang.InstantiationException : 无法实例化类├── java.lang.NoSuchFieldException : 字段不存在├── java.lang.NoSuchMethodException : 方法不存在├── java.sql.SQLException : 数据库操作失败└── 自定义异常(如:MyException)

2. 自定义异常

可以根据需要定义自己的异常类,通常继承 Exception(受检)或 RuntimeException(非受检)。

// 自定义受检异常
public class MyException extends Exception {public MyException(String message) {super(message);}
}// 自定义运行时异常
public class MyRuntimeException extends RuntimeException {public MyRuntimeException(String message) {super(message);}
}

3. ArithmeticException 算术异常

数学运算中出现异常情况 时抛出,例如 整数除以零 或 取模运算时除数为零。
浮点数除0不会抛异常,返回Infinity。

/*** ArithmeticException: 算术异常*/
public static void test_ArithmeticException() {try {// 除 0System.out.println(10/0);} catch (ArithmeticException e) {// java.lang.ArithmeticException: / by zeroe.printStackTrace();}// 浮点数除0不会抛异常!!!double result = 10.0 / 0.0;System.out.println(result);  // Infinity
}

4. ArrayStoreException 数组存储类型不匹配

将一个类型不兼容的对象插入到数组中时,在运行时抛出 ArrayStoreException。

/*** ArrayStoreException: 数组存储类型不匹配*/
public static void test_ArrayStoreException() {try {Object[] strings = new String[3];strings[0] = "hello";// 尝试将一个非 String 类型的元素放入数组strings[1] = 123;} catch (ArrayStoreException e) {// java.lang.ArrayStoreException: java.lang.Integere.printStackTrace();}
}

5. ClassCastException 类型转换异常

将一个对象转换为它不兼容的类型时,Java 就会在运行时抛出 ClassCastException。

/*** ClassCastException: 类型转换异常*/
public static void test_ClassCastException() {try {Object obj = new Integer(10);// 尝试向下转型为不兼容的类型String str = (String) obj;System.out.println(str);} catch (ClassCastException e) {// java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Stringe.printStackTrace();}
}

6. IllegalArgumentException 类型转换异常

在 方法接收到非法或不合适的参数值 时抛出,表示传入的参数不符合方法的预期要求。

/*** IllegalArgumentException: 非法参数*/
public static void test_IllegalArgumentException(int i) {try {if(i > 5) {// 手动抛出throw new IllegalArgumentException("传入参数值不能超过5");}} catch (IllegalArgumentException e) {// java.lang.IllegalArgumentException: 传入参数值不能超过5e.printStackTrace();}
}

7. NumberFormatException 字符串转数字失败

将字符串转换为数值类型(如 int、double 等)失败时抛出。

/*** NumberFormatException: 字符串转数字失败*/
public static void test_NumberFormatException() {try {String str = "123abc";Integer.parseInt(str);} catch (NumberFormatException e) {// java.lang.NumberFormatException: For input string: "123abc"e.printStackTrace();}
}

8. ArrayIndexOutOfBoundsException 数组越界异常

访问数组元素时使用了非法索引(负数或大于等于数组长度的值) 时抛出。

/*** ArrayIndexOutOfBoundsException: 数组越界异常*/
public static void test_ArrayIndexOutOfBoundsException() {try {Integer[] integers = new Integer[5];integers[5] = 0;} catch (ArrayIndexOutOfBoundsException e) {// java.lang.ArrayIndexOutOfBoundsException: 5e.printStackTrace();}
}

9. StringIndexOutOfBoundsException 字符串越界异常

访问字符串中字符时使用了非法索引(负数或大于等于字符串长度) 时抛出。

/*** StringIndexOutOfBoundsException: 字符串越界异常*/
public static void test_StringIndexOutOfBoundsException() {try {String s = "12345";s.charAt(5);} catch (StringIndexOutOfBoundsException e) {// java.lang.StringIndexOutOfBoundsException: String index out of range: 5e.printStackTrace();}
}

10. NullPointerException 空指针异常

尝试在 一个为 null 的对象引用上调用方法或访问属性 时,就会抛出 NullPointerException。

/*** NullPointerException: 空指针异常*/
public static void test_NullPointerException() {try {String s = null;s.length();} catch (NullPointerException e) {// java.lang.NullPointerExceptione.printStackTrace();}
}

11. SecurityException 安全限制阻止操作

程序试图执行某些受安全管理器限制的操作时抛出。

/*** SecurityException: 安全限制阻止操作*/
public static void test_SecurityException() {// 设置一个安全管理器System.setSecurityManager(new SecurityManager());try {String property = System.getProperty("user.name");System.out.println(property);} catch (SecurityException e) {// java.security.AccessControlException: access denied ("java.util.PropertyPermission" "user.name" "read")e.printStackTrace();}
}

12. IOException IO异常(受检异常)

在进行文件读写、网络通信、流操作等 I/O 操作时抛出。

  • FileNotFoundException: 试图打开一个不存在的文件 或 路径无效 时抛出的异常。
  • InterruptedIOException: I/O 操作被中断(线程被中断)时抛出。
/*** IOException: IO异常(受检异常)*/
public static void test_IOException() {// 设置一个安全管理器try {FileReader fileReader = new FileReader("file.txt");int read = fileReader.read();while(read != -1) {System.out.println((char)read);read = fileReader.read();}fileReader.close();} catch (IOException e) {// FileNotFoundException 文件不存在异常// java.io.FileNotFoundException: file.txt (系统找不到指定的文件。)e.printStackTrace();}
}/***  InterruptedIOException: I/O 操作中断*/
public static void test_InterruptedIOException() {Thread ioThread = new Thread(() -> {try (InputStream is = new PipedInputStream()) {System.out.println("开始读取...");is.read(); // 阻塞等待输入} catch (InterruptedIOException e) {System.out.println("I/O 操作被中断: " + e.getMessage());} catch (IOException e) {// java.io.IOException: Pipe not connectede.printStackTrace();}});ioThread.start();// 中断线程ioThread.interrupt();
}

13. ClassNotFoundException 找不到类(受检异常)

该异常通常在 使用类名字符串动态加载类(如通过 Class.forName())时抛出。

/*** ClassNotFoundException: 找不到类*/
public static void test_ClassNotFoundException() {try {// 尝试加载一个不存在的类Class<?> clazz = Class.forName("com.example.NonExistentClass");} catch (ClassNotFoundException e) {// java.lang.ClassNotFoundException: com.example.NonExistentClasse.printStackTrace();}
}

14. CloneNotSupportedException 不允许克隆(受检异常)

该异常通常在调用 Object.clone() 方法时,如果对象的类 没有实现 Cloneable 接口,就会抛出。

// class Person implements Cloneable
// 没有实现 Cloneable 是不允许调用 clone 进行克隆的
static class Person {String name;public Person(String name) {this.name = name;}@Overridepublic Person clone() throws CloneNotSupportedException {return (Person) super.clone();}
}/*** CloneNotSupportedException : 不允许克隆*/
public static void test_CloneNotSupportedException() {Person p1 = new Person("Alice");try {Person p2 = (Person) p1.clone();} catch (CloneNotSupportedException e) {// java.lang.CloneNotSupportedException: com.lkm.test.Test_Throwable$Persone.printStackTrace();}
}

15. IllegalAccessException 访问权限不足(受检异常)

在运行时通过反射机制尝试访问类、方法、字段等成员时,如果该成员的访问权限不足(例如是 private),并且没有通过 setAccessible(true) 显式开启访问权限,就会抛出该异常。

/*** IllegalAccessException : 访问权限不足*/
public static void test_IllegalAccessException() {class Person {private String name = "Alice";}try {Person person = new Person();Field field = person.getClass().getDeclaredField("name");// 尝试获取私有字段的值,但未设置可访问System.out.println(field.get(person)); // 抛出 IllegalAccessException} catch (NoSuchFieldException | IllegalAccessException e) {// java.lang.IllegalAccessException: Class com.lkm.test.Test_Throwable can not access a member of class com.lkm.test.Test_Throwable$1Person with modifiers "private"e.printStackTrace();}
}

16. InstantiationException 无法实例化类(受检异常)

通常在使用 反射机制 创建类的实例时抛出,尤其是在调用 Class.newInstance() 或 Constructor.newInstance() 时,如果目标类无法被实例化,就会抛出这个异常。

  • 类是抽象类(abstract):抽象类不能直接实例化
  • 类是接口(interface):接口也不能直接实例化
  • 没有无参构造函数:如果类没有默认构造函数(0个参数),而你使用 Class.newInstance()
  • 构造函数抛出异常:构造函数执行过程中抛出了异常,也会导致此异常

17. NoSuchFieldException 字段不存在(受检异常)

通常在使用 反射(Reflection) 机制访问类的字段(成员变量)时抛出,表示你尝试访问的字段在目标类中 不存在。

/*** NoSuchFieldException : 字段不存在*/
public static void test_NoSuchFieldException() {class Person {private String name;public int age;}try {Class<?> clazz = Person.class;Field field = clazz.getField("gender"); // 尝试访问不存在的 public 字段} catch (NoSuchFieldException e) {// java.lang.NoSuchFieldException: gendere.printStackTrace();}
}

18. NoSuchMethodException 方法不存在(受检异常)

通常在使用 反射(Reflection) 机制访问类的方法时抛出,表示你尝试调用的方法在目标类中 不存在,或者参数类型不匹配。

/*** NoSuchMethodException : 方法不存在*/
public static void test_NoSuchMethodException() {class Person {public void sayHello() {System.out.println("Hello");}}try {Class<?> clazz = Person.class;Method method = clazz.getMethod("sayGoodbye"); // 方法不存在} catch (NoSuchMethodException e) {// java.lang.NoSuchMethodException: com.lkm.test.Test_Throwable$1Person.sayGoodbye()e.printStackTrace();}
}

19. SQLException 数据库操作失败(受检异常)

用于处理 数据库访问错误 的一个 受检异常(Checked Exception),它通常在使用 JDBC(Java Database Connectivity)与数据库交互时抛出。当执行 SQL 语句、连接数据库、处理结果集等操作失败时,JDBC 驱动会抛出 SQLException。

  • 数据库连接失败:错误的 URL、用户名、密码
  • SQL 语法错误:SQL 语句拼写错误、表名不存在
  • 数据库服务未启动:数据库服务器宕机或无法访问
  • 权限不足:当前用户没有执行该操作的权限
  • 网络问题:数据库服务器无法连接(超时)
  • 数据类型不匹配:插入或查询时类型不匹配
  • 主键冲突:插入重复主键
  • 空指针访问:使用已关闭的 Connection、Statement、ResultSet
/*** SQLException : 数据库操作失败*/
public static void test_SQLException() {String url = "jdbc:mysql://localhost:3306/nonexistentdb"; // 错误的数据库名String user = "root";String password = "wrongpassword"; // 错误密码try {Connection conn = DriverManager.getConnection(url, user, password);} catch (SQLException e) {System.out.println("SQLException: " + e.getMessage()); // SQLException: No suitable driver found for jdbc:mysql://localhost:3306/nonexistentdbSystem.out.println("SQLState: " + e.getSQLState()); // SQLState: 08001System.out.println("Error Code: " + e.getErrorCode()); // Error Code: 0// java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/nonexistentdbe.printStackTrace();}
}

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

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

相关文章

rocketmq常用命令

官方文档 https://rocketmq.apache.org/zh/docs/ https://rocketmq.apache.org/zh/docs/domainModel/02topic/ https://rocketmq.apache.org/zh/docs/4.x/deployment/02admintool 集群配置管理 https://mp.weixin.qq.com/s/688wNSwZPraGvAnr0K7hRw RocketMQ运维管理命令mqadm…

【C++详解】哈希表概念与实现 开放定址法和链地址法、处理哈希冲突、哈希函数介绍

文章目录一、unordered系列的使用unordered_set类的介绍unordered_set和set的使⽤差异unordered_map和map的使⽤差异unordered_xxx的哈希相关接⼝二、哈希表实现哈希概念直接定址法哈希冲突负载因⼦将关键字转为整数哈希函数除法散列法/除留余数法乘法散列法处理哈希冲突开放定…

电影感人文街拍摆摊纪实摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色介绍电影感人文街拍摆摊纪实摄影后期 Lr 调色是一种专注于捕捉街头生活烟火气的摄影风格&#xff0c;通过 Lightroom 后期调色赋予画面电影般的叙事感和情感深度。这种风格以摆摊小贩、市井行人、街头场景为主体&#xff0c;强调真实、自然的生活瞬间。调色核心在于低饱和暖…

【数据分享】298个地级市人工智能企业数量(1990-2023)

数据介绍引言人工智能产业作为数字经济的核心驱动力&#xff0c;其发展规模与分布格局深刻反映区域科技创新活力与产业升级潜力。为助力相关研究&#xff0c;本文分享一份涵盖全国 298 个地级市 1990-2023 年的人工智能企业核心数据&#xff0c;包含人工智能企业存量和人工智能…

LeetCode 面试经典 150_双指针_验证回文串(25_125_C++_简单)(双指针)

LeetCode 面试经典 150_数组/字符串_验证回文串&#xff08;25_125_C_简单&#xff09;题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;双指针&#xff09;&#xff1a;代码实现代码实现&#xff08;思路一&#xff08;双…

无障碍辅助模块|Highcharts引领可访问数据可视化的交流

在现代数据可视化中&#xff0c;无障碍辅助技术已成为必不可少的一部分。对于视障人士或使用屏幕阅读器的用户来说&#xff0c;传统图表往往难以获取有效信息&#xff0c;而 Highcharts 在设计之初便充分考虑了无障碍体验。 Highcharts作为可访问数据可视化的倡导者&#xff0…

从0到1:数据库进阶之路,解锁SQL与架构的奥秘

目录一、SQL 基础启航1.1 SQL 基础语法1.2 SQL 进阶查询1.3 SQL 实战案例分析二、分库分表实战2.1 分库分表的背景与原理2.2 分库分表策略设计2.3 分布式 ID 生成2.4 数据迁移方案三、中间件实战3.1 中间件概述3.2 DBLE 中间件实战3.3 MyCat 中间件实战四、高可用架构搭建4.1 高…

【数据结构入门】排序算法(2):直接选择排序->堆排序

目录 1.直接选择排序 1.1 思想 1.2 代码 2.堆排序 2.1 向下调整算法 2.1.1 代码 2.2 建堆 2.2.1 代码 2.3 正式排序 2.3.1 代码 3. 冒泡排序 3.1 思路 3.1.1 单趟排序 3.1.2 多趟排序 3.1.3优化 3.2 代码 1.直接选择排序 1.1 思想 每次从未排序区中选择一个最小…

Fluent Bit系列:字符集转码测试(下)

#作者&#xff1a;程宏斌 文章目录fluent-bit 1.9.4 转换测试结论接上篇&#xff1a;《Fluent Bit系列&#xff1a;字符集转码测试&#xff08;上&#xff09;》https://blog.csdn.net/qq_40477248/article/details/150776142?spm1001.2014.3001.5501fluent-bit 1.9.4 转换测试…

redis-缓存-持久化

redis-缓存-持久化一、来因宫1、啥叫持久化&#xff1f;为何需要持久化&#xff1f;2、redis持久化方案2.1、RDB - 快照持久化A、定义原理B、快照生成流程&#xff1a;Copy-on-Write&#xff08;写时复制&#xff09;C、dump.rdb文件说明D、RDB 数据恢复流程E、RDB的优缺点2.2、…

C++11(Linux/GCC)字节序工具

#pragma once #include <cstdint> #include <climits> #include <type_traits> // 用于类型检查// 端序宏获取&#xff08;保持原有逻辑&#xff09; #if __has_include(<endian.h>)#include <endian.h> #elif __has_include(<bits/endian.h…

【MTCNN网络结构记忆卡片】--003nets.py

&#x1f9e0; MTCNN网络结构记忆卡片 &#xfffd;&#xfffd; 基础概念速查 &#x1f524; 库引入&#xff1a;import torch 和 import torch.nn as nn import torch # PyTorch深度学习框架 import torch.nn as nn # nn Neural Networks (神经网络)&#x1f3d7;️…

可视化-模块1-HTML-03

1.发现问题<p>大数据可视化技术及应用课程</p> <img src"pic/图片2.png" width"300" height"300"/><p></p><img />HTML 标签按闭合方式只分两类&#xff1a;双标签&#xff08;paired / container&#xff…

前端开发:详细介绍npm、pnpm和cnpm分别是什么,使用方法以及之间有哪些关系

目录 npm、pnpm和cnpm分别是什么 npm pnpm cnpm NPM包管理器 使用npm管理&#xff0c;创建/初始化项目 修改npm镜像&#xff08;npm源设置&#xff09; 基本命令 安装依赖项 下载特定版本的依赖 下载开发依赖 下载全局依赖&#xff08;全局安装&#xff09; 升级依赖项 根据依赖…

我们为你连接网络,安装驱动程序

Windows 11 家庭版/专业版在安装时默认要求联网&#xff0c;其实可以跳过。在这个联网界面按下 Shift F10 打开命令行。输入以下命令并回车&#xff1a;OOBE\BYPASSNRO系统会自动重启&#xff0c;回到联网界面。这时会多出一个 “我没有 Internet” 选项&#xff0c;点它&…

智慧交通夜间逆光误检率↓81.4%!陌讯多模态融合算法在主干道监测的落地优化

一、智慧交通视觉检测的行业痛点智慧交通作为城市基建的核心环节&#xff0c;其视觉检测系统&#xff08;车辆识别、车牌匹配、交通事件预警&#xff09;的可靠性直接影响通行效率与交通安全。但根据《2023 年中国智慧交通发展报告》数据&#xff0c;当前主流方案仍面临三大核心…

Java和数据库的关系

数据库本身是一个独立的、巨大的知识领域&#xff0c;但“数据库的使用、优化和深度理解”绝对是Java后端工程师进阶的核心组成部分。 它们不是分开的&#xff0c;而是紧密耦合、相辅相成的关系。你可以这样理解&#xff1a; 数据库&#xff08;MySQL, Oracle等&#xff09; 就…

Socket some functions

setsockopt 简介setsockopt 是用于设置套接字&#xff08;socket&#xff09;选项的系统调用函数&#xff0c;允许用户对套接字的行为进行精细控制。通过调整选项参数&#xff0c;可以优化网络通信性能、修改超时设置、启用特殊功能等。该函数在 POSIX 系统和 Windows 平台均有…

玩转深度学习数据填补!CNN-GRU组合模型数据填补(四个案例数据)

这两段MATLAB代码&#xff08;BABJ.m 和 CNN_GRUQSTB.m&#xff09;分别完成数据预处理与缺失值标识和基于CNN-GRU混合神经网络的缺失值预测填补任务。以下是详细分析&#xff1a; 一、主要功能 BABJ.m • 功能&#xff1a;从多个Excel文件中读取数据&#xff0c;匹配并合并多个…

基于开源AI智能名片链动2+1模式S2B2C商城小程序的营销创新研究——以“种草”实践践行“以人为本”理念

摘要&#xff1a;本文聚焦于营销本质&#xff0c;强调创造和维护与消费者有价值关系的重要性&#xff0c;指出企业需回归消费者视角提供有价值产品和服务。深入探讨“种草”作为科特勒“以人为本”理念在中国市场的最佳实践&#xff0c;分析其意义与价值。同时&#xff0c;引入…