目录
异常的概念
try...catch块:
finally代码块
使用throws关键字抛出异常
使用throw自定义异常
异常的概念
在程序执行到某一行时出现了错误,就会产生异常现象,如果没有事先做好异常处理,就会程序报错。
异常的捕捉处理
try...catch块:
将可能产生异常的代码块放入try中,将处理异常的对象e放在catch块中,如下实例解释:
package unit1;
public class Tomato {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
String message="西红柿:2.99一斤";
String[] str=message.split(":");
String price=str[2].substring(0, 4); //此处有数组越界错误
double price1=Double.parseDouble(price);
double weight=650;
System.out.println(message+"顾客购买了"+weight+"克西红柿,需要支付"+(float)(weight/500*price1)+"元");
}catch(Exception e) {
e.printStackTrace();
}
System.out.println("程序执行结束");
}}
如果没有进行异常处理,在运行的过程中,程序执行到出错的一行就不会向下继续执行,但进行出错处理后,捕捉到了异常,跳出try块,继续向下执行,同时报错。
可见程序捕捉到了异常,打印了异常,同时执行完了块外的程序。
同时,在一个异常处理中,可以使用catch捕捉不同的错误类型,但是要按照先子类后父类的顺序进行捕捉。
finally代码块
有了finally代码块,和前面的语句就可以组成一个完整的异常处理语句,通常情况下,无论程序中有无异常产生,finally中所有代码都会被执行。但在以下三种情况中,其不会被执行:
1.在finally块中产生了异常。
2.在前面的代码中使用了system.exit()退出程序。
3.程序所在的线程死亡。
使用throws关键字抛出异常
throws关键字用于定义方法时使用,表示方法可能抛出的异常,例:
package unit1;
import java.util.Scanner;
public class Potato {
public void Pay(String dayPrice,double weight) throws ArrayIndexOutOfBoundsException { //异常抛给后面处理
String message="土豆:"+dayPrice+"一斤";
String[] str=message.split(":");
String price=str[2].substring(0, 4); //数组越界
double price1=Double.parseDouble(price);
System.out.println(message+"顾客购买了"+weight+"克土豆,需要支付"+(float)(weight/500*price1)+"元");
}
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
System.out.println("土豆今日单价(单价格式:3.00):");
String dayPrice=sc.next();
if(dayPrice.length()==4) {
double weight=650;
try {
Potato potato=new Potato();
potato.Pay(dayPrice,weight);
}catch(ArrayIndexOutOfBoundsException aiobe) {
System.out.println("请注意:数组下标出现异常");
}
finally {
sc.close();
System.out.println("输入控制台已经关闭");
}
}
else {
System.out.println("违规操作:小数点后应该保留两位有效数字");
}
}
}
使用throw自定义异常
除了系统提供的常见异常以外,我们还可以通过throw自定义异常,语法格式如下:
throw new 异常类型名 (异常信息)
创建自定义类型异常时需要继承exception类,例如:
class PriceException extends Exception{
public PriceException(String message){
super(message);
}
}