Java异常
来源:互联网 发布:windows monaco 字体 编辑:程序博客网 时间:2024/05/18 02:16
Def:异常是指程序运行过程中可能出现的非正常状态。Java异常可以分为两类:可检查异常和非检查异常。
可检查异常:Checked异常。非可检查异常:Runtime异常和Error。
Checked异常:是指可以在编译阶段被处理的异常,所以它强制程序处理所有的Checked异常。
Runtime异常:是运行时异常,表示虚拟机的通常操作中可能存在的异常,是一种的常见的运行错误,无须强制处理。
Error:Error子类之所以属于非检测异常是因为:无法预知它们的产生时间。若Java应用程序内存不足,则随时可能出现OutOfMemoryError;起因一般不是应用程序中的特殊调用,而是JVM自身的问题。另外,Error类一般表示应用程序无法解决的严重问题,故将这些类视为非检测异常。
Java异常处理机制主要依赖于五个关键字:try、catch、finally、throw、throws。
try 关键字后紧跟一个花括号括起来的代码块,简称try块。它里面可置引发异常的代码。
catch后对应异常类型和一个代码块,用于表明catch块用于处理这种类型的代码块。后还可以跟一个finally块,finally块用于回收在try块里打开的物理资源,异常机制会保证finally块总被执行。
throws关键字主要在方法签名中使用,用于声明该方法可能抛出的异常。
throw则用于抛出一个实际的异常,throw可以单独作为语句使用,抛出一个具体的异常的对象。
PS:①为了保证一定能够回收try块中打开的物理资源,异常处理机制提供了finally块,无论try块中的代码是否出现异常,也不管在哪个catch块中被执行,finally块总会被执行。异常处理结构语法中只有try块是必须的,一旦没有try块,则不能出现catch和finally块,如果存在try块,则catch块和finally块都是可选的。但二者至少要出现其一。也可以同时出现多个catch块。catch块必须位于try块后面,而finally必须位于catch块后面(如果存在的话)。
②当java程序执行try块,catch块,时遇到了return语句或throw语句,这两个语句都会导致该方法的立即结束,但是系统并不会立即执行这两个语句,而是去寻找该异常处理流程中是否包含finally块,如果没有finally块程序立即执行return语句或throw语句,方法终止。反之,则系统会立即执行finally块——只有当finally块执行完后,系统才会再次跳回来执行try块,catch块里的return或throw语句,如果同时在 finally块中也存在return或throw语句,则finally块已经终止了方法,自然不存在系统再次跳转去执行try或catch块里的return或throw语句。
③使用throws声明抛出异常的思路是:当前方法不知道应该如何处理这种异常,该异常应该由上一级调用者处理,如果main方法也不知道如何处理这种异常类型。也可以使用throws声明抛出异常,把该异常交给javaJVM处理。
④JVM对异常的处理方法:打印异常跟踪栈信息,并终止程序运行。
⑤不能基于异常来重载方法。在父类中有异常说明,在子类中可以没有。
常用的运行时异常:
①illegalArgumentException ②ClassCastException ③IndexOutOfBoundException ④NullPointerException ⑤ArithmeticException
Java中StackOverflowError异常和OutOfMemoryError异常之间联系与区别:
①如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。
②如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常。
- java 异常,java,异常
- Java 异常 异常链
- Java异常
- Java 异常
- JAVA 异常
- Java异常
- java 异常
- Java异常
- java异常
- Java异常
- java异常
- java异常
- java异常
- java 异常
- java异常
- java异常
- java异常
- Java异常
- 【windows 7系统不熟悉 问与答8例帮你忙】
- Linux System Programming -- Appendix
- 如何使Chrome控制台支持多行js模式
- 在虚拟机 Linux redhat 5.4 x64 中安装yum 软件
- 不能打开msdn.col
- Java异常
- 【C#编程】基于服务的数据库与本地数据库
- 【Linux基础】进程管理
- x264 - x264_frame_init_lowres
- alter session set events相关知识(二)
- Map集合
- 关于android应用程序的入口
- 传奇2代码结构
- 12306验证码识别V1.5