异常处理

异常处理
认识异常
首先看下面的代码:
class User
{
private String uname;
private int age;
public void setUname(String uname)
{
this.uname = uname;
uname = new String(uname.getBytes("8859_1"));
}
public String getUname()
{
return uname;
}
public void setAge(String age)
{
this.age = Integer.parseInt(age);
}
public int getAge()
{
return age;
}
}
应该说这是一段非常普通的代码,所以没有给任何注释。你可能还没有发现里面的问题,如果你对这段代码进行编译,会差生下面的错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Unhandled exception type UnsupportedEncodingException
错误产生在setUname方法中的编码转换的代码,这个代码我们经常会用到。如果你使用的是集成开发环境,在编写的时候系统就会提示。
因为String的getBytes方法的定义中声明了UnsupportedException异常,也就是说在调用这个方法的时候可能会产生这样的异常,我们必须对可能差生的异常进行处理。
先不考虑怎样解决这个问题,先把这行代码注释,然后我们编写主类来调用另外一个方法,代码如下:
package com.li.basic;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
public class ExceptionTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
User u = new User();
u.setAge("111");
System.out.println(u.getAge());
}
}
运行结果为:
111
如果把setAge中的“111”改成“aaa”,然后再运行,会得到下面的结果:
错误是在setAge方法中产生的,根源在于把字符串“aaa”转换成数字的时候出现了错误,因为“aaa”不能转换成数字,Integer.parseInt(String str)方法在被调用的时候可能会产生NumberFormatException,但是因为我们没有进行任何的处理,所以程序在运行过程中就死掉了。
接下来,我们分析一下这两种异常,先说第一种“UnsupportedEncodingException”,因为String的getBytes方法的作用是根据用户指定的编码方式得到字符串,如果用户指定的编码方式系统识别不了,这时候就没有办法给用户返回字符串了,只能告诉用户系统不支持用户指定的编码,也就是上面看到的“UnsupportedEncodingException”。所以可以认为异常实际上是程序运行时的一种状态,通常都是方法执行过程中产生的,所以也可以把异常理解为方法的一种返回值。就像上面的方法正常情况下返回字符串对象,而不正常的时候就返回“UnsupportedEncodingException”对象。
再看“NumberFormatException”,它是在把字符串转换成数字的时候产生的,是Integer的parseInt方法产生的,如果我们给的是数字组成的字符串,可以把字符串转换成数字返回给用户,但是如果我们给的不是数字组成的字符串,就像上面的例子中给的,这时候转换方法就不能正常工作了,不能给我们返回字符串,所以给我们返回了“NumberFormatException”。
所以对于异常我们可以这样理解:异常是方法的一种特殊的返回值,我们在调用这个方法的时候,如果这个方法有这样的特殊的返回值,我们就需要处理这种特殊的返回值。
基本的异常处理
所有的异常都是Exception类的派生类。Java是面向对象的语言,所有的处理代码都应该在方法中,所以异常的产生和异常的处理都在方法中进行。
在方法中处理异常通常有两种做法:第一种是直接处理异常,第二种是通过异常的声明把异常抛给该方法的调用者。
异常处理
要进行异常处理,首先应该确定要处理的异常是什么,这里假设要处理的异常是MyException,
异常处理的基本格式:
try
{
可能会产生异常的代码
}catch(可能会产生的异常类 对象名)
{
异常产生时的处理代码
}
把可能会出错的代码放在try语句里面,catch中写可能产生的异常类的对象,在catch后面的扩号中编写异常产生后的处理代码。如果不产生异常,catch后面的代码不会执行,如果try语句中有异常产生,并且异常类型与catch中类型匹配,则执行catch后面扩号中的代码。
例:现在使用异常处理对本章开头所描述的异常进行处理。
分析:产生异常的代码是:
uname = new String(uname.getBytes(“8859_1”));
String类的getBytes方法可能会产生的异常是:
UnsupportedEncodingException
所以上面的方法setUname的代码可以改为:
public void setUname(String uname)
{
this.uname = uname;
try {
uname = new String(uname.getBytes("8859_1"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
catch后面的异常类是可能会产生的异常类,e是对象的名字,这个名字与普通方法中的参数相同。后面的大扩号中的代码是异常产生时的处理代码。
现在再使用下面的代码调用这个setUname方法:
package com.li.basic;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
public class ExceptionTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
User u = new User();
u.setUname("中文");
System.out.println(u.getUname());
}
}
运行的结果为:
中文
如果把setUname中的“8859_1”改成“88591”,如下:
public void setUname(String uname)
{
this.uname = uname;
try {
uname = new String(uname.getBytes("88591"));
} catch (UnsupportedEncodingException e) {
System.out.println("编码方式写错了!");
}
}
再运行上面的程序,结果如下:
编码方式写错了!
中文
因为编码88591不存在,所以在运行过程中产生了异常,这个异常与catch中的异常匹配,所以执行catch后面的异常处理代码。输出了上面的结果。
如果把catch中的UnsupportedEncodingException改为Exception,如下面的代码:
public void setUname(String uname)
{
this.uname = uname;
try {
uname = new String(uname.getBytes("88591"));
} catch (Exception e) {
System.out.println("编码方式写错了!");
}
}
修改完之后,运行的结果没有发生变化。因为UnsupportedEncodingException是Exception的派生类,所以在catch可以写异常类的父类或者祖先类。
如果在try语句中可能会产生多种类型的异常,假设是Exception1和Exception2,可以使用两个catch语句,分别捕获这两种类型的异常,看下面的代码:
try
{
//可能会产生异常的代码
}
catch(Exception1 e1)
{
//产生Exception1类型的异常时的处理代码
}
catch(Exception2 e2)
{
//产生Exception2类型的异常时的处理代码
}
注意:如果Exception1是Exception2的父类或者祖先类,后面的catch语句将不起作用,因为第一个catch语句也能够捕获第二种类型的异常。但是可以把子类放在前面,把父类放在后面。
声明异常
另外一种处理异常的方式就是声明异常,基本格式如下:
方法修饰符 方法返回值 方法名(参数列表) throws 异常列表
{
可能会产生异常的代码
}
就是在方法的定义后面通过throws声明可能会产生的异常,如果在方法体中可能产生AException,在throws后面写AException就可以了,如果在方法体中可能会产生多种异常,就在throws后面把多个异常都写上,中间用分号割开。
基本思路就是:A方法在调用B方法的时候可能会产生异常,但是没有处理,所以相当于A方法在执行过程中也可能会产生异常,所以在A方法的后面声明异常就可以了。让调用A方法的方法再去处理异常。
例:我们使用这个方法对本章开头的第二种异常进行处理。
分析:可能会产生的异常是NumberFormatException,只需要在方法的后面使用throws声明这个异常就可以了。方法的代码如下:
public void setAge(String age) throws NumberFormatException
{
this.age = Integer.parseInt(age);
}
两种方式的比较
使用try…catch对异常进行处理,可以在调用方法的时候对异常进行处理,但是也丢失了一些信息,也就是说对于方法调用者来说根本不知道在方法的执行过程中是否有异常产生,是否完成了相应的功能。
在上面的例子中,使用try…catch对异常进行了处理,但是对于主函数来说根据不知道在方法setUname中是否产生了异常。也就是丢失了信息。
使用异常声明的方式处理异常,虽然没有对异常处理,但是对于方法的调用者来说知道可能会发生什么异常。从这一点上来说,声明异常的方式要比try…catch处理异常的方式好。但是声明异常的方式不能无限制的声明,总是有处理这个异常的地方。最终还是需要使用try…catch对异常进行处理。
finally
我们在使用try…catch进行异常处理的时候,如果try语句是由多条语句组成的,如果产生异常,在可能会产生异常的代码之后的代码就不会执行了,如果不产生异常,catch中的代码就不会执行了,有时候我们希望不管是否产生异常,有些代码都会执行,这时候就可以使用finally。基本结构如下:
try
{
//可能会产生异常的代码
}
catch(Exception e)
{
//异常处理代码
}
finally
{
//不管是否产生异常都要执行的代码
}
异常的产生
前面介绍了怎样对异常进行处理,但是异常是怎样产生的呢?异常可以认为是方法的一种特殊的返回值,所以异常是在方法的执行过程中产生的。
方法中如果有返回值类型,必须使用return语句返回执行的结果,如果在方法执行过程中产生异常,不能返回正常的结果,这时候应该返回一个异常,通过关键字throw来返回这个异常,通常叫做抛出异常。
如果想抛出某种类型的异常,throw后面跟该异常类型的对象即可。例如,想抛出一个Exception类型的异常,可以使用:
throw new Exception(“产生异常了!”);
括号中的信息是异常信息。
如果在方法中通过throw关键字抛出了一个异常,那么在方法的定义中必须声明这种异常,与前面介绍的异常处理中的异常声明方式是相同的。
下面通过例子来看一下具体的用法。再回到我们上面的例子,对年龄赋值的setAge方法,上面通过声明的方式对把字符串转换成数字可能会产生的异常进行了处理,仔细察看这个方法,如果用户输入的是字符串“333”,按照上面的代码,程序执行不会有问题,但是我们想一下,谁的年龄能到333岁,我还没有听说过有哪个人,只是听说过某些动物和植物能够或那么常。所以这里的赋值应该认为是不成功的,不应该赋值,应该告诉用户输入的年龄太大了。下面是修改后的代码:
public void setAge(String age) throws NumberFormatException,Exception
{
int temp = Integer.parseInt(age);
if(temp>0&&temp<120)
this.age = temp;
else
throw new Exception("年龄应该在0到120之间!");
}
主函数中的代码修改如下:
package com.li.basic;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
public class ExceptionTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
User u = new User();
try
{
u.setAge("abc");
//u.setAge("230");
//u.setAge("20");
System.out.println("年龄为:"+u.getAge());
}
catch(NumberFormatException e1)
{
System.out.println("应该输入数字");
}
catch(Exception e2)
{
System.out.println("应该输入0到120的数字!");
}
//u.setUname("中文");
//System.out.println(u.getUname());
}
}
如果输入“abc”,运行结果如下:
应该输入数字
如果输入“230”,运行结果如下:
应该输入0到120的数字!
如果输入“20”,运行结果如下:
年龄为:20
注意:我们这里假设年龄的合法值是0到120,如果你的系统有特殊的要求,应该根据你的实际情况来确定。
自定义异常
系统提供了很多种异常,前面提到的都是系统的异常,但是有时候为了方便,需要自己来定义异常。
自定义异常,就是根据需要创建自己的异常类。例如,我们前面的例子中对年龄赋值的时候,对年龄进行了判断如果年龄不合适就抛出异常,使用的是系统提供的Exception类,可能我们在其它地方使用的时候还会抛出Exception类型的异常,但表示的不是年龄不合适,而是其它类型的异常,这样就没有办法区分这两种类型的异常,所以需要创建自己的异常类来表示各种不同类型的异常。
自定义异常类,需要从Exception类或者它的子类派生。下面是自定义的异常,这个异常表示年龄不合适:
package com.li.basic;
public class InvalidateAge extends Exception {
public InvalidateAge(String msg)
{
super(msg);
}
}
这样在setAge方法中就可以使用这个异常了:
public void setAge(String age) throws NumberFormatException,InvalidateAge
{
int temp = Integer.parseInt(age);
if(temp>0&&temp<120)
this.age = temp;
else
throw new InvalidateAge("年龄应该在0到120之间!");
}
这样在调用这个方法的时候,就知道确切的异常类型了:
package com.li.basic;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
public class ExceptionTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
User u = new User();
try
{
//u.setAge("abc");
u.setAge("230");
//u.setAge("20");
System.out.println("年龄为:"+u.getAge());
}
catch(NumberFormatException e1)
{
System.out.println("应该输入数字");
}
catch(InvalidateAge e2)
{
System.out.println("应该输入0到120的数字!");
}
}
}
Web应用中的异常处理
在Web应用中基本上所有的异常都可以通过Java中基本的异常处理机制来完成。但是在Web应用中有一些特殊的地方,JSP和Servlet是容器来调用的,它们在调用过程中也可能会产生异常,如果我们不对这些异常进行处理,用户将看到系统的异常堆栈信息,对用户来说是不友好的,并且会使用户对系统失去信心,但是这些异常我们不能使用try…catch来处理,但是Web应用提供了相应的机制。
JSP文件在运行的时候系统会使用try…catch来处理页面产生的异常,如果产生异常,系统会抛出一个异常对象exception,这就是JSP提供的几个内部对象之一,这个异常对象我们必须编写异常处理文件来接收这个异常对象,然后对异常进行处理。但是异常处理文件和产生异常的文件不会自动关联,需要我们来处理。
这些比较特殊的异常主要是通过配置来完成的。有两种类型:为某个网页指定异常处理文件;为某种类型的异常指定异常处理文件。
为某个网页指定异常处理的文件
这种方式需要为每个需要进行异常处理的文件指定异常处理文件,这样当文件在运行过程中产生异常了,就会调用异常处理文件对异常进行处理,用户就看不到系统出现的错误堆栈信息,可以通过异常处理文件给用户比较友好的提示。
编写异常处理文件
通过page标签的isErrorPage属性来设置某一个页面为异常处理页面,假设error.jsp为异常处理文件,则error.jsp文件中应该有这样一句话标记该文件为异常处理文件:
<%@ page isErrorPage=”true” %>
只有设置了这个属性的文件才是异常处理文件,才能够访问exception中的信息。访问exception中的异常信息可以通过下面的几个方法:
toString(),把异常信息转换成字符串。
getMessage(),获取异常信息,同样是以字符串的形式返回。
printStackTrace(),使用标准输出流输出异常信息。
为页面指定异常处理文件
如果希望error.jsp能够对当前文件的异常进行处理,需要通过errorPage指定error.jsp文件为异常处理文件,在该文件的上面增加这样一行代码:
<%@ page errorPage=”error.jsp”%>
这样在页面执行过程中,如果产生的异常没有处理,这个异常会抛给容器,然后容器根据所配置的errorPage属性查找到error.jsp,调用error.jsp。
为某种类型的异常指定异常处理文件
前面的方式是为每个文件指定异常处理文件,这样需要在每个文件中进行设置,不方便,另外有些异常是不能通过这种方式处理的,例如用户在客户端输入了一个不存在的网页,通常会报下面的错误:
404错误(图片)
这个错误就是系统在找不对请求文件的时候报的错,不管在什么文件中都无法设置。另外一种方式就是设置统一的异常处理文件,为不同类型的异常设置异常处理文件,这个设置需要在web.xml中设置。
把异常信息显示给用户
系统在处理的过程中可能会产生各种不同类型的异常,用户输入的信息不合法,用户的请求在执行过程中产生异常了,这些信息应该让用户知道,否则用户根据不清楚自己请求的处理是否成功,对用户来说是不友好的。异常信息是我们在处理过程中产生的,但是给用户显示异常信息的是JSP文件,怎样把异常信息显示给用户呢?我们前面介绍过信息页面之间的信息共享,可以采用这种方式,先把信息保存在request对象中,然后在JSP页面中提取信息并显示出来。
异常信息的传递
把异常信息显示给管理员
通常与用户相关的异常信息可以通过页面返回给用户,但是有时候异常是因为系统的原因,这时候应该让管理员知道异常信息,而不是让用户知道异常信息,例如系统的数据库连接不上,这样的错误应该通过管理员,而不是让用户知道数据库有问题,可以告诉用户系统正在维护。
因为管理员可能不能一直在服务器面前,所以通常需要使用日志的方法把异常记录到日志文件中,然后管理员通过察看日志文件去察看异常信息。
Python爬虫实战:基于Playwright与异步技术的专利数据抓取系统 专利数据是企业技术创新、市场竞争分析和行业趋势预测的关键情报来源。然而,专利数据通常分散在各个国家的专利局网站,数据结构复杂,反爬机制严格,使得高效抓取成为技术挑战。本文将详细介绍如何构建一个基于最新Python技术的专利数据抓取系统,涵盖Selenium的现代化替代方案Playwright、异步编程、智能代理轮换等高级技术。 阅读详情

