异常分类总览图
Error:致命异常。标识系统发生了不可控的错误。程序无法处理,只能人工介入。例如, 虚拟机产生的错误StackOverflowError、OutOfMemoryError。
Exception: 非致命异常。程序可处理。分为受编译器检测的checked异常(受检异常)和不受编译器检测的unchecked异常(非受检异常)。
2. Exception又分为checked异常和unchecked异常,请分别举例说明。将派生于Error或者RuntimeException的异常称为unchecked异常,所有其他的异常成为checked异常。
Checked异常继承java.lang.Exception类。Unchecked异常继承自java.lang.RuntimeException类。
checked异常例子:
unchecked异常例子:
若想深入了解Checked和RuntimeException的话,推荐参考如下链接:
http://blog.csdn.net/kingzone_2008/article/details/8535287
StackOverFlowError:
原因:堆栈溢出错误一般是递归调用。
例如:
package 1; public class StackOverflowTest { public static void main(String[] args) { method(); } public static void method(){ for(;;) method(); } }
OutOfMemoryError:
package 1; import java.util.ArrayList; import java.util.List; public class OutOfMemoryTest { public static void main(String[] args){ List list=new ArrayList(); for(;;){ int[] tmp=new int[1000000]; list.add(tmp); } } }4. 简述异常处理的两种方式,并举例说明区别。
声明抛出处理:
声明抛出 throws 声明抛出的位置:是在方法声明的位置上使用throws关键字向上抛出异常。
例子:
程序捕捉处理:
try…catch…
语法:
try{
可能出现异常的代码;
}catch(异常类型1 变量){
处理异常的代码;
}catch(异常类型2 变量){
处理异常的代码;
}…
例子:
1、throw:指的是语句抛出一个异常。
例如:如下写了一个抛出异常的语句。利用throw可以自定义异常。
例子:
private void checkIndex(int index) { if (index <= size - 1 && index >= 0) { } else { throw new IndexOutOfBoundsException("index:" + index + " size:" + size); } }
2、throws:指的是方法可能会抛出的异常的声明。
例如:下面的代码可能会抛出IO异常。
例子:
public static void fileCopy(String from, String to) throws IOException { // 1、建立联系 file对象。源:存在且为文件+目的地:文件可以不存在 File fromPath = new File(from); File toPath = new File(to); fileCopy(fromPath, toPath); }8. finally子句的作用是什么?
finally常用来处理java一些后续的工作。
在java的的finally首先必须使用在所有catch的最后位置,其次它是必须执行的,无条件执行,甚至即使前面的try-catch语句中已经存在异常了,它仍然会执行。
不管try语句块正常结束还是异常结束,finally语句块是保证要执行的.如果try语句块正常结束,那么在try语句块中的语句都执行完之后,再执行finally语句块。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)