目录

异常的概念

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块,继续向下执行,同时报错。

java显示打印已完成却没打_代码块

可见程序捕捉到了异常,打印了异常,同时执行完了块外的程序。

同时,在一个异常处理中,可以使用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("违规操作:小数点后应该保留两位有效数字");
     }
     }
 }

 

java显示打印已完成却没打_代码块_02

使用throw自定义异常

除了系统提供的常见异常以外,我们还可以通过throw自定义异常,语法格式如下:

throw new 异常类型名 (异常信息)

创建自定义类型异常时需要继承exception类,例如:

class PriceException extends Exception{
public PriceException(String message){
super(message);
}
}