(一)异常
1、异常结构
异常是程序运行过程中所发生的意外事件,它中断指令的正常执行
2、异常的类型
父类:Throwable
两个子类:Exception、Error
Error是程序无法处理的,如OutOfMemoryError,如果出现Error,java虚拟机会终止线程。
Exception又包括运行期异常和编译期异常
①运行期异常 常见的运行期异常有ArrayIndexOutOfBoundsException、NullPointerException
②编译期异常 常见的编译期异常有InterruptedException、ClassNotFoundException、NoSuchFieldException(反射中出现的异常)
上图为Java异常处理机制
(二)异常处理(一般针对编译期异常)----> 五个关键字
1、try关键字
将可能发生异常的代码放在try块中;
注意点:
1)一个try块对应多个catch块,对应一个finally;
2)如果try中存在多条可能会发生异常的代码A、B、C,如果A 发生异常,B、C语句不会被执行;
3)try块避免代码嵌套;
2、catch关键字
catch代码块中输入异常处理方式 ;
1)catch关心的异常;不关心的异常采用基类的引用,引用派生类的对象,父类处理;先用子类处理,再用父类处理;
2)尽量避免过分细化异常;
public class TestDemo{
public static void main(String[] args) {
int[] arr = {0};
People p = null;
try{
arr[1] = 10;
Thread.sleep(1000);
Class c = Class.forName("zs");
}catch(ArrayIndexOutOfBoundsException e){ //catch关心的异常;基类的引用,引用派生类的对象;先用子类处理,再用父类处理
e.getStackTrace();
}catch(Exception e){ //父类处理
e.getStackTrace();
}
}
}
3、finally关键字
特点是:无论是否会发生异常必定会被执行到
异常处理格式
try{
//有可能出现异常的语句
}catch(异常类型 对象){
//异常处理
}catch(异常类型 对象){
//异常处理
}...
}catch(异常类型 对象){
//异常处理
}finally{
//不管是否出现异常,都执行为统一代码
}
4、throws关键字
在方法后面通过throws关键字+异常处理;
注意:多个异常通常由父类处理
例如:
public static void fun() throws InterruptedException {//一个异常的处理
Thread.sleep(1000);
}
public static void fun() throws ClassNotFoundException,InterruptedException {//多个异常的处理
Class c = Class.forName("People");
Thread.sleep(1000);
}
public static void fun() throws Exception { //多个异常由父类处理
Class c = Class.forName("People");
Thread.sleep(1000);
}
5、throw关键字
public class JavaDeom{
public static void main(String[] args){
try{
throw new Exception(.....);
}catch(Exception e){
e.printStackTrace
}
}
}
throw和throws关键字的区别:
throws:是在方法定义中使用,表示将此方法中可能产生的异常明确的告诉给调用处,由调用处处理;
throw:是在代码块中使用,主要是手动进行异常对象的抛出;