Java学习路线(16)——异常

news2024/12/25 12:26:38

一、异常

1、概念: 程序在“编译”或“执行”时可能出现的问题。(语法错误不算异常)

2、常见的异常

  • 数组索引越界
  • 空指针
  • 日期格式化

3、作用: 触发异常后,如果没有提前处理,JVM将终止,提高程序的健壮性和安全性。

4、异常体系
在这里插入图片描述

  • Error: 系统级别问题、JVM退出等,代码无法处理。
  • Exception: 程序本身的问题
    • RuntimeException及其子类(运行时异常): 运行时异常,编译阶段不报错。(例如空指针异常、数组越界异常)
    • 非RuntimeException(编译时异常): 编译时错误,编译期必须处理,否则程序无法编译。(例如日期格式化异常)

5、运行时异常

(1)特点: 编译不报错,运行才报错。

(2)常见运行时异常

  • 数组索引越界异常:ArrayIndexOutOfBoundsException
  • 空指针异常:NullPointerException
  • 数字操作异常:ArithmeticException
  • 类型转换异常:ClassCastException
  • 数字转换异常:NumberFormatException

6、编译时异常

(1)特点: 编译时报错。

(2)常见运行时异常

  • 日期解析异常:ParseException

7、异常的执行流程

  • 默认会出现异常的代码自动创建一个异常对象。
  • 异常从方法中出现的点抛出给调用者,调用者最终抛出给JVM。
  • JVM接收异常后,先在控制台输出异常信息。
  • 直接从当前执行的异常点干掉当前程序。

8、异常的处理机制
(1)编译时异常的处理机制
三种处理方式

  • 出现异常直接抛出给调用者,调用者也继续抛出异常。
  • 捕获异常并自行处理异常。
  • 出现异常直接抛出给调用者,调用者捕获并处理异常。

(a)处理方式1——throws

  • 作用方式: 用于方法内,将方法内部产生的异常抛出给调用者。
  • 使用格式:
/*抛出异常的方式1*/
方法 throws 异常1,异常2,...{}
/*抛出异常的方式2*/
方法 throws Exception{} //因为Exception是异 常的总类

(b)处理方式2——try…catch…
作用方式: 监听捕捉异常,用在方法内部,恶意将方法内部出现的异常直接捕获并处理。
使用格式:

/*处理方式1*/
try{
	//受监视的代码块
}catch(异常类型1 变量){
	//处理代码
}catch(异常类型2 变量){
	//处理代码
}...

/*处理方式2*/
try{
	//受监视的代码块
}catch(Exception e){
	//处理代码
}...

(c)处理方式3——前两者结合
作用方式: 方法直接昂异常通过throws抛出给调用者,调用者说道异常后直接捕获异常并处理。
使用方式:

public static void main(String[] args){
	try{
		getInteger();
	}catch(Exception e){
		//处理代码	
	}...
}

public static void getInteger() throws Exception{
	return 3 / 0;
}

(2)编译时异常的处理机制
使用方式: 建议在方法调用时直接使用方法b即可。

9、自定义异常

(1)自定义异常的分类

  • 自定义编译时异常
  • 自定义运行时异常

自定义异常使用流程

  • 定义一个异常类继承RuntimeException类。
  • 重写构造器
  • 出现异常处使用throw new 抛出自定义异常

(2)构建示例

/*异常类继承Exception*/
class MyException extends Exception{
	/*重写构造器*/
	public MyException(){}
	
	public MyException(String message){
		super(message);
	}
}

(3)使用示例

public class Main(){
	public static void main(String[] atgs){
		setAge(300); //编辑器会直接提示这是个可能出现异常的地方。
	}
}

public static void setAge(int age){
	if(age > 200 || age < 0){
		throw new MyException("你输入的年龄有问题");
	}
}

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

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

相关文章

chatgpt赋能python:Python中None的使用详解

