Java异常
2016-03-14 20:04
357 查看
Java程序中的非正常情况分为两种::错误(Error)和异常(Exception)。
错误(Error):一般指与虚拟机相关的问题,如系统崩溃、虚拟机错误,内存不足等错误,程序因无法处理这些错误而中断。
异常(Exception):程序在编译和运行时出现的问题。如空指针,数组越界,除0等异常,程序可以捕获这些异常并处理。
一、java异常
java异常分为两大类:Checked Exception和Runtime Exception。
Checked Exception是在程序编译期出现的异常,这种异常是Java编译器强制要求处理的,要么用try-catch块捕获处理,要么用throws声明抛出,如果不处理,程序出错无法通过译。
Runtime Exception是在程序运行期出现的异常。这种异常是Java编译器不可预见的,如果不捕获处理,程序将终止,因此应该对这种异常进行捕获处理。
二、异常处理机制
抛出异常
在Java程序的执行过程中,如果出现了异常事件,就会产生一个异常对象,这个异常对象将提交给Java运行时环境JRE,这个产生异常和提交异常的过程叫做抛出异常。
抛出异常的三种方式:
1.系统自动抛出异常
执行程序代码时出现了异常,系统将抛出这个异常。
2.使用throws声明抛出异常
当某个方法可能抛出某种异常的时候可以用throws声明可能抛出的异常,交给这个方法的上一级调用者来处理。
3.使用throw抛出异常
当执行程序的时候出现某种情况的时候主动抛出异常,交给这个方法的上一级调用者来处理。
throws和throw的比较:
throws在方法签名处声明抛出异常,throw在方法体内抛出异常。
throws只是声明可能抛出这个异常,也有可能是不抛出的,throw被执行时一定会抛出异常。
捕获异常
当JRE接收到异常的时候,会寻找能处理该异常对象的catch块,找到合适的catch块并将该异常对象交给该catch块处理,这个过程叫做捕获异常。
如果JRE找不到捕获并处理异常的catch块,那么JRE将终止,Java程序将退出。
try-catch捕获异常:
当try{ }中的程序出现异常,则该异常出现的位置之后的程序代码都不执行,JRE会依次判断产生的异常对象是否是catch{ }后的异常类或者其子类的实例,如果是,异常被捕获,在catch{ }中进行处理,如果不是,继续跟下一个catch{ }块中的异常类的实例进行比较。
使用finally{ }:
除非退出了程序,否则finally{ }一定会在try-catch后执行,可以用finally{ }来关闭一些资源比如数据库连接或者IO流等。
Java异常跟踪栈:
异常对象的printStackTrace()方法可以用于打印异常的跟踪栈信息。
错误(Error):一般指与虚拟机相关的问题,如系统崩溃、虚拟机错误,内存不足等错误,程序因无法处理这些错误而中断。
异常(Exception):程序在编译和运行时出现的问题。如空指针,数组越界,除0等异常,程序可以捕获这些异常并处理。
一、java异常
java异常分为两大类:Checked Exception和Runtime Exception。
Checked Exception是在程序编译期出现的异常,这种异常是Java编译器强制要求处理的,要么用try-catch块捕获处理,要么用throws声明抛出,如果不处理,程序出错无法通过译。
Runtime Exception是在程序运行期出现的异常。这种异常是Java编译器不可预见的,如果不捕获处理,程序将终止,因此应该对这种异常进行捕获处理。
二、异常处理机制
抛出异常
在Java程序的执行过程中,如果出现了异常事件,就会产生一个异常对象,这个异常对象将提交给Java运行时环境JRE,这个产生异常和提交异常的过程叫做抛出异常。
抛出异常的三种方式:
1.系统自动抛出异常
执行程序代码时出现了异常,系统将抛出这个异常。
2.使用throws声明抛出异常
当某个方法可能抛出某种异常的时候可以用throws声明可能抛出的异常,交给这个方法的上一级调用者来处理。
3.使用throw抛出异常
当执行程序的时候出现某种情况的时候主动抛出异常,交给这个方法的上一级调用者来处理。
throws和throw的比较:
throws在方法签名处声明抛出异常,throw在方法体内抛出异常。
throws只是声明可能抛出这个异常,也有可能是不抛出的,throw被执行时一定会抛出异常。
捕获异常
当JRE接收到异常的时候,会寻找能处理该异常对象的catch块,找到合适的catch块并将该异常对象交给该catch块处理,这个过程叫做捕获异常。
如果JRE找不到捕获并处理异常的catch块,那么JRE将终止,Java程序将退出。
try-catch捕获异常:
当try{ }中的程序出现异常,则该异常出现的位置之后的程序代码都不执行,JRE会依次判断产生的异常对象是否是catch{ }后的异常类或者其子类的实例,如果是,异常被捕获,在catch{ }中进行处理,如果不是,继续跟下一个catch{ }块中的异常类的实例进行比较。
使用finally{ }:
除非退出了程序,否则finally{ }一定会在try-catch后执行,可以用finally{ }来关闭一些资源比如数据库连接或者IO流等。
Java异常跟踪栈:
异常对象的printStackTrace()方法可以用于打印异常的跟踪栈信息。
相关文章推荐
- Java集合框架
- java中hashCode方法与equals方法的用法总结_java_脚本之家
- (2.2.6)用Ant实现Java项目的自动构建和部署
- [Java] 作业2答疑
- java线程安全和锁机制详解
- 简单的Java程序
- Jump Game | Java最短代码实现
- JAVA: String
- java :引用类型的转换  方法重载和重写  构造函数 修饰符
- Java IO(四)
- java : 普通代码块,构造代码块,静态代码块区别及代码示例
- MyEclipse/Eclipse调背景色、代码配色、突出当前行、显示行数、放大字号方法总结
- [Java] 常用方法的解释
- 【MVC框架系列】(一)——Struts,让我把你看得明明白白
- Java.作业2 myClass
- Eclipse 报 堆内存不足
- eclipse 中集成 glassfish
- Spring4.1新特性——Spring缓存框架增强
- Java经典设计模式之五大创建型模式(附实例和详解)
- Spring4.1新特性——Spring MVC增强