异常(下)Java常见异常,异常的使用原则

news2024/12/23 10:17:59

文章目录

  • 前言
  • 一、Java常见异常
    • 1.常见异常
    • 2.实例展示
  • 二、异常的使用原则
  • 总结

前言

        该文介绍了Java的一些常见异常,并给出对应的例子进行解释。介绍异常的使用原则,即创建,抛出异常的编程规范。


一、Java常见异常

         前要:Java API中提供了一些异常类,这些异常类用来在控制台中,反馈出经常发生的BUG。这些异常中,一些是Java虚拟机自动进行捕获处理的,一些需要程序员进行捕获处理或声明抛出。

1.常见异常

异常类说明
ArithmeticException算术异常
ArrayIndexOutOfBoundsException数组下标越界异常
ArrayStoreException数组中包含不兼容的值抛出的异常
ClassCastException类型转换异常
ClassNotFoundException未找到相应类异常
NullPointerException空指针异常
NoSuchFieldException字段未能找到异常
NegativeArrarySizeException数组长度为负异常
IllegalArgumentException非法参数异常
SQLException操作数据库异常
SecurityException安全性异常

 

2.实例展示        

         (1)ArithmeticException

                算数异常:即运算中与运算逻辑不相符的错误运算。

                实例:

public class Demo {
	public static void main(String[] args) {
		int a = 1;
		int b = a/0;
		//此处发生了算数异常,除法运算中,除数不能为零
	}
}

                输出结果: 

         (2)ArrayIndexOutOfBoundsException

                数组下标越界异常:即赋值或调用数组时,数组的索引位置超出了创建该数组的范围。

                实例:                 

public class Demo {
	public static void main(String[] args) {
		int a[] = new int[100];
		//创建了一个 a[]数组,容量范围为 0-99
		a[100] = 1;
        //此处发生了数组下标越界异常,a[]数组的索引范围为 0 ≤ x < 100 ,所以100超出索引范围		
	}
}

                 输出结果:

        (3)ArrayStoreException

                数组中包含不兼容的值异常:即给数组赋值时,此赋值的数据类型与创建时该数组的数据类型不相符。

                 实例:

public class Demo {
	public static void main(String[] args) {
		// 创建一个整数数组
		Object arr[] = new Integer[5];
		// 尝试将一个字符串对象存储到整数数组中
		arr[0] = "Hello";
		//此处发生了数组中包含不兼容的值异常,arr[]数组 数据类型为 整数,arr[0] 数据类型为 String
	}
}

                输出结果: 

        (4)ClassCastException

                类型转换异常:即在赋值或运算过程中,转换数据的类型前后不对应(即使进行了强转换)。

                实例:

public class Demo {
	public static void main(String[] args) {
		//创建了一个 Integer 整数类型的 obj 对象
		Object obj = new Integer(10);

		//尝试将 Integer类型的obj 转换为 String类型
		String str = (String) obj; 
		//这里发生了类型转换异常,整数类型转换为了String类型,不能转换
	}
}

                输出结果:         

        (5)ClassNotFoundException

                 未找到相应类异常:即调用了一个不存在的类,或者调用路径错误,拼写错误,导致不存在。

                实例:

public class Demo {
	public static void main(String[] args) {
		try {
            //该类的路径不存在此类
		    Class.forName("com.example.NonExistentClass");
            //发生了异常
		} catch (ClassNotFoundException e) {
		    e.printStackTrace();
		}
	}
}

                输出结果: 

        (6)NullPointerException

                空指针异常:即引用对象为null,没有指向一个具体的数据,相关的操作指令无法进行。

                实例:

public class Demo {
	public static void main(String[] args) {
		String str = null;
		int length = str.length(); 
		//这里会抛出空指针异常,因为str为null
	}
}

                输出结果: 

        (7)NegativeArrarySizeException

                数组长度为负异常:即创建的一个数组时,其索引范围为一个负数,使x<0,与0≤x相违背。

                实例:

public class Demo {
	public static void main(String[] args) {
		try {
            int[] arr = new int[-5];
            // 尝试创建一个具有负数大小的数组,发生异常
        } catch (NegativeArraySizeException e) {
            e.printStackTrace();
        }		
	}
}

                输出结果: 

        (8)IllegalArgumentException

                非法参数异常:即我们调用方法时, 传递了无效、不合法或不符合预期的参数值。

                实例:

public class Demo {
	public static void main(String[] args) {
		try {
            int age = -5;
            if (age < 0) {
                throw new IllegalArgumentException("age 是一个不符合预期的参数:年龄不能小于零");
            }
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }		
	}
}

                输出结果:                       

 

