赞
踩
1.异常是指在程序的运行过程所发生的不正常事件,如所需文件找不到、网络连接不通或连接中断、算术运算出错(如被零除)、数组下标越界、装载一个不存在的类、对null对象操作、类型转换异常等。
2.异常会中断正在运行的程序。
所有异常类型都是Throwable类的子类,它派生了两个子类:Error类和Exception类。
Error类:表示仅靠程序本身无法恢复的验证错误,如内存溢出、动态链接失败、虚拟机错误。
Exception类:由Java应用程序抛出和处理的非严重错误,如所需文件找不到、网络连接不通或连接中断、算术运算出错(如被零除)、数组下标越界、装载一个不存在的类、对null对象操作、类型转换异常等。
Exception类又可分为两大类异常:
(1)运行时异常:包括RuntimeException及其所有子类。不要求程序必须对它们进行处理。
(2)Checked异常(非运行时异常):除了运行时异常外的其他从Exception类继承来的异常类。
下图为java中一些常见的异常:
程序有异常了就得处理一下,异常处理就像人们对平时可能遇到的意外情况,预先想好了一些处理的办法。在程序执行代码是,若发生了异常,程序会按照预定的处理办法对异常进行处理,异常处理完毕之后,程序继续执行。
而java中的异常处理是通过5个关键字来实现的,即try、catch、finally、throw和throws。
5个关键字的作用(这里只是个人的理解,详细请看上图):
try:到对异常的监视作用。
catch:起到对异常的捕获作用。
finally:无论是否发生异常,代码总能执行。
throws:声明异常。
throw:抛出异常。
注意事项:
(1)throw可以写在try、catch、finally当中之中以及代码块之外(可以写在方法内的任何一个位置)
(2)除了在try中不用在方法参数列表后面写throws之外,其他地方全要写throws。
(3)try-catch语句块:
如果try语句块中所有语句正常执行完毕,没有异常发生,那么catch语句块中的代码将正常执行。
如果try语句块在执行过程中发生异常,并且这个异常与catch语句块中声明的异常类型匹配,那么try语句块中剩下的代码都将被忽略,而相应的catch语句块将会被执行。
如果try语句块在执行过程中发生异常,而抛出的异常在catch语句块中没有被声明,那么方法立即退出。
使用try-catch处理异常,如下代码块:
try {
int num1 = in.nextInt();
System.out.print("请输入除数:");
int num2 = in.nextInt();
System.out.println(num1+"/"+ num2 +"="+ num1/ num2);
} catch (Exception e) {
System.err.println("出现错误:被除数和除数必须是整数,除数不能为零。");
e.printStackTrace();
}
(4)try-catch-finally语句块:
如果try语句块中所有语句正常执行完步,finally语句块也会被执行。
如果try语句块在执行过程中发生异常,无论这种异常能否被catch语句块捕获到,都将执行finally语句块中的代码。
特别注意:即使在catch语句块中存在return语句,finally语句块中的语句也会执行。
finally语句块中语句不执行的唯一情况实在异常处理代码中执行了System.exit(1)退出Java虚拟机
使用try-catch-finally处理异常,如下代码块:
try {
int num1 = in.nextInt();
System.out.print("请输入除数:");
int num2 = in.nextInt();
System.out.println(num1+"/"+ num2 +"="+ num1/ num2);
} catch (Exception e) {
System.err.println("出现错误:被除数和除数必须是整数,除数不能为零。");
//System.exit(1); // finally语句块不执行的唯一情况
} finally {
System.out.println("感谢使用本程序!");
}
存在return语句,finally语句块中的语句也会执行,如下代码块:
try {
int num1 = in.nextInt();
System.out.print("请输入除数:");
int num2 = in.nextInt();
System.out.println(num1+"/"+ num2 +"="+ num1/ num2);
return; //finally语句块仍旧会执行
} catch (Exception e) {
System.err.println("出现错误:被除数和除数必须是整数,除数不能为零");
return; //finally语句块仍旧会执行
} finally {
System.out.println("感谢使用本程序!");
}
(5)通过throws声明异常,使用throw处理异常
a.throw用于程序员自行产生并抛出异常,throws用于声明该方法内抛出了异常
b.throw位于方法体内部,可以作为单独语句使用;throws必须跟在方法参数列表的后面,不能单独使用。
c.throw抛出一个异常对象,只能是一个;throws后面跟异常类,可以跟多个(在使用try-catch语句处理异常时,应该根据throws声明的异常个数来进行相应的处理,从而做到对异常具体准确的处理,当然,如果声明了一个Exception异常类,那么在处理异常时可以写具体的异常处理也可以直接用Exception类处理,因为Exception异常是所有异常的父类。)
使用throws声明异常,如下代码:
public static void divide() throws Exception {
Scanner in = new Scanner(System.in);
System.out.print("请输入被除数:");
int num1 = in.nextInt();
System.out.print("请输入除数:");
int num2 = in.nextInt();
System.out.println(num1+"/"+ num2 +"="+ num1/ num2);
}
使用throw抛出异常,如下代码:
public void setSex(String sex) throws Exception {
if ("男".equals(sex) || "女".equals(sex))
this.sex = sex;
else {
throw new Exception("性别必须是“男”或者“女”!");
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。