java中的%不对 如何处理_Java心得--异常及其处理
发布日期:2021-06-24 16:45:23 浏览次数:3 分类:技术文章

本文共 2632 字,大约阅读时间需要 8 分钟。

1.  异常是指程序在运行时发生的错误或不正常的状况。在不支持异常处理的计算机语言中,这些状况需要又程序员进行检测和处理。

异常类在java.lang包中。

根据错误性质可将运行错误分为两类:致命性的错误(Error)和非致命的异常(exception)。

2.编程错误的分类

ü    编译错误(compilation error)

ü    逻辑错误(logic error)

原因:在程序运行过程中,出现了不可能执行的操作。

解决方法:异常处理

原因:程序没有按照预期的方案执行

解决方法:利用调试技巧可以解决此类错误

原因:没有遵循语言的规则

解决方法:由编译程序检查发现

3.  运行时错误(runtime error)

在程序运行时出现的一些非正常的现象被称为运行时错误,如除数为0、数组下标越界、文件不存在、内存不够用等等。

分类:根据错误性质将运行时错误分为两类

(1)致命性的错误(错误处理一般由系统承担,语言本身不提供错误处理机制;灾难性故障,由Java虚拟机生成并抛出给系统。通常,Java程序不对错误进行处理)

例:程序进入了死循环、递归无法结束、内存溢出等,这些运行错误是致命性的错误,只能在编程阶段解决,运行时程序本身无法解决,只能依靠其他程序干预,否则会一直处于非正常状态。

(2)非致命性的异常(是可以检测和处理的,所以产生了相应的异常处理机制;是用户程序能够捕捉到的“异常”情况,由Java程序抛出和处理的 )

例:除数为0、操作数超出数据范围、文件并不存在、欲装入的类文件丢失、网络连接中断等,这类现象称为非致命性的异常。

4.  异常处理的类层次

Java中预定义了很多异常类,每个异常类代表一种运行错误。

5. 常用Exception类的子类:

异常类

描述

NullPointerException

空指针异常

ArrayIndexOutOfBoundsException

数组越界访问异常

ClassNotFoundException

试图访问一个根本不存在的类

IOException

输入/输出异常

NumberFormatException

错误的类型转换异常

ArrayStoreException

当向数组存入错误类型数据时

ArithmeticException

除数为0的算术异常

6.   try语句后面必须跟一个catch语句或finally语句,不能单独存在。

类名、方法名(包括主方法)、文件名和错误行数都会包括在一个简单的堆栈轨迹中。

7.抛出异常throw:

在程序发生异常时,产生一个异常事件、生成一个异常对象,并把它交给运行时系统。再由运行系统寻找相应的代码来进行处理,这个过程称为:抛出异常;一个异常对象可以由java虚拟机生成,也可以由运行的方法生成。异常对象包含了异常事件类型、程序运行状态等必要的信息。

异常捕获

运行时系统从生成对象的代码开始,沿方法的调用栈逐层回溯查找,直到找到包含相应处理代码的方法,并把异常对象交给该方法,来处理这一异常。这一过程称为:捕获异常。

发现异常的代码“抛出”异常

由程序员编写的相应代码“处理”异常

运行时系统“捕获”异常

8. 使用try-catch-finally语句捕获和处理异常

尽管系统提供的默认异常处理程序对于调试非常有用,但多数情况下用户仍然希望能自己处理异常。这样做的好处有:用户能自行修改错误;能有效防止程序的自动终止。

格式:try{

//产生异常的语句(包含可能引发异常的语句)

}catch(异常类1 变量){

//异常处理代码(对异常进行处理的代码)

}catch(异常类2 变量){

//异常处理代码

}[finally{

}

µ   try语句块

ü    将程序中可能出现异常的代码放入try块中。

ü    当try块中有语句引发异常时,系统将不再执行try块中未执行的语句,而执行匹配的catch块。

ü    如果try块中没有语句引发异常,则程序执行完try块中的语句后不执行catch块中的语句,即跳过catch语句,继续执行后面的程序。

µ   catch块

ü    每个try语句后面必须伴随一个或多个catch语句(或finally语句),用于捕捉try语句块所产生的异常并作相应的处理。

ü    catch子句的目标是解决“异常”情况,并像没有出错一样继续运行。

注意:一个try和它的catch语句组成了一个单元。catch子句的范围限制于try语句块中的语句。一个catch语句不能捕获另一个try声明所引发的异常(除非是嵌套的try语句情况)。被try保护的语句声明必须在一个大括号之内。try语句块不能单独使用。

µ   多个catch块

一个catch块只能处理一类异常,当try块中的语句组可能抛出多种异常时,就需要有多个catch块来分别处理各种异常。

ü    一个异常对象能否被一个catch块接收主要看该异常对象与catch块中声明的异常类的匹配情况,当它们满足下面条件中的任一条时,异常对象将被接受:

异常对象是catch块中声明的异常类的实例;

异常对象是catch块中声明的异常类的子类的实例;

异常对象实现了catch块中声明的异常类的接口。

ü    当使用多个catch块时,需注意catch子句排列顺序--先特殊到一般,也就是子类在父类前面。如果子类在父类后面,子类将永远不会到达。

9. try语句的嵌套

一个try语句可以在另一个try块内部----try语句的嵌套。

ü    每次进入try语句,异常的前后关系都会被压入堆栈。如果一个内部的try语句不含特殊异常的catch处理程序,堆栈将弹出,下一个try语句的catch处理程序将检查是否与之匹配。

ü    这个过程将继续直到一个catch语句匹配成功,或者是直到所有的嵌套try语句被检查耗尽。

ü    如果没有catch语句匹配,Java的运行时系统将处理这个异常。

10.finally语句块

ü    某些情况下,不管异常是否发生,都需要处理某些语句,那么就将这些语句放到finally语句块中。finally语句所包含的代码在任何情况下都会被执行。

ü    一个try语句至少有一个catch语句或finally语句与之匹配,但匹配的catch可以有多个,而finally语句只能有一个,并且finally语句并非必须有的。

finally语句总被执行,不管有没有return语句跳出。

转载地址:https://blog.csdn.net/weixin_33921444/article/details/114565806 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java 上传速度计算_java常见3种文件上传速度对比和文件上传方法详细代码
下一篇:java分词支持拼音_java 支持分词的高性能拼音转换工具,速度是 pinyin4j 的两倍...

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月18日 14时34分45秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章