二、异常的使用原则

        (1)发生异常尽量不要抛出,尽量直接处理掉。

        (2)不能忽略抛出的异常,并且一定要使用 try-catch 代码块反馈报错。

        (3)不要将过于庞大的代码套入 try-catch 代码块。此操作会增加异常产生的可能性,更难识别出异常的性质。尽可能是代码中的一小部分套入 try-catch 代码块。

        (4)不要过度使用 catch 代码块。多余的 catch 代码块(本意用于反馈并处理异常,但是画蛇添足) 会使进程进行多余的判断,增加CPU的运行压力,浪费系统资源。

        (5)子类抛出的异常不能比父类更高级。(特例:RuntimeException 异常及其子类不受此原则的约束)。


总结

        以上就是对Java异常的一些常见API中异常的总结,异常的使用规范的补充内容。如果对该文有补充或指正的内容,欢迎在评论区中留言。博主会及时进行反馈的。

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

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

相关文章

实训五:用户和组账号管理

实训五&#xff1a;用户和组账号管理 2017 年 X 月 X 日 今日公布 四&#xff1a;实训内容 用root用户登录系统&#xff0c;查看用户账号文件/etc/passwd和口令文件/etc/shadow的内容&#xff0c;注意观察其存储格式、各账户所使用的Shell、UID、GID等属性信息。 答&#xf…

ITIL4—度量和报告实践

1. 关于本文 本文为度量和报告实践提供了实用指南&#xff0c;分为五个主要部分&#xff0c;涵盖&#xff1a; 本实践的基本信息本实践相关的流程和活动&#xff0c;及其在服务价值链中的作用参与本实践的组织和人员支持本实践的信息和技术合作伙伴和供应商在本实践中的注意事…

【构造】CF1853D

Problem - D - Codeforces 题意&#xff1a; 思路&#xff1a; Code&#xff1a; #include <bits/stdc.h>using i64 long long;const int N 1e6 10;int ans[N];void solve() {int n;std::cin >> n;std::vector<std::pair<int,int> > a(n 1);for …

如何高效进行项目任务管理?掌握这些神器助你一臂之力

任务管理是项目管理中的重点部分&#xff0c;关系到项目能否顺利的完成。项目经理该如何进行项目任务管理呢&#xff1f; 一、项目任务管理中的挑战 二、项目任务管理指南 三、项目任务管理神器 首先我们需要先清楚当下企业在项目任务管理中遇到的挑战。 一、项目任务管理中的…

【Kafka】2.在SpringBoot中使用官方原生java版Kafka客户端

目 录 1. 新建一个消息生产者2. 新建一个消息消费者3. 测 试 在开始之前&#xff0c;需要先做点准备工作&#xff0c;用 IDEA 新建一个 Maven 项目&#xff0c;取名 kafka-study&#xff0c;然后删掉它的 src 目录&#xff0c;接着在 pom.xml 里面引入下面的依赖。这个项目的作…

HCIP学习--BGP3

目录 前置内容 BGP下一跳的修改问题 BGP的属性 配置 PrefVal权重属性 负载分担 LocPrf 负载分担 NextHop AS-PATH Ogn 配置 MED 配置 BGP选路规则 BGP的社团属性 配置及解释 前置内容 HCIP学习--BGP1_板栗妖怪的博客-CSDN博客 HCIP学习--BGP2_板栗妖怪的博客…

Python 解析c文件并导出到Excel

文章目录 1. 目录结构&#xff1a;2.代码1. test.c2. write_excel.py3. cparser.py4. 模板.xlsx5. output.xlsx 脚本中主要使用 openpyxl cparser 库 1. 目录结构&#xff1a; ast.txt &#xff1a;存放解析 c 文件的语法树&#xff0c;便于查找内容cparser.py &#xff1a;解…

@Param详解

文章目录 背景什么是ParamParam的使用方法使用方法&#xff1a;遇到的问题及因Param解决了什么问题使用与不使用对比 Param是如何进行映射的总结 背景 最近在开发过程中&#xff0c;在写mapper接口是在参数前加了Param注解&#xff0c;但是在运行的时候就会报错&#xff0c;说…

Elasticsearch 8.X 复杂分词搞不定,怎么办?

