异常分类总览图
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语句块。



