一.错误和异常

1.Thorwable类(表示可抛出)是所有异常和错误的超类(父类)。
2.Error错误:程序无法处理的错误,它是由JVM产生和抛出的,比如OutOfMemoryError、ThreadDeath等。
3.Exception异常:程序本身可以处理的异常,分为运行时异常(非受检异常)和非运行时异常(受检异常)。
4.运行时异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
5.非运行时异常从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。
二.解决异常的处理方法
1.try、catch、finally
(1)try、catch、finally三个语句块均不能单独使用,三者可以组成try...catch...finally、try...catch、try...finally三种结构,catch语句可以有一个或多个,finally语句最多一个。
(2)try、catch、finally三个代码块中变量的作用域为代码块内部,分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。
(3)多个catch块时候,最多只会匹配其中一个异常类且只会执行该catch块代码,而不会再执行其它的catch块,且匹配catch语句的顺序为从上到下,也可能所有的catch都没执行。
(4)程序执行时先catch子类异常再catch父类异常。
(5)final中的代码一定会被执行,finally 异常中总能执行的代码区,final 用于定义常量的关键字,finalize() 垃圾回收,该方法是系统调用,不用程序员手动调用。
public static void main(String[] args) {
int[] a = new int[5];
try {
for (int i = 0; i <10; i++) {
a[i] = i;
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("----------------");
}
2.throws和throw
(1)throws
定义一个方法的时候可以使用throws关键字声明。使用throws关键字声明的方法表示此方法不处理异常,而交给方法调用处进行处理。
public class ThrowsDemo01 {
public static void main(String args[]){
Math m = new Math() ;
try{
System.out.println("除法操作:" + m.div(10,2)) ;
}catch(Exception e){
e.printStackTrace() ; // 打印异常
}
}
}
class Math{
public int div(int i,int j) throws Exception{ // 定义除法操作,如果有异常,则交给被调用处处理
int temp = i / j ;
return temp ;
}
};
如果在主方法的声明也使用了throws关键字呢,那么是不是意味着主方法也可以不处理异常?在本程序中,主方法不处理任何异常,而交给JAVA中最大头JVM,所以如果在主方法使用了throws关键字,则表示一切异常交给JVM进行处理。
public class ThrowsDemo01 {
public static void main(String args[]) throws Exception{
Math m = new Math() ;
System.out.println("除法操作:" + m.div(10,0)) ;
System.out.println("我还可以输出");
}
}
class Math{
public int div(int i,int j) throws Exception{ // 定义除法操作,如果有异常,则交给被调用处处理
int temp = i / j ;
return temp ;
}
};
(2)throw
throw关键字作用是抛出一个异常,抛出的时候是一个异常类的实例化对象,在异常处理中,try语句要捕获的是一个异常对象,那么此异常对象也可以自己抛出。
public class ThisDemo06{
public static void main(String args[]){
try{
throw new Exception("自己抛着玩的。") ; // 抛出异常的实例化对象
}catch(Exception e){
System.out.println(e) ;
}
}
};


被折叠的 条评论
为什么被折叠?



