异常的概念:
通俗来讲,就是代码编译时和运行时出现的问题。(那么官方的话我布吉丢!)
异常的体系:
error:通俗来讲,就是比较严重的错误,是错误!所以不能被捕获和抛出。
Ioexception:就是,异常讲的主体。就是代码编译和运行时出现的问题。
Error 类体系描述了 Java 运行系统中的内部错误以及资源耗尽的情形,Error 不需要捕捉。RuntimeException 一般是外部错误(非 Error),其一般被 try{}catch 语句块所捕获
异常的分类:
编译时异常:代码编译时期就会检查;没有处理异常就会编译失败。如:checked异常。
运行时异常:代码运行时期就会检查:运行异常不会报错。如:runtime异常。
异常的继承结构:
基类为:Throwable;Error 和 Excepution继承Throwable;RuntimeExcepution和IOExcepution继承EXception。
异常的处理:
try{}catch{}finally:try:运行可能出现异常的代码; catch:捕获可能出现的异常; finnally:最后一定要执行的部分。
throws:抛出异常。
使用的规则:
try:try{}里面放运行可能出现异常的代码;
catch:1、父子类:
①子类声明的异常不能超过父类声明的异常的范围。
④catch可以有多个!当catch多个时,子类异常在前,父类异常在后。当父类异常在前时,后面的子类异常就不会执行。
⑤catch多个时,两个catch可以和无关系。
finnally: 不管前面怎么样finnally的代码一定要执行。
遇到return时,先执行finnally,然后执行return!
throws:谁调用,抛给谁。
①如果父类抛出多个异常,子类重写父类方法时,抛出和父类相同的异常或者是父类异常的子类或者不抛出异常
②父类方法没有抛出异常,子类重写父类该方法时也不可以抛出异常,此时子类产生该异常,只能捕获处理不能声明抛出
看代码题:
① catch的使用
public static void main(String[] args){
try{
String[]s=null;
s[0]="text";
System.out.println(s[0]);
}catch(Exceptoon e){
System.out.println("Excepution");
}catch(NullponintException npe){
System.out.println("NullPointException");
}
}
//运行结果:编译失败
分析一下:
这个代码有多个“catch”,需要秉承,子类异常在前 ,父类异常在后的规则;Excepution是NullPointException的父类,应该在后。
②throw的使用
public class A{
void proess() throws Exception{
throw new Excepution();
}
public static void main(String []args){
new B().process();
}
}
class B extends A{
void process(){
System.out.println("B");
}
}
//运行结果:B
分析一下:子类中重写的方法,子类声明的异常要少于父类的方法异常。
这道题目中,B重写A中的process方法,没有抛出异常,A的process抛出了异常,所以正常输出B。
public class SmoeExcepution{ }
public class A{
public void doSomething(){ }
}
public class B extends A{
public void dosomething() throws SomeExcepution
}
//A编译成功,B编译失败
分析一下:这道题目中,B重写A中的dosomething方法,抛出异常,A的没有抛出;A编译成功,B编译失败