1.JVM默认是如何处理异常的
main函数收到这个问题时,有两种处理方式:
a:自己将该问题处理,然后继续运行
b:自己没有针对的处理方式,只有交给调用main的jvm来处理
jvm有一个默认的异常处理机制,就将该异常进行处理并将该异常的名称,异常的信息.异常出现的位置打印在了控制台上,同时将程序停止运行
2.服务端开发,一般都是底层开发,从底层向上抛
* try后面如果跟多个catch,那么小的异常放前面,大的异常放后面,根据多态的原理,如果大的放前面,就会将所有的子类对象接收 * 后面的catch就没有意义了
int a = 10;
int b = 0;
int[] arr = {11,22,33,44,55};
try {
System.out.println(a / b);
System.out.println(arr[10]);
arr = null;
System.out.println(arr[0]);
} catch (ArithmeticException e) {
System.out.println("除数不能为零");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("索引越界了");
} catch (Exception e) { //Exception e = new NullPointerException();
System.out.println("出错了");
}
System.out.println("异常处理后继续向下执行");
3.异常注意事项
a:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)
b:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
c:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws
B:如何使用异常处理
原则:如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这是用throws
区别:
后续程序需要继续运行就try
后续程序不需要继续运行就throws
-
Throw
可以在指定的方法中抛出指定的异常。
Throw关键字必须写在方法内部。
Throw关键字后面的new的对象必须是exception或者是exception的子类对象。
Throw关键字抛出的指定异常必须处理这个异常对象。
Throw关键字后面创建的是RuntimeException或者是RuntimeException的子类对象,可以不处理,默认交给jvm处理(打印异常,中断程序)。
Throw关键字后面创建的是编译异常,必须处理,要么throws,要么try…catch。NullPointException ArrayIndexOutOfBoundsException 是运行期异常,不用处理,默认交给JVM处理。
5.Throws是异常处理的第一种方式
异常处理的第一种方式,交给别人处理。让方法的调用者处理。
有缺陷,异常后面的代码不执行。
作用:
当方法内部抛出异常对象的时候,就必须处理这个异常对象。
可以使用throws关键字处理异常对象,会把异常对象声明抛出给方法的调用者处 理,最终交给JVM处理,中断处理。
注意: 写在方法声明处
Throws关键字后面的声明异常必须是exception或者它的子类。
方法内部如果抛出了多个异常对象,那么throws后面必须页声明多个异常。
6.Try…catch是异常处理的第二种方式
(自己处理异常。后序的代码继续执行。)
Try{
可能产生异常的代码
}catch(定义一个异常的变量,用来接收try中抛出的异常对象){
异常的处理逻辑,异常对象产生之后,怎么处理异常对象
一般在工作中,会把异常的信息记录到一个日志中。
}
注意:
1.try中可能会抛出多个异常对象,那么就可以使用多个catch来处理这些异常对象。
2.如果try中产生了异常,就会执行catch中的异常处理逻辑,执行完毕catch中的处理逻辑,继续执行try…catch之后的代码。
3. 如果try中没有产生异常,那么就不会执行catch中的异常处理逻辑,执行完毕catch中的处理逻辑,继续执行try…catch之后的代码。
-
Throwable中处理异常的三个方法
try{
//可能会产生异常的代码
readFile(“c:\a.tx”);
}catch(IOException e) {
System.out.println(“catch输出”);System.out.println(e.getMessage()); System.out.println(e.toString());//重写Object类的toStirng方法 System.out.println(e);//默认执行的是toString方法 e.printStackTrace();//打印的最全面,包括异常产生的位置,原因
8.(finally关键字的特点及作用)
A:finally的特点
被finally控制的语句体一定会执行
特殊情况:在执行到finally之前jvm退出了(比如System.exit(0))
B:finally的作用
用于释放资源,在IO流操作和数据库操作中会见到