异常以及处理异常

 认识异常

异常:就是代表程序出现的问题

方法一旦出现问题,方法的内部就会把这个问题的信息封装成一个所谓的异常对象,然后把这个异常对象从main方法中抛出去,抛给JVM虚拟机,JVM收到这个异常之后,会把程序先停下来,再把这个异常对象打印出来给你看,打印出的异常对象里面就会包含该问题的许多信息。比如:这个问题是因为数字转换异常导致的,原因是因为输入的内容是字符串"abc"导致的,而且还会在第八行出现的问题。

 

自定义异常 

异常的处理 

一般会把底层的异常往外抛,在最外层集中捕获异常,捕获异常之后会把异常信息记录起来,并响应合适的信息给用户进行浏览和观看。

1.捕获异常,记录异常并响应合适的信息给用户。

举例:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ExceptionTest3 {
    public static void main(String[] args) {
        try {
            test1();//抛到这个调用者来,应该捕获处理了,不能再抛了,虽然也是可以的但这样并不符合开发的规范
        } catch (FileNotFoundException e) {
            System.out.println("您要找的文件不存在");
            e.printStackTrace();//拦截到这个异常之后,打印出这个异常对象的信息,记录下来。
        } catch (ParseException e) {
            System.out.println("您要解析的时间有问题");
            e.printStackTrace();
        }
    }

    public static void test1() throws FileNotFoundException, ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = sdf.parse("2023-3-10 09:10");
        System.out.println(d);

        test2();//底层异常都往外抛,这里还要往外抛
    }

    private static void test2() throws FileNotFoundException {//从test2开始把异常往外抛
        //读取文件的
        InputStream is = new FileInputStream("D:/yifan.png");
    }
}

对上述代码进行优化:因为全部用Exception就能抛出一切异常以及拦截一切异常。



import java.io.FileInputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ExceptionTest3 {
    public static void main(String[] args) {
        try {
            test1();//抛到这个调用者来,应该捕获处理了,不能再抛了,虽然也是可以的但这样并不符合开发的规范
        } catch (Exception e) {
            System.out.println("您当前操作有问题");
            e.printStackTrace();//拦截到这个异常之后,打印出这个异常对象的信息,记录下来。
        } 
    }

    public static void test1() throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = sdf.parse("2023-3-10 09:10");
        System.out.println(d);

        test2();//底层异常都往外抛,这里还要往外抛
    }

    private static void test2() throws Exception {//从test2开始把异常往外抛
        //读取文件的
        InputStream is = new FileInputStream("D:/yifan.png");
    }
}

2.捕获异常,尝试重新修复。 

案例:



import java.util.Scanner;

/**
 *目标:掌握异常的处理方式:捕获异常,尝试修复。
 */


public class ExceptionTest4 {
    public static void main(String[] args) {
        //需求:调用一个方法,让用户输入一个合适的价格返回为止。
        //while循环的作用就是尝试修复,再次调用方法直到成功为止就跳出循环
        while (true) {
            try {
                System.out.println(getMoney());
                break;
            } catch (Exception e) {
               //e.printStackTrace();
                System.out.println("请您输入合法的数字:");
            }
        }
    }

    public static double getMoney(){
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请您输入合适的价格:");
            double money = sc.nextDouble();
            if (money >= 0){
                return money;
            }else {
                System.out.println("您输入的价格是不合适的,请重新输入:");
            }
        }
    }
}

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值