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

文章目录

  • 前言
  • 一、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中异常的总结,异常的使用规范的补充内容。如果对该文有补充或指正的内容,欢迎在评论区中留言。博主会及时进行反馈的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

sklearn机器学习库(一)sklearn中的决策树

sklearn机器学习库(一)sklearn中的决策树 sklearn中决策树的类都在”tree“这个模块之下。 tree.DecisionTreeClassifier分类树tree.DecisionTreeRegressor回归树tree.export_graphviz将生成的决策树导出为DOT格式&#xff0c;画图专用tree.export_text以文字形式输出树tree.…

Jmeter(六) - 从入门到精通 - 建立数据库测试计划(详解教程)

1.简介 在实际工作中&#xff0c;我们经常会听到数据库的性能和稳定性等等&#xff0c;这些有时候也需要测试工程师去评估和测试&#xff0c;因此这篇文章主要介绍了jmeter连接和创建数据库测试计划的过程,在文中通过示例和代码非常详细地介绍给大家&#xff0c;希望对各位小伙…

基于YOLOv8+PyQt5开发的行人过马路危险行为检测告警系统(附数据集和源码下载)

系列文章目录 文章目录 系列文章目录前言欢迎来到我的博客&#xff01;我很高兴能与大家分享关于基于YOLOv8的行人过马路危险行为检测告警系统的内容。 一、系统特点1. 采用最新最优秀的目标检测算法YOLOv82. 系统分别基于PyQt5开发了两种GUI图形界面&#xff0c;供大家学习使用…

consul安装启动流程

普通软件包安装 首先cd /opt &#xff0c;将安装包放到该目录下 下载consul安装包 进入consul官网找到自己开发平台对应的安装包下载 https://www.consul.io/downloads.html 或使用命令 wget https://releases.hashicorp.com/consul/1.6.2/consul_1.6.2_linux_amd64.zip (如果…

解决lldb调试时可能出现的personality set failed: Function not implemented

最近在尝试使用Visual Studio 2022远程连接Linux进行C/C的开发&#xff0c;由于CentOS风波不断&#xff0c;所以现在的开发基本上都是使用ubuntu了&#xff0c;但是目前VS2022有一些BUG&#xff0c;就是远程调试时&#xff0c;如果目标系统是ubuntu则会出现启动调试器很慢的问题…

js设置css变量控制页面一行展示指定个数的元素

前置知识&#xff1a; CSS变量之var()函数的应用——动态修改样式 & root的使用 flex相关知识 场景&#xff1a; 动态设置给父元素内子元素设置每行排列几个 通过 document.body.style.setProperty(--itemNum, 5)设置样式变量&#xff0c;然后通过给父元素设置display: f…

PyQt5的信号与槽函数

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

uniapp 用 hbuilderx下载 uview

uView2.0重磅发布&#xff0c;利剑出鞘&#xff0c;一统江湖 - DCloud 插件市场 1.uniapp官网下载资源 2按下载 3.官网安装文档 要按 这个红色圈错了 然后看他的配置步骤 第四easycom 就可以 不用配了

Linux MQTT智能家居(温度,湿度,环境监测,摄像头等界面布局设置)

文章目录 前言一、温度湿度曲线布局二、环境监测界面布局三、摄像头界面布局总结 前言 本篇文章来完成另外三个界面的布局设置。 这里会使用到 feiyangqingyun的一些控件库。 一、温度湿度曲线布局 TempHumtiy.h: #ifndef TEMPHUMTIY_H #define TEMPHUMTIY_H#include <…

Java-运算符和控制语句(上)(基于c语言的补充)

算术运算符 关于求余 不管分子&#xff0c;分母是正还是负&#xff0c;对于分母&#xff0c;直接取正&#xff1b;对于分子若有负号&#xff0c;则先提取出来&#xff1b;剩下两个正的分子分母运算&#xff1b;最后&#xff0c;若刚才的分子有负号&#xff0c;对最后的结果添加…

[C语言] 指针

1. 指针是什么 2. 指针和指针类型 3. 野指针 4. 指针运算 5. 指针和数组 6. 二级指针 7. 指针数组 目录 1. 指针是什么&#xff1f; 2. 指针和指针类型 2.1 指针-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 指针运算 4.1 指针…

第三课-界面介绍SD-Stable Diffusion 教程

前言 我们已经安装好了SD&#xff0c;这篇文章不介绍难以理解的原理&#xff0c;说使用。以后再介绍原理。 我的想法是&#xff0c;先学会画&#xff0c;然后明白原理&#xff0c;再去提高技术。 我失败过&#xff0c;知道三天打鱼两天晒网的痛苦&#xff0c;和很多人一样试了…

Windows - UWP - 网络不好的情况下安装(微软商店)MicrosoftStore的应用

Windows - UWP - 网络不好的情况下安装&#xff08;微软商店&#xff09;MicrosoftStore的应用 前言 UWP虽然几乎被微软抛弃了&#xff0c;但不得不否认UWP应用给用户带来的体验。沙箱的运行方式加上微软的审核&#xff0c;用户使用起来非常放心&#xff0c;并且完美契合Wind…

一百四十九、Kettle——Linux上安装的kettle8.2创建共享资源库时遇到的问题(持续更新中)

一、目的 在kettle8.2在Linux上安装好可以启动界面、并且可以连接MySQL、Hive、ClickHouse等数据库后开始创建共享资源库&#xff0c;但是遇到了一些问题 二、Linux系统以及kettle版本 &#xff08;一&#xff09;Linux&#xff1a;CentOS 7 英文的图形化界面模式 &#…

加载并绘制时间域内的心电图信号,并实施Q因子为1的陷波滤波器以去除50 Hz频率研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

国产数据库-内核特性-低基数全局字典

国产数据库-内核特性-StarRocks低基数全局字典 StarRocks2.0引入了低基数全局字典&#xff0c;可以通过全局字典将字符串的相关操作转换成整型相关操作&#xff0c;大大提升查询性能。 1、低基数字典 对于利用整型替代字符串进行处理&#xff0c;通常使用字典编码进行优化。Sta…

UML—浅谈常用九种图

目录 概述: 1.用例图 2.静态图 3.行为图&#xff1a; 4.交互图&#xff1a; 5.实现图&#xff1a; 概述: UML的视图是由九种视图组成的&#xff0c;分别是用例图、类图、对象图、状态图、活动图、序列图、协作图、构件图、实施图。我们可以根据这9种图的功能和实现的目的…

计算机视觉中的特征检测和描述

一、说明 这篇文章是关于计算机视觉中特征检测和描述概念的简要理解。在其中&#xff0c;我们探讨了它们的定义、常用技术、简单的 python 实现和一些限制。 二、什么是特征检测和描述&#xff1f; 特征检测和描述是计算机视觉中的基本概念&#xff0c;在图像识别、对象跟踪和图…

wpf控件上移下移,调整子集控件显示顺序

页面代码: <!-- 导出A2,自定义导出设置列,添加时间:2023-8-9 14:14:18,作者:whl; --><Window x:Class="WpfSnqkGasAnalysis.WindowGasExportA2"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http:/…

计算机组成原理-笔记-汇总

&#x1f4da; 前言 本人在备考408&#xff0c;王道讲得的确不错&#xff0c;本人之前也看过哈工大【刘宏伟老师】的课&#xff0c;两者对比下来。 王道——更加基础&#xff0c;对小白更加友好哈工大——偏实践偏硬件&#xff08;会将更多的代码硬件设计&#xff09; PS&#…