JAVA 异常处理

VESC电调高级调参指南:电机校准与性能优化实战解析 本文详细解析了VESC电调的高级调参方法,包括电机校准与性能优化实战技巧。从基础参数设置到高级机械参数优化,再到动态性能调优,提供了全面的调参指南。特别针对电机类型、功率设置、电池参数配置等关键环节给出实用建议,帮助用户充分发挥VESC电调的性能潜力。 阅读详情

关于异常

异常:就是程序在运行时出现不正常情况。
异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述。并封装成对象。其实就是java对不正常情况进行描述后的对象体现。
对于问题的划分:两种:一种是严重的问题,一种非严重的问题。
对于严重的,java通过Error类进行描述。对于Error一般不编写针对性的代码对其进行处理。
对与非严重的,java通过Exception类进行描述。对于Exception可以使用针对性的处理方式进行处理。
ERROR和Exception都继承于Throwable


异常的处理代码

try
{
需要被检测的代码;
}
catch(异常类 变量)
{
处理异常的代码;(处理方式)
}
finally
{
一定会执行的语句;一般用于资源关闭操作
}

class MyMath {
	public static int divide(int num1, int num2) {
		int res = num1 / num2;
		return res;
	}
}

public class ExceptionTest {
	public static void main(String[] args) {

		int res = MyMath.divide(4, 0);
		System.out.println(res);

	}
}
上面代码中被除数为0,编译器通过,但实际运行结果:出现异常并且在异常处程序终止运行


现在在divide方法上将该可能产生的异常“抛出”,抛给调用者,这样谁调用,谁就必须处理该异常(要么捕获,要么继续抛出)。

class MyMath {
	public static int divide(int num1, int num2) throws Exception{
		int res = num1 / num2;
		return res;
	}
}

捕获该异常:

public class ExceptionTest {
	public static void main(String[] args) {

		int res=0;
		try {
			res = MyMath.divide(4, 0);
			System.out.println(res);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println("提示用户除数不能为0");
			e.printStackTrace();//此处是打印异常堆栈信息方法,打印结果包括具体异常类、位置等信息
		}
		finally{
			System.out.println("无论是否有异常发生都执行的代码区域");
		}

	}
}
如图,finnaly代码块内的代码总会执行。

需要说明的是ArithmeticException继承于RunTimeException,而RunTimeException是一种特殊的异常,如果调用浸泡出该异常或该异常子类的异常的类方法,编译器不会强制进行捕获或者再抛给外部。因为RunTimeException异常的原因一般不是有程序的代码造成的而是传入的数据不符合规则,如被出入本应不能为0。因此不需要被强制进行处理,但是也可以视为普通异常进行相关操作。

下面的例子中可能出现的异常有两种(此时视RunTimeException为一般异常也对其处理)

class MyMath {
	public static int divide(int num1, int num2)  {
		int[] arr = new int[num1];

		System.out.println(arr[9]);

		return num1/num2;
	}
}
除了ArithmeticException外,还可能抛出数组越界异常ArrayIndexOutOfBoundsException(属于RunTimeException),此时依然可以只抛出Exception类,但是这两种异常情况出现后,处理方式应该有所区别,分别对待。所以仅抛出Exception就不行了。

应该将两种具体异常跑出来,让调用者分别做出处理办法

class MyMath {
	public static int divide(int num1, int num2) throws ArithmeticException,ArrayIndexOutOfBoundsException {
		int[] arr = new int[num1];

		System.out.println(arr[9]);

		return num1/num2;
	}
}
处理方式:

public class ExceptionTest {
	public static void main(String[] args) {

		int res = 0;
		try {
			res = MyMath.divide(4, 0);
			System.out.println(res);
		} catch (ArithmeticException e) {
			// TODO: handle exception
			System.out.println("被除数不能为0");
		} catch (ArrayIndexOutOfBoundsException e) {
			// TODO: handle exception
			System.out.println("数组越界了");
		}finally{
			System.out.println("最后总会执行");
		}
		

	}
}
现在假定需求除数为负数也是不应该出现的,假如出现除数为负数,程序就停止且抛出异常。但是这是一种自己定义的异常规则。现有的异常类中并没有与之对应的异常类,此时可以定义一个自定义异常专门描述这种情况。