1、实战问题 球友提问&#xff1a;我想停用所有纯数字的分词 &#xff0c; 官网上的这个方法好像对ik分词器无效&#xff01; 有没有什么别的方法啊&#xff0c; chart gpt 说分词可以用正则匹配 但是测试好像是不行的 我的es版本是 8.5.3。 2、进一步沟通后&#xff0c;得…

若依框架浅浅介绍

由若依官网所给介绍可知 1、文件结构介绍 在ruoyi-admin的pom.xml文件中引入了ruoyi-framework、ruoyi-quartz和ruoyi-generatior模块&#xff0c;在ruoyi-framework的pom.xml文件中引入了ruoyi-system模块。 2、技术栈介绍 前端&#xff1a;Vue、Element UI后端&#xff1a…

Netty:在一个ByteBuf中寻找另外一个ByteBuf出现的位置

说明 利用ByteBufUtil的indexOf(ByteBuf needle, ByteBuf haystack)函数可以在haystack中寻找needle出现的位置。如果没有找到&#xff0c;返回-1。 示例 在一个ByteBuf 中找到了另外一个ByteBuf package com.thb;import io.netty.buffer.ByteBuf; import io.netty.buffer.…

AUTOSAR规范与ECU软件开发(基础篇)2.5 AUTOSAR方法论

前言 AUTOSAR方法论(AUTOSAR Methodology) 中车用控制器软件的开发涉及系统级、 ECU级和软件组件级。 系统级主要考虑系统功能需求、 硬件资源、 系统约束, 然后建立系统架构; ECU级根据抽象后的信息对ECU进行配置; 系统级和ECU级设计的同时, 伴随着软件组件级的开发。 上…

python软件安装包百度云,python软件安装教程2020

大家好&#xff0c;小编为大家解答python软件安装在哪个盘比较好的问题。很多人还不知道python软件安装过程中,customize&#xff0c;现在让我们一起来看看吧&#xff01; 一&#xff1a;python安装 安装软件的路径中不允许出现中文、带空格的字符串、特殊符号、纯数字&#xf…

n-皇后问题

希望这篇题解对你有用&#xff0c;麻烦动动手指点个赞或关注&#xff0c;感谢您的关注 不清楚蓝桥杯考什么的点点下方&#x1f447; 考点秘籍 想背纯享模版的伙伴们点点下方&#x1f447; 蓝桥杯省一你一定不能错过的模板大全(第一期) 蓝桥杯省一你一定不能错过的模板大全…

面试热题(最大子数组和)

给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 输出&#xff1a;6 解释&#xff1a;连续…

Creo结构设计-创建ASM装配工程以及零件协调配合绘图

问题描述 在结构设计时&#xff0c;往往包含了多个组件&#xff0c;各个组件需要分开设计&#xff0c;但同时需要借鉴上一个模块的尺寸信息&#xff0c;如果创建多个零件&#xff0c;最后再组合那么会降低效率&#xff0c;那么有什么好的解决方式&#xff0c;能够再一个工程里…

代码随想录算法训练营之JAVA|第二十七天| 455. 分发饼干

今天是第27天刷leetcode&#xff0c;立个flag&#xff0c;打卡60天。 算法挑战链接 455. 分发饼干https://leetcode.cn/problems/assign-cookies/ 第一想法 题目理解&#xff1a;G个人分 S块饼干 要求饼干大于或者等于人的肚量。 第一想法&#xff1a;将人按照肚量从小到达…

PyQt5的信号与槽函数

目录 一、介绍 二、一个信号连接一个槽 三、一个信号连接多个槽 四、多个信号连接一个槽 五、自定义信号 1、创建自定义信号 2、让自定义信号携带值 一、介绍 在下图中 &#xff08;1&#xff09;widget就是PyQt中的控件对象。其实就是组件&#xff08;2&#xff09;…

教育行业文件协作的最佳实践分享!

在教育工作中&#xff0c;经常需要进行文件协作&#xff0c;无论是师生间还是老师与老师之间。目前最常用的文件协作方式就是通过社交工具或者邮件进行文件共享。 这种协作方式的缺点 1、大文件传输不便&#xff1a;这种协作方式依托于社交工具&#xff0c;对于大文件传输并不…

YOLOV8/YOLOv7/YOLOv5改进:引入GAMAttention注意力机制

为了提高各种计算机视觉任务的性能&#xff0c;人们研究了各种注意机制。然而&#xff0c;以往的方法忽略了保留通道和空间方面的信息以增强跨维度交互的重要性。因此&#xff0c;我们提出了一种全局调度机制&#xff0c;通过减少信息缩减和放大全局交互表示来提高深度神经网络…