Javase 基础加强 —— 01 异常

本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员Java+AI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。

01 课程安排

  • day01 - 异常、泛型、集合框架

  • day02 - 集合框架、Stream流

  • day03 - File、字符集、IO流框架

  • day04 - 多线程

  • day05 - 网络编程

  • day06 - Java高级技术

02 授课方式

Javase基础加强是一个空工程Empty Project,每天的内容是一个独立的模块Module

03 什么是异常?

异常代表程序出现的问题。

在这里插入图片描述

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 ExceptionDemo1 {
    public static void main(String[] args) throws ParseException, FileNotFoundException {
        show();
        show2();
    }
    //认识编译异常
    public static void show2() throws ParseException, FileNotFoundException { //抛弃parse,file异常
        System.out.println("===show2()方法开始运行===");

        String str = "2025-04-09 16:28:30";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf.parse(str); //一个提醒,担心你的格式写错了
        System.out.println(date);

        InputStream is = new FileInputStream("D:/dog.png"); //一个提醒,担心你没有D盘或者没有小狗图片

        System.out.println("===show2()方法结束运行===");
    }


    //认识运行异常 exception
    public static void show(){
        System.out.println("===show()方法开始运行===");

        //1.数组索引越界异常
        int[] arr = {1, 2, 3};
        System.out.println(arr[3]);

        //2.数字操作异常
        System.out.println(10 / 0);

        //3.空指针异常
        String str = null;
        System.out.println(str);
        System.out.println(str.length());

        System.out.println("===show()方法结束运行===");
    }
}

04 异常的基本处理

在这里插入图片描述

05 异常的作用

  • 异常是用来定位程序bug相关的关键信息
  • 异常可以作为方法内部的一种特殊返回值,以便通知上层调用者方法的执行问题
public class ExceptionDemo2 {
    public static void main(String[] args) {
        try{
            System.out.println(div(10, 0));
            System.out.println("底层代码执行成功");
        }catch (Exception e){
            e.printStackTrace(); //打印异常
            System.out.println("底层代码执行失败");
        }
    }

    public static int div(int a, int b) throws Exception { //抛
        if(b == 0){
            System.out.println("请重新输入正确被除数!");
            throw new Exception("请重新输入正确被除数!"); //返回Exception类型
        }
        int result = a / b;
        return result;
    }
}

06 自定义异常

由于Java无法为这个世界上全部的问题都提供异常类来代表,如果企业自己的某种问题,想通过异常来表示,以便用异常来管理该问题,那就需要自己来定义异常类了。

在这里插入图片描述

① 自定义编译时异常

HeimaUnlegalException.java

package exception;
/**
 * 1.继承Exception
 * 2.重写Exception构造器
 */

public class HeimaUnlegalException extends Exception{
    //无参构造器
    public HeimaUnlegalException(){}

    //有参构造器
    public HeimaUnlegalException(String str){
        super(str);
    }
}

ExceptionDemo3.java

package exception;

public class ExceptionDemo3 {
    public static void main(String[] args) {
        try{
            saveAge(300);
        }catch(HeimaUnlegalException e){ //3.捕获
            e.printStackTrace(); //4.打印
        }
    }

    public static void saveAge(int age) throws HeimaUnlegalException { //2.抛弃
        if(age < 1 || age > 200){
            //1.返回HeimaUnlegalException类型对象
            throw new HeimaUnlegalException("年龄不合法");
        }else{
            System.out.println("年龄合法");
            System.out.println("保存年龄" + age);
        }
    }
}

② 自定义运行时异常

将继承对象从Exception改为RuntimeException即可。

07 异常的处理方案

方案一:底层异常层层往上抛出,最外层捕获异常,记录下异常信息,并响应适合用户观看的信息进行提示。

方案二:最外层捕获异常后,尝试重新修复。

package exception;

import java.util.Scanner;

public class ExceptionDemo4 {
    public static void main(String[] args) {
        while(true){
            try {
                double price = savePrice();
                System.out.println("保存定价" + price);
                break; //直到用户输入正确的定价,程序退出
            } catch (Exception e) {
                System.out.println("请输入正确的价格!!!");
            }
        }
    }

    public static double savePrice(){
        System.out.println("请输入商品定价:");
        Scanner sc = new Scanner(System.in);
        return sc.nextDouble();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值