public class MinusException extends Exception {

	public MinusException(String msg) {
		super(msg);
	}

}
使用该异常

class MyMath {
	public static int divide(int num1, int num2) throws MinusException {
		if (num2 < 0)
			throw new MinusException("/ by minus:"+num2);
		return num1 / num2;
	}
}

public class ExceptionTest {
	public static void main(String[] args) {

		int res = 0;
		try {
			res = MyMath.divide(4, -1);
			System.out.println(res);
		} catch (MinusException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			System.out.println("最后总会执行");
		}

	}
}
抛出自定义异常:exception.MinusException: / by minus:-1



异常在实际开发中

class FailureException extends Exception
{
}


public void method()throws NoException
{


连接数据库;


数据操作;//throw new SQLException();


关闭数据库;//该动作,无论数据操作是否成功,一定要关闭资源。


try
{

连接数据库;


数据操作;//throw new SQLException();
}
catch (SQLException e)
{
会对数据库进行异常处理;
throw new FailureException();//告知调用者操作失败


}
finally
{
关闭数据库;
}


}

异常的三个形式:

// 第一个格式:
		try {

		} catch (Exception e) {
		}

		// 第二个格式:
		try {

		} catch (Exception e) {
		} finally {

		}

		// 第三个格式:
		try {

		} finally {
		}
第三种形式没有对异常进行捕获,所以当非RunTimeException时,必须声明到方法上。如果发生异常,finally总执行。

关于子父类间的异常

子父类间异常的原则

1,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
2,如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
3,如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。

如下:

class AException extends Exception{
	
}
class CException extends Exception{
	
}
class DException extends Exception{
	
}
class BException extends AException{
	
}

class Superclass{
	public void show() throws AException{
		
	}
}
class SubClass extends Superclass{
	@Override
	public void show() throws BException {
		// TODO Auto-generated method stub
		super.show();
	}
}
如果子类抛出DException,父类抛出AEXception和CEXception

编译器会通知Exception DException is not compatible with throws clause in Superclass.show()

class Superclass{
	public void show() throws AException,CException{
		
	}
}
class SubClass extends Superclass{
	@Override
	public void show() throws DException {//抛出的DException非父类抛出的子集 编译器不通过
		// TODO Auto-generated method stub
		super.show();
	}
}
总结一句话:下一代一定要比上一代更“好”,即抛出的异常少于等于父类,同时也不产生对于父类更新的异常。



AirSim安装和地图加载 详细教程如何安装AirSim并加载地图 阅读详情

相关推荐

汇川AM系列PLC玩转CNC:手把手教你用File模式读取G代码文件(附避坑指南)

本文详细介绍了如何使用汇川AM系列PLC的File模式读取G代码文件,涵盖从CAD设计到PLC配置的全流程。特别针对路径格式、文件类型等常见问题提供避坑指南,帮助工程师快速实现CNC加工的自动化控制。

weixin_33582311的博客 408

java学习脚印: java异常处理机制及实践方法

java学习脚印: java异常处理机制 1.程序异常概念 1.1什么是程序异常? 异常是指在程序执行过程中扰乱程序正常执行流程的事件。 简单说,异常就是程序中发生的错误破坏了预定的执行过程。 1.2是什么导致异常? 理想情况下,程序运行时一切都按照程序要求执行,用户输入数据格式永远都是正确的,选择的文件一定可以读写,打印机一定处于工作状态,内存也一

王定桥的专栏 3141

三极管稳压电路仿真分析

Z1的负极连接到三极管的基极,三极管发射极E是输出,形成了一个射极跟随器,也就是说,E极的电压随着B电压变化而变化,但BE之间有一个压降,一般硅管0.7V左右,假设B极是6.7V,那E极就是6.7-0.7=6V,所以就有一个公式VOUT=Vz-Vbe,可以根据VOUT来选择合适的稳压管。从稳压管的SPEC中我们可以看到,Vz@Izt这个参数,指在Izt=20mA时,稳压管的稳压值Vz=5.1V,也就是说流过稳压管的电流在20mA以上,稳压效果最佳。三极管导通之后,E点电压会升高,当升高到Vbe。

