其实,异常很久以前就遇到了,一直没整理。对异常的理解还需提高。
写程序和生活中的情况很相似,会遇到一些异常情况。有些异常能预料到,在程序执行中可能突然发生,可以防患于未然;有些则无法预料。
以下是部分异常继承:
1.Exception:程序本身可以处理的异常。发生异常,则可以处理。
2.Error:违反基本原则,由Java虚拟机抛出。如内存空间不足OutofMemory,Java虚拟机的方法调用栈溢出StackOutofMemoryError。出现异常,终止程序执行。
Exception:可分为运行时异常和受检查异常。
1.1RuntimeException:运行时异常。编译时,不需强制检查异常。用户可根据特定问题创建相关的运行时异常类。一般由于代码错误,执行了错误的操作,引起的异常。
1.2除RuntimeException以及它的子类,其他的Exception类及其子类都属于受检查异常(Checked Exception)。
处里异常,有两种方法。
(1)try……catch捕获并处理异常
try {
//可能发生异常的语句
}catch(){
//捕捉并处理异常,中断try中的正常流程,
}finally{
//无论是否有异常,总是会执行的语句,释放被占用的相关资源
}
finally中的语句放try……catch后面,某些情况也能执行,但如果catch中继续抛出异常,则导致catch所在的方法异常终止,就不执行try……catch后面的语句了。
(2)throws,方法的声明处通过throws语句声明抛出异常。
这个方法没有能力处理异常,所以抛出异常,交给上一层方法处理。
throws 与 throw区别:
throws:在声明方法处,方法 throws 异常类名。
throw:语句执行中使用throw。对象必须为java.lang.Throwable类或其子类的实例。
public static void main(String[] args) {
testException te=new testException();
te.testArray();
}
public void testArray(){
int[] b=new int[61862000];//超过虚拟机分配内存
System.out.println("整型数组创建成功");
}
java.lang.OutOfMemoryError: Java heap space
属于Error异常类,定义的数组大小超过了虚拟机总共可分配的内存。
public void testNullPointer(){
String ss=null;
ss.getBytes();
System.out.println("调用成功");
}
java.lang.NullPointerException
RuntimeException运行异常,空指针异常,没有指向指定的内存单元,即没有创建对象。这目前在程序中比较常见。
public static void main(String[] args) {
testException te=new testException();
try{
te.throwAgain();
}catch(Exception ef){
ef.printStackTrace();
System.out.println("处理异常了");
}
}
public void throwAgain() throws Exception{
try{
testThrow(-5);
}catch(Exception ef){
ef.printStackTrace();//无此句,则执行后,不显示出现异常的地方
throw new Exception("此方法无法处理,继续throw给上层");
}finally{
System.out.println("finally中语句总是执行");
}
System.out.println("finally之后的语句执行了");
}
//创建5个单元的数组
public void testThrow(int num){
if (num<0){
throw new IllegalArgumentException("个数不能小于0");
}
int a[]=new int [5];
System.out.println("创建数组成功");
}
若throw,则后面的语句就不执行了,回到上一层调用的函数。testThrow,回到throwAgain,然后处理上一个函数抛出的异常,由于throwAgain无法处理异常,所以继续上抛异常,此时,try……catch之后的语句就不执行了,最后在main函数里处理了。
由于处理异常,目前使用的不多,所以,以下几句以后慢慢体会了。
1.出现异常,使用try……catch时,虚拟机搜索方法调用栈来寻找异常处理代码块,如果抛出异常的代码块和处理异常的代码块相隔很多层,找的时间就多了。
2.避免过于庞大的try代码块。代码块越大,出现异常的情况就越多,分析发生异常的原因就越困难。
3.catch()中指定具体的异常类型。因为不同的异常执行不同的处理。
- 大小: 99.6 KB
分享到:
相关推荐
很好的异常的游标处理方法,整理出来了,比较详细,经供参考
PHP5面向对象05异常处理[整理].pdf
本人整理的关于vC 堆栈 异常处理的知识
什么时间使用runtimeException,什么时间使用Exception,大家有没有被困扰到?经整理,JAVA异常处理框架,以及如何构造自己的异常体系,讲得比较详细,值得一看。
常用类与异常处理,整理的非常详细,和大家一起分享一下
在本篇文章里
第8章异常处理与多线程[整理].pdf
JAVA异常思维导图,便捷整理思路,异常、异常处理:捕获异常、抛出异常、自定义异常、方法覆盖中的异常处理、在处理异常时,是选择捕获处理还是抛出处理?
根据自己的工程实践,查找资料整理的一些异常处理。
帮助大家复习java基础知识其中有 hashCode 2 toString 2 finalize 2 用已学知识做出简单的房屋出租系统 3 类方法使用注意事项和细节讨论 4 main()方法 4 代码块 4 代码块使用注意事项和细节 5 ...异常处理 2
C++异常处理的编程方法,网上很好的一个关于异常处理的资源,原来的是DOC的,看起来很难受,里面个格式很乱,doc里面看起来很难受,稍微整理了一下,转成了PDF,阅读起来舒服多了
前言:在前一篇《asp.net开发中常见公共捕获异常方式总结》,我们整理总结了asp.net服务端的异常处理。这一篇接着前文,简单总结并讨论一下javascript在客户端的异常处理。这样asp.net的服务端和客户端异常处理我们...
C语言字符串处理函数整理版本,包含字符串基本操作,字符串类型转换、字符检查、输入输出流、输入输出流分割、异常处理等
异常处理在PHP中的确无论如何都不算是一个新的特征。但在本文中,我们将讨论在PHP 5.3中基于异常处理的两个新的特点。第一个是嵌套异常第二是一套SPL(现在的PHP运行机制的一个核心扩展)的扩展的新的异常类型。这两...
Java提供了抛出异常、捕捉异常和finally语句的使用来处理程序异常,下面就来具体看一下关于Java异常处理的几条建议
在本篇文章里小编给大家整理的是关于php异常处理捕获哪些错误的相关知识点,有需要的朋友们学习下。
归纳整理部分Oracle异常问题,及解决办法 1、 ORA-12651:TNS:没有监听器 2、 ORA:-12545:因目标主机和对象不存在,连接失败 3、。。。。。。。。
本篇文章主要介绍了Spring MVC全局异常处理和单元测试,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
整理了python中常见的异常名字及对应的中文释义,适合python的初学者进行异常处理