异常-Exception

文章目录

  • 异常-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.hqwc.cn/news/522626.html

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

相关文章

面试经典150题——两数相加

​Anything is worth "fighting for," and when you get it, dont doubt it, you deserve it, you deserve it. 1. 题目描述 2. 题目分析与解析 2.1 思路一 这个题目虽然标的是中等&#xff0c;但是大家看一下应该还是比较容易想到思路的&#xff0c;这不就相当于…

储能系统---交流充电桩(三)

一、充电模式及其功能要求 关注公众号 --- 小Q下午茶 新国标在标准 GB/T 18487.1-2015《电动汽车传导充电系统 第1部分&#xff1a;通用要求》中规定了 4 种充电模式&#xff0c;下面将对这 4 种充电模式及其功能要求进行介绍。 1.1 、模式 1 模式 1 是指在充电系统中应使用…

《解密云计算:企业之选》

前言 在当今数字化时代&#xff0c;企业面临着巨大的数据处理压力和信息化需求&#xff0c;传统的IT架构已经无法满足日益增长的业务需求。在这样的背景下&#xff0c;越来越多的企业开始转向云计算&#xff0c;以实现灵活、高效和可扩展的IT资源管理和利用。 云计算 云计算是…

群智能优化算法:巨型犰狳优化算法(GAO)求解23个基准函数(提供MATLAB代码)

一、巨型犰狳优化算法 巨型犰狳优化算法&#xff08;Giant Armadillo Optimization&#xff0c;GAO&#xff09;由Omar Alsayyed等人于2023年提出&#xff0c;该算法模仿了巨型犰狳在野外的自然行为。GAO设计的基本灵感来自巨型犰狳向猎物位置移动和挖掘白蚁丘的狩猎策略。GAO…

同等学力申硕专业介绍——管理学硕士

同等学力申硕的专业很多。 目前有十三大门类&#xff0c;分别是医学、法学、管理学、工学、教育学、经济学、艺术学、文学、历史学、理学、哲学、农学、军事学等&#xff0c;每个大门类中都有很多的细分专业。 今天为大家介绍同等学力申硕专业——管理学。 专业介绍 管理学是…

7. 可集成性

第7章 可集成性 融合是生活的基本法则&#xff1b;当我们抵制它时&#xff0c;瓦解是我们内心和外部的自然结果。因此&#xff0c;我们得出了通过整合实现和谐的概念。 —Norman Cousins 诺曼考辛斯 根据韦氏词典&#xff0c;形容词可集成的意思是“能够被整合”。我们会给你一…

warning: #188-D: enumerated type mixed with another type

警告解释&#xff1a;枚举类型混合了其它的数据类型&#xff1b; 解决方法&#xff1a; 1&#xff1a;检查代码&#xff0c;是不是存在混用&#xff1b;&#xff1b; 2&#xff1a;结构体初始化为 0 报warning&#xff0c;不能将结构体的第一个变量&#xff0c;使用枚举类型&am…

DDoS和CC攻击的原理

目前最常见的网络攻击方式就是CC攻击和DDoS攻击这两种&#xff0c;很多互联网企业服务器遭到攻击后接入我们德迅云安全高防时会问到&#xff0c;什么是CC攻击&#xff0c;什么又是DDoS攻击&#xff0c;这两个有什么区别的&#xff0c;其实清楚它们的攻击原理&#xff0c;也就知…

Java零基础 - 数组的定义和声明

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

【Super数据结构】数据结构入门first step!了解些概念和时空复杂度计算!

&#x1f3e0;关于此专栏&#xff1a;Super数据结构专栏将使用C/C语言介绍顺序表、链表、栈、队列等数据结构&#xff0c;每篇博文会使用尽可能多的代码片段图片的方式。 &#x1f40e;博主首页&#xff1a;Jammingpro &#x1f6aa;归属专栏&#xff1a;Super数据结构 &#x…

C++ 篇 数组

数组是含有多个数据项的数据结构&#xff0c;并且这些数据项都具有相同的数据类型。这些数据项称为数组的元素&#xff0c;我们可以根据元素在数组中的位置来选取元素。 最简单的数组就是一维数组。数组元素在内存中是依次排列的&#xff0c;如下图所示&#xff1a; 声明一个…

穿越牛熊,股市的春天还有多远?

2023年&#xff0c;资本市场的严冬令无数投资者和机构投资者都感受到了前所未有的压力。VC/PE、公募基金、股权投资类公司等机构&#xff0c;在这一年里业绩普遍不佳&#xff0c;寒意弥漫。VC/PE机构的营业收入普遍呈现负增长&#xff0c;公募基金更是历史上首次连续两年亏损&a…