异常-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.mzph.cn/news/730632.shtml

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

相关文章

鸿蒙实战开发Camera组件:【相机】

相机组件支持相机业务的开发&#xff0c;开发者可以通过已开放的接口实现相机硬件的访问、操作和新功能开发&#xff0c;最常见的操作如&#xff1a;预览、拍照和录像等。 基本概念 拍照 此功能用于拍摄采集照片。 预览 此功能用于在开启相机后&#xff0c;在缓冲区内重复采集…

ARC-Challenge数据集分享

来源: AINLPer公众号&#xff08;每日干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2024-2-28 该数据集由Allen Institute for Artificial Intelligence&#xff08;AI2&#xff09;发布&#xff0c;旨在推动高级问答的研究。该数据集包含…

3D数字孪生运行不起来?该检查你的电脑配置了

运行3D数字孪生项目通常需要一定的计算资源和图形处理能力。以下是一些常见的电脑配置要求&#xff0c;可以作为参考&#xff1a;1处理器&#xff08;CPU&#xff09;&#xff1a;推荐使用多核心处理器&#xff0c;如Intel Core i7或更高级别的处理器。较高的时钟频率和较大的缓…

kafka报文模拟工具的使用

日常项目中经常会碰到消费kafka某个topic的数据&#xff0c;如果知道报文格式&#xff0c;即可使用工具去模拟发送报文&#xff0c;以此测试代码中是否能正常消费到这个数据。 工具资源已上传&#xff0c;可直接访问连接下载&#xff1a;https://download.csdn.net/download/w…

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…

React-父传子

1.概念 说明&#xff1a;父组件传递数据子组件标签身上绑定属性&#xff1b;子组件接受数据props的参数。props是一个对象&#xff0c;包含父组件传递的所有数据。例如数字、字符串、布尔值、数组、对象、函数、JSX。不允许直接修改父组件传递的数据。 2.例子 // 父传子 // …

uniapp踩坑之项目:uni.previewImage简易版预览单图片

主要使用uni.previewImage //html <view class"box-card" v-for"(item,index) in DataList" :key"index"><view>图片&#xff1a;</view><image :src"item.Path" tap.stop"clickImg(item.Path)">&l…

有点NB的免费wordpress主题模板

一个不错的黄色模板&#xff0c;用WP免费主题模板搭建家政服务公司网站。 https://www.wpniu.com/themes/15.html

【性能】JDK和Jmeter的安装与配置

一、JDK环境配置 1. 下载JDK 官网下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html 选择对应系统的安装包&#xff0c;下载后安装&#xff0c;安装中记录JDK安装的地址&#xff0c;之后一直点击下一…

继深圳后,重庆与鸿蒙展开原生应用开发合作

截至2023年底&#xff0c;开源鸿蒙开源社区已有250多家生态伙伴加入&#xff0c;开源鸿蒙项目捐赠人达35家&#xff0c;通过开源鸿蒙兼容性测评的伙伴达173个&#xff0c;累计落地230余款商用设备&#xff0c;涵盖金融、教育、智能家居、交通、数字政府、工业、医疗等各领域。 …

【Python】科研代码学习:三 PreTrainedModel, PretrainedConfig, PreTrainedTokenizer

【Python】科研代码学习&#xff1a;三 PreTrainedModel, PretrainedConfig, PreTrainedTokenizer 前言Models : PreTrainedModelPreTrainedModel 中重要的方法 tensorflow & pytorch 简单对比Configuration : PretrainedConfigPretrainedConfig 中重要的方法 Tokenizer : …

Java基础面试题(day 01)

&#x1f4d1;前言 本文主要是【Java】——Java基础面试题的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&am…

C++ 篇 数组

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

C++之创建与使用dll

目录 1、创建dll test.h test.cpp Source.def 2、使用dll testdll.cpp DLL&#xff0c;全称“Dynamic Link Library”&#xff0c;中文名为“动态链接库”&#xff0c;是一种在Windows操作系统中常见的库文件格式。它包含了可以由多个程序同时使用的代码和数据。与静态链接…

人工智能|机器学习——k-近邻算法(KNN分类算法)

1.简介 k-最近邻算法&#xff0c;也称为 kNN 或 k-NN&#xff0c;是一种非参数、有监督的学习分类器&#xff0c;它使用邻近度对单个数据点的分组进行分类或预测。虽然它可以用于回归问题&#xff0c;但它通常用作分类算法&#xff0c;假设可以在彼此附近找到相似点。 对于分类…

餐饮行业新风口:社区店的成功案例与经营秘诀

在竞争激烈的餐饮行业中&#xff0c;社区店正成为一个新的风口。作为一名90后的鲜奶吧创业者&#xff0c;我在社区开店已经5年时间&#xff0c;下面我将分享一些成功的社区店案例&#xff0c;并揭示其经营秘诀。 1、案例一&#xff1a;特色小吃店 这家小吃店以地方特色美食为…

MySQL安装与卸载

安装 1). 双击官方下来的安装包文件 2). 根据安装提示进行安装(全部默认就可以) 安装MySQL的相关组件&#xff0c;这个过程可能需要耗时几分钟&#xff0c;耐心等待。 输入MySQL中root用户的密码,一定记得记住该密码 配置 安装好MySQL之后&#xff0c;还需要配置环境变量&am…

数据结构与算法-插值查找

引言 在计算机科学的广阔天地中&#xff0c;数据结构和算法扮演着至关重要的角色。它们优化了信息处理的方式&#xff0c;使得我们在面对海量数据时能够高效、准确地进行检索与分析。本文将聚焦于一种基于有序数组且利用元素分布规律的查找算法——插值查找&#xff08;Interpo…

C++面向对象程序设计-北京大学-郭炜【课程笔记(五)】

C面向对象程序设计-北京大学-郭炜【课程笔记&#xff08;五&#xff09;】 1、常量对象、常量成员函数1.1、常量对象1.2、常量成员函数1.3、常引用 2、友元&#xff08;friends&#xff09;2.1、友元函数2.2、友元类 3、运算符重载的基本概念3.1、运算符重载 4、赋值运算符的重…

二维码门楼牌管理系统应用场景:推动旅游与文化产业的智慧化升级

文章目录 前言一、二维码门楼牌管理系统在旅游领域的应用二、二维码门楼牌管理系统在文化产业的应用三、结语 前言 随着信息技术的不断发展&#xff0c;二维码门楼牌管理系统作为一种创新的信息化手段&#xff0c;正在逐渐渗透到旅游和文化领域。它通过为文化景点、旅游景点和…