U_YAO的博客 2328

Exception UserExistException is not compatible with throws clause in UserService.findUserByName(Stri

该方法报出Exception UserExistException is not compatible with throws clause in UserService.findUserByName(String)该方法是实现类,其实现的接口中没有抛出异常

mdd优快云的博客 6400

H3C IPsec over GRE VPN 实验

配置 IPsec over GRE VPN 来连通两端内网

M建的博客 2481

vCenter6.7证书过期导致503报错的全面修复指南:从STS证书更新到SSL信任修复

本文详细解析了VMware vCenter 6.7因STS证书过期导致503服务不可用错误的根本原因,并提供了从诊断、更新STS证书到修复SSL信任链的完整解决方案。通过命令行工具检查证书状态,使用官方脚本更新过期STS证书,并利用lsdoctor工具修复深层SSL信任问题,最终指导用户使用certificate-manager彻底重置所有证书,帮助管理员快速恢复vCenter服务。

pz890123的博客 1294

常见SQLException异常

ORA-00904:  invalid column name 无效列名ORA-00942:  table or view does not exist 表或者视图不存在ORA-01400:  cannot insert NULL into () 不能将空值插入ORA-00936: 缺少表达式ORA-00933: SQL 命令未正确结束ORA-01722: 无效数字:(一般可能是企图将字符串类型的

always_my_fault的专栏 4万+

【无标题】 Python自动化法律文书撰写

Jinja2是一个功能强大的模板引擎,支持丰富的语法和功能。除了条件判断和循环语句外,Jinja2还支持过滤器、宏、继承等高级特性,非常适合处理复杂的文书模板。

master_chenchen的博客 2064

oracle常见异常

  oracle常见异常      java.sql.SQLException异常:ORA-00904: invalid column name 无效列名 ORA-00942: table or view does not exist 表或者视图不存在ORA-01400: cannot insert NULL into () 不能将空值插入

netdevgirl的专栏 1156

openmediavault(OMV)(30)插件介绍(3)filebrowser文件管理器

filebrowser可以对omv的文件进行图形化管理,而不需要每次都通过命令进行修改。filebrowser安装。

Monster✺◟(∗❛ัᴗ❛ั∗)◞✺的博客 2321

斑马算法优化变分模态分解ZOA-VMD数字信号去噪(优化K值 alpha值)【含Matlab源码 4887期】

斑马算法优化变分模态分解ZOA-VMD数字信号去噪(优化K值 alpha值) 完整的代码,包运行;运行操作视频见优快云资源!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 811

java异常处理

什么是异常 异常处理 如何捕捉异常? finally语句 常见异常 自定义异常 那么具体如何自定义异常类呢? throw关键字 throws关键字 运行时异常 异常处理流程

随便写点C++和JAVA的知识 6304

PCL RANSAC拟合分割多条直线【2026最新版】

使用RANSAC算法拟合分割多条直线,输出每一条直线的拟合参数到控制台,并保存直线点云到本地文件夹。博客长期更新,本文最新更新时间为:2026年5月24日。

点云侠的博客 7974

Java异常处理

/ 支付异常(继承RuntimeException)// 异常附加信息异常处理核心要点理解异常分类:明确Error/Checked/Unchecked的区别选择合适的异常类型:业务异常优先使用RuntimeException保持异常信息完整:包含业务上下文和原始异常全局异常处理:统一REST API错误格式性能优化方向避免在循环内部抛出异常高频调用路径禁用异常控制流使用预检查替代异常捕获:// 优化前try {// 处理越界// 优化后} else {

weixin_44343004的博客 1068

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【Java】—— Java异常处理 总结

1. 什么是异常?指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止。​2. 异常的抛出机制Java中把不同的异常用不同的类表示,一旦发生某种异常,就`创建该异常类型的对象`,并且抛出(throw)。然后程序员可以捕获(catch)到这个异常对象,并处理;如果没有捕获(catch)这个异常对象,那么这个异常对象将会导致程序终止。​3. 如何对待异常对于程序出现的异常,一般有两种解决方法:一是遇到错误就终止程序的运行。另一种方法是程序员在编写程序时,

weixin_63106307的博客 1166

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java异常处理底层_Java异常处理机制

什么是异常?异常本质上是程序上的错误,错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误。编译期间的错误通常是基础的语法错误,比如括号没有正常配对、语句结束后少写了分号,关键字编写错误等,编译器会对这些错误给出提示,帮助我们进行修订。运行期间的错误只有程序运行时才能看到错误的提示,比如数组访问时下标越界、使用空对象调用方法、算术运算时除数为0、类型转换时无法正常转型等,运行期间的错...

weixin_29471541的博客 779

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java异常处理终结篇——如何进行Java异常处理设计

使用Java异常的人很多,但能合理使用的却不多,Java异常处理设计是一个冷门的话题,但好的异常设计会让程序有质的变化,所以本文从各个方面分析便总结了,在Java程序中,如何进行异常设计。

登高而望远 1万+

Java 异常处理

在 Java 中你可以自定义异常。编写自己的异常类时需要记住下面的几点。所有异常都必须是 Throwable 的子类。如果希望写一个检查性异常类,则需要继承 Exception 类。如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。可以像下面这样定义自己的异常类:只继承Exception 类来创建的异常类是检查性异常类。下面的 InsufficientFundsException 类是用户定义的异常类,它继承自 Exception。

qq_25502783的博客 659

java分层异常处理_Java异常处理总结

1 异常处理的重要性对于一个应用系统,设计一套良好的异常处理体系是很重要的,因为它对于程序的后期维护有十分重要的意义。应用系统的异常处理体系或者说框架,应该在系统设计初期的时候就考虑清楚,这样可以避免开发阶段由于异常处理体系的混乱而引起的不必要的重构工作。2 Java异常体系从类图中可以看出java异常的类继承关系,Throwable是所有异常和错误的父类。它的两个子类Error和Exceptio...

weixin_42514783的博客 496

Java异常处理机制

作者:小符 撰写时间:2018.4.24 学会了异常处理可以帮助你去掉一些在代码中不必要的麻烦,可以在发生错误时,抛出错误,让你的程序减少奔溃的几率。当发生错误时,可以在短时间内找到错误所在行,会节省很多时间,让程序更加健壮。 Java异常处理机制为:抛出异常,捕捉异常,处理异常。 语法格式: try…catch 在使用try…catch捕获处理异常时需要注意: **·**不要过度使用异常,不能使...

白夜光的博客 3894

【 java 异常处理】一文速通 java 异常处理

在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等等。因此异常处理就显得十分重要!

阿牛的博客 959

Java的异常处理机制

一、什么是java异常? java异常指在程序运行时可能出现的一些错误,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,中断了正在执行的程序的正常指令流。Java通过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的错误条件。当条件生成时,错误将引发异常。 Java异常类...

BoSea 5万+

java 异常处理总结

征文 | 从高考,到程序员    深度学习与TensorFlow入门一课搞定!    每周荐书 | Web扫描、HTML 5、Python(评论送书) java 异常处理总结 标签: 异常处理java 2016-09-22 10:30 80人阅读 评论(0) 收藏 举报 本文章已收录于: 版权声明:本文为博主原创文章,未经博

qq_36638469的博客 540

理解Java异常处理机制——Java异常处理的一个综合实例

理解Java异常处理机制——Java异常处理的一个综合实例                                   佟强 2009年12月8日声明抛出异常如果程序员不想在当前方法内处理异常,可以使用throws语句声明将异常抛出到调用方法中。调用方法也可以将异常再抛给其他调用方法。如果所有的方法都选择了抛出此异常,最后Java虚拟机将捕获它,输出相关的错误信息,

佟强 6202

java future 异常处理_Java异常处理总结

转自:http://blog.51cto.com/lavasoft/18920Java异常处理总结异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出现,那么你每个地方都要做相同处理,感觉相当的麻烦!Java语言在设计的当初就考虑到这些问题,提出异常处...

weixin_39619270的博客 1715
上一篇: JAVA 集合框架总结
下一篇: JAVA String及基本数据类型包装类
SetO2
博客等级 码龄12年 5粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值