相关推荐

电源完整性仿真流程梳理

可根据仿真流程导图,一步一步的去设置完成仿真。仿真的关键,在于对电路回路的理解以及所放置的电压源与电流的合理性,对于去耦电容的选择,则需要根据谐振频率计算,从而选取有效滤波的容值。

csy17729158342的博客 3442

unhandled exception type UnsupportedEncodingException

当使用下面做编码转换时 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt"), "utf8"));  在编译时老是提示“unhandled   exception   type   UnsupportedEncodingException” ,

yuxiaohui78的专栏 1万+

TeraTerm 使用技巧

⏹TeraTerm 使用技巧

菜鸟记录 1万+

UnsupportedEncodingException(转码异常)你可能忽略的地方都讲啦

UnsupportedEncodingException(转码异常)的继承关系,以及处理方法还有总结异常方面的小知识。

chen_kai_fa的博客 1万+

详解Nacos集群搭建

在我们日常的开发当中,用的都是单点Nacos,这种模式,我们自己开发测试玩一玩还可以,但是到了企业的生产环境之下,你还这么玩的话,那肯定是要出大问题了。因为在企业当中,我们更加强调的是高可用,所以在企业的生产环境下,Nacos一定要做成个集群。

博客 1万+

头歌MySQL数据库实训答案 有目录