Python中None的使用详解 在Python语言中&#xff0c;None是一个非常常见的值&#xff0c;它在代码中用来表示空值或未定义的值。本文将介绍Python中None的使用方式&#xff0c;包括创建和比较None对象&#xff0c;以及在函数和类中使用None的方法。 创建和比较None对象 在Py…

chatgpt赋能python:Python中Key的作用及使用方法

Python中Key的作用及使用方法 在Python中&#xff0c;key是一个十分重要的概念。它在数据结构中经常被使用&#xff0c;例如list、dict、set、tuple等等。本文将重点介绍Python中key的作用和使用方法&#xff0c;帮助读者更好地理解和应用它。 什么是Key 首先&#xff0c;我…

返回数组中非零元素的索引np.flatnonzero()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 返回数组中非零元素的索引 np.flatnonzero() 选择题 以下程序的运行结果是? import numpy as np anp.array([0,1,2,3]) print("【显示】a:");print(a) print("【执行】print(n…

JLabel默认是透明的,所以JLabel设置背景色setBackground之前要setOpaque(true);

JLabel默认是透明的,所以JLabel设置背景色setBackground之前要setOpaque(true); 将不透明设为true,再setBackground jlabel.setOpaque(true); jlabel.setBackground(new Color(0, 0, 0, 100)); //将不透明设为true,再setBackgroundjlabel.setOpaque(true); jlabel.setBackgro…

chatgpt赋能python:Python中n次方的介绍

Python中n次方的介绍 Python中的n次方是指将一个数值或变量的值提高到某个指定的指数值。这在数据科学、计算机科学和科学计算等领域中非常常见。 在Python中&#xff0c;我们可以使用内置函数**或pow函数来实现n次方。 通过**进行n次方运算 使用**运算符时&#xff0c;将要…

哨兵3号(Sentinel 3)卫星数据处理

李国春 本文介绍使用RSD处理欧空局哨兵3号&#xff08;Sentinel 3&#xff09;卫星数据的具体方法。 气象数据多用NetCDF格式交换和存储&#xff0c;气象卫星数据也是如此。气象业内认为HDF5也是NetCDF的一部分&#xff0c;虽然文件扩展名使用的是.nc&#xff0c;但是实际上就…

数据在内存中的存储(1)

目录 一.C语言中数据类型的介绍 1.c语言的内置类型及大小&#xff08;单位字节&#xff09; 2.整型家族 3.浮点数家族 4.自定义类型&#xff08;构造类型&#xff09; 5.指针类型 6.空类型 二.整型数据在内存中的存储 1.二进制 2.整型数据在内存中的存储&#xff08;…

读数据压缩入门笔记01_数据压缩导读

1. 建立在数据压缩上的世界 1.1. 数据压缩技术最让人惊异之处在于&#xff0c;它与过去40年里个人计算的很多重大改变有关&#xff0c;但很少有人知道这一点 1.2. 我们当下生活在其中的这个计算世界&#xff0c;完全建立在数据压缩算法之上 1.3. 图像的压缩 1.3.1. 1978年 …

HMM实现中文分词

引言 在隐马尔可夫模型中介绍了HMM的理论部分&#xff0c;为了巩固理论知识&#xff0c;本文基于HMM实现中文分词。具体来说&#xff0c;通过HMM实现基于字级别的分词算法。 HMM 这里简单说明一下&#xff0c;更详细的请参考隐马尔可夫模型。 这里输入序列为 X 1 : N X_{1:N…

【h5】实现语音转文字

【h5】实现语音转文字 一、需求功能概述是&#xff1a; 二、实现过程1、实现按住录音&#xff0c;松开发送。有两个录音按钮。a. 获取用户的麦克风声音和创建一个MediaRecorder对象&#xff1a;b. 启动和停止录音&#xff1a;c. 将音频数据上传到服务器&#xff0c;并在处理完后…

【C++】指针 - 定义和使用,所占内存空间,空指针,野指针,const修饰指针,指针和数组,指针和函数

文章目录 1. 定义和使用2. 所占内存空间3. 空指针4. 野指针5. const修饰指针6. 指针和数组7. 指针和函数 1. 定义和使用 数据类型 * 变量名; 指针的作用是&#xff0c;可以通过指针间接访问内存。 内存编号是从 0 开始记录的&#xff0c;一般用十六进制数字表示。可以利用指…

nodejs+vue社区母婴幼儿用品商城系统

本系统实现了管理员对用户、商品信息、交流论坛、订单信息的管理&#xff0c;是为了满足用户更深层次的需求。除了上述优势外&#xff0c;本系统还具有&#xff1a;查询迅速&#xff0c;搜索资料方便&#xff0c;可靠性强等等在如今这个高速发展的时代&#xff0c;效率决定着你…

十款开源测试开发工具推荐(自动化、性能、混沌测试、造数据、流量复制)

在本篇文章中&#xff0c;我将给大家推荐 10 款日常工作中经常用到的测试开发工具神器&#xff0c;涵盖了自动化测试、性能压测、流量复制、混沌测试、造数据等。 1、AutoMeter-API 自动化测试平台 AutoMeter 是一款针对分布式服务&#xff0c;微服务 API 做功能和性能一体化…

可靠可用性基本知识

可靠可用性基本知识 1. 基本概念1.1 可靠性1.2 可用性 2. 可靠和可用性指标3. 可靠性工程实践相关概念4. FEMA相关知识4.1 基本概念4.2 FEMA分析流程 5. 产品开发流程中可靠可用性测试如何开展5.1 测试可靠可用性输入\输出5.2 可靠可用性开展流程5.3 测试设计5.4 测试执行5.4.1…

chatgpt赋能python:Numpy读音:是“num-pie”还是“num-pee”?

Numpy读音&#xff1a;是“num-pie”还是“num-pee”&#xff1f; 你是否曾经在想&#xff0c;“numpy”这个词怎么念&#xff1f;很多人都有不同的看法。有些人说“num-pie”&#xff0c;而另一些人则说“num-pee”。那么&#xff0c;谁是正确的呢&#xff1f;在这篇文章中&a…

ad18学习笔记三:关于测量点对点

如何测量&#xff1f; 方法有很多种&#xff0c;比如 1、 点击 ‘放置’–》‘尺寸’–》‘线性尺寸’ 2、 快捷工具栏 3、 快捷键 AD如何使用测量命令&#xff1f;-凡亿课堂 AD中的三种测量距离的方式 清除测量标线&#xff1f; 这个简单&#xff0c;在显示测量结果的…

【论文阅读】GNN在推荐系统中的应用

【论文阅读】GNN在推荐系统中的应用 参考Graph Neural Networks for Recommender Systems: Challenges, Methods, and Directions 文章目录 【论文阅读】GNN在推荐系统中的应用1、本文结构2、推荐系统的目的&#xff0c;发展和基于GNN模型的挑战3、推荐系统相应背景&#xff0…

GPT-4 插件和插件化的思考

一、前言 最近 ChatGPT 的 Plus 用户在 GPT-4 中新增了插件功能&#xff0c; GPT 在插件的加持下如虎添翼。 那么我常用的插件是哪些&#xff1f;插件化是什么&#xff1f;插件化有什么好处&#xff1f;插件化和我们日常开发中哪些设计模式思想一致&#xff1f;GPT 的插件还存…

竟然还可以这样计算圆周率π?你被惊艳到吗(50)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 什么是圆周率π&#xff1f; 如何用蒙特卡洛法来计算圆周率&#xff1f; 圆周率π 圆周率用希腊字母π&#xf…

TatukGIS Developer Kernel 11.78 for .NETCore Crack

Tatuk GIS Developer Kernel for .NET 是一个变体&#xff0c;它是受控代码和 .NET GIS SDK&#xff0c;用于为用户 Windows 操作系统创建 GIS 专业软件的过程。它被认为是一个完全用于 Win Forms 的 .NET CIL&#xff0c;WPF 的框架是为 C# 以及 VB.NET、VC、oxygen 以及最终与…