头歌java实训答案集数据库部分一条一条的写,可鼠标手动粘贴,除特定命令外未分大小写。 第1关:创建数据库 第2关创建表 第3关:使用主键约束 第4关:外键约束 第5关:添加常用约束 MySQL数据库 - 数据库和表的基本操作(一) 第1关:查看表结构与修改表名 第2关:修改字段名与字段数据类型 第3关:添加与删除字段 第4关:修改字段的排列位置 第5关:删除表的外键约束 MySQL数据库 - 数据库和表的基本操作(二) 第1关:插入数据 第2关:更新数据 第3关:删除数据 MySQL数据库 - 单表查询(

m0_67401761的博客 4万+

java中,遇到“Unhandled exception type……”怎么处理?

在IntelliJ IDEA 中编写java代码时候 ,调用函数,显示Unhandled exception type , 此时的解决方法是将这块代码写在try..catch里面就可以了。 try { getPiccFreightSDK().propose(proposalRequest, proposalResponse); }

harryptter的专栏 2万+

手把手教你在Keil/IAR中移植SEGGER_RTT组件(避坑指南+性能对比)

本文详细介绍了在Keil/IAR开发环境中移植SEGGER RTT调试组件的完整流程与优化技巧。通过对比传统串口调试,SEGGER RTT凭借零硬件占用、高速传输和双向交互等优势,显著提升嵌入式开发效率。文章包含配置步骤、性能调优方案及常见问题解决方案,是嵌入式开发者必备的实用指南。

y7z8a的博客 245

Python程序异常处理

异常就是程序运行时发生错误的信号,在程序由于某些原因出现错误的时候,若程序没有处理它,则会抛出异常,程序也的运行也会随之终止;1.程序终止,无法运行下去;2…如果程序是面向客户,那么会使客户的体验感很差,进而影响业务;当处理不确定因素时,比如有用户参与,有外界数据传入时,都容易出现异常;1.由于语法错误导致程序出现异常,这种错误,根本过不了Python解释器的语法检查,必须在程序执行前就改正;

Python编程学习的博客 6459

42、InfiniBand技术详解:QP状态机、操作及错误处理

本文深入解析InfiniBand技术中的核心组件QP(Queue Pair)状态机、工作请求处理机制、支持的操作类型及错误处理策略。详细介绍了QP的创建与状态转换流程,包括INIT、RTR、RTS等关键状态,并提供了状态修改的代码示例。文章还探讨了工作请求的发布、资源使用限制、围栏机制以及重试和RNR流程,帮助开发者理解通信可靠性保障机制。此外,涵盖了多播组的应用场景与API使用方法,并对比了用户空间与内核级RDMA API的调用差异,最后给出了实践建议和常见问题解答,为构建高性能分布式系统提供技术指导。

oauth7security的博客 133

【云原生】阿里云SLS日志自定义字段标签实现日志告警

样例:一个典型的java log初始化日志格式把日志中的INFO提取出来做为一个标签,在开源日志框架中,配置采集器实现- regex:在阿里云SLS日志服务同样可以实现,首先我们进入到一个日志库,查看数据接入,我这里使用的是Logtail工具在【处理配置】中,选择【处理插件组合】,新增提取字段插件原始字段:填写要被提取的日志,对应原始字段的内容做正则结果字段:正则表达式对应的捕获组对应结果:捕获组 匹配内容 说明1 ywgy-app-service 服务名称。

CN_Eden 742

SpringBoot异常处理

把异常页面统一放在templates的error文件夹下404、500实际项目处理中会出现各种各样的异常,如果以上面的方式处理异常,我们就需要写大量的异常处理页面,太过麻烦,可以定义中一个全部异常处理页面使用了全局异常处理后原本的/error页面就会失效共有三种方法:这里举例两种一、注解自定义一个全局异常处理类,只需上面加上 @ControllerAdvice 注解同时要在执行异常处理的方法上标记@ExceptionHandler。

仰望-星空~~的博客 5219

【数据集】中国陆地生态系统通量观测网 ChinaFLUX

【数据集】中国陆地生态系统通量观测网 ChinaFLUX

WW、forever的博客 194

spring异常处理

在项目中采用spring的异常处理机制:示例一、在Controller中加@ExceptionHandler注解定义异常拦截的方法,在方法中定义返回的页面: error.jsp 示例二、将异常处理做成一个公共的: 效果:两者区别:示例一只能捕获所属Controller中的方法抛出的异常,不能捕获其他Controller中的,示例二可以捕获所有Controller抛出的异常。下面看源码分析: 由handlerAdapter进行反射调用后,调到controller中的具体方法,抛出的异常最终被捕获,

weixin_38441454的博客 3305

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

什么是异常处理以及异常处理的方式

错误分为两种,一种为语法错误,一种为逻辑错误 异常就是程序运行错误时发出的型号,或者说是程序运行崩溃的结果 常用异常: AttributeError试图访问一个对象没有的属性,比如调用Foo.x,但是Foo下没有x属性 IOError输入/输出异常,基本上是无法打开文件的 ImportError无法引入模块或包,基本上是路径问题或者名称错误 IndentationError语法错误的子类,代码没有...

我一定要成为测试开发! 4918

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C# 异常处理

异常处理机制为开发者提供了一种有效的方式,能够将程序的控制权从出现问题的部分合理地转移到其他部分,确保程序在遇到意外情况时依然能够保持相对稳定的运行状态,或者至少能够以一种可控的方式终止并给出相应提示。C# 的异常处理建立在四个至关重要的关键词之上,它们分别是 try、catch、finally 和 throw,各自承担着不同且关键的职责,共同构建起了完善的异常处理体系。除了使用系统预定义的异常类来处理常见的异常情况外,开发者还可以根据实际业务需求定义自己的异常。tryelse。

2401_83367969的博客 2453

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

深入浅出Windows异常处理

程序执行过程中难免会发生错误,例如访问非法内存地址或除数为零等,CPU负责检测此类错误并转交给Windows处理,此类错误称为硬件异常。除了硬件异常,操作系统和应用程序还可以显式抛出一个异常,称为软件异常。异常处理是指异常发生后(包括硬件异常和软件异常),Windows或应用程序所执行的一段处理逻辑,这种处理逻辑旨在应对和解决异常情况,从而确保系统或应用程序能够继续运行或安全地终止。 异常发生时,如果程序中没有显式设置相应的异常处理代码,系统通常会启动Windows错误报告(Windows Error Re

huaqiang56的博客 2551

C++的异常处理

一、什么是异常处理        一句话:异常处理就是处理程序中的错误。二、为什么需要异常处理,以及异常处理的基本思想        C++之父Bjarne Stroustrup在《The C++ Programming Language》中讲到:一个库的作者可以检测出发生了运行时错误,但一般不知道怎样去处理它们(因为和用户具体的应用有关);另一方面,库的用户知道怎样处理这些错误,但却

大黑暗天 的专栏 2万+

SEH异常处理学习总结

前一段时间,在看异常处理一章内容的时候,发现这一部分还真的挺有尿水:)所以上网搜了一下有关内容,呦嗬,还挺丰富的。当然有些自己还是看不懂,现在就将这些宝贝拿出来跟大家共享一下。首先我们看一下使用异常处理的几种情况:A. 用来处理非致命的错误B. 对API函数的参数合法性的检验(假设参数都是合法的,只有遇到异常的时候进行合法性检验)C. 处理致命错误(退出时最好的选择,但是有的时候可以用异常处理函数

ToBeroOTer的专栏 4590

springboot之异常处理

异常分类: 代表编译和系统错误,不允许捕获 标准Java库的方法所激发的异常,包含运行异常Runtime_Exception和非运行异常 Non_RuntimeException 的子类 运行时异常。 非运行时可检测的异常,Java 编译器利用分析方法或构造方法中可能产生的结果来检测程序中是否含有检测异常的处理程序,每个可能的可检测异常、方法或构造方法的 throws 子句必须列出该异常对应的类。 用户自定义异常异常处理用于解决一些程序无法掌控, 但又必须面对的情况。例如,程序需要读取文件、连接网络、使用数

2202_75695913的博客 1251

kotlin中的异常处理_Kotlin异常处理

kotlin中的异常处理In this tutorial, we’ll be discussing Exception Handling in Kotlin. 在本教程中,我们将讨论Kotlin中的异常处理。 什么是例外? (What are Exceptions?) Exceptions are something that can break your program. That make...

从零开始的教程世界 4961

Java异常处理

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

weixin_44343004的博客 1068

C#:异常处理

C#异常处理总结及简单实例 一、异常处理的理解? 异常处理是指程序在运行过程中,发生错误会导致程序退出,这种错误,就叫做异常。 错误的出现并不总是程序员的原因,比如:连接数据库停电了,操作文件文件没了,权限不足,除数是0,使用对象是对象为null等。不处理错误程序没法继续执行。 .NET为我们把发现错误(try)的代码与处理错误(catch)的代码分离开来。 二、异常处理如何操作? C...

icnhh的专栏 2674
上一篇: 迭代器Iterator的用法
下一篇: 面向对象的实现
Java_Web_Book
博客等级 码龄18年 8粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值