Java异常处理

视频链接:黑马Java异常处理

一,异常简介

误区:不是让我们以后不出现异常,而是程序出了异常之后,该如何处理 

 二,异常的结构

 

三,异常举例 

public class ExceptionDemo {
    public static void main(String[] args) {

        //编译时异常(在编译阶段需要手动处理,否则代码报错)
        String time="2023年9月23日";
        SimpleDateFormat simpleDateFormat= new SimpleDateFormat("yyyy年mm月dd日");
        Date date=simpleDateFormat.parse(time);
        System.out.println(date);

        //运行时异常(在编译阶段不需要处理,是代码运行时出现的异常)
        int[] arr={1,2,3,4,5};
        System.out.println(arr[10]);
    }
}

 

 

四,异常的作用

五,异常的处理

1,JVM默认的处理方式

  • 把异常的名称,异常的原因及异常出现的位置等信息输出在了控制台
  • 程序停止执行,下面的代码就不会再执行了

2,自己处理(捕获异常)

  • 格式:

  • 目的:当代码出现异常时,可以让程序继续往下执行
  • 举例: 

 

  • 注意:

1,如果try中没有遇到问题,怎么执行?

会把try里面的所有代码全部执行完毕,不会执行catch里面的代码

2,如果try中遇到多个问题,怎么执行?

会写多个catch与之对应,父类异常需要写在下面

3,如果try中遇到的问题没有被捕获,怎么执行?

相当于try......catch白写了,当前异常会交给虚拟机处理

4,如果try中遇到了问题,try下面的其他代码还会执行吗?

不会执行了,try中遇到问题,直接跳转到对应的catch,如果没有对应的catch与之匹配,则交给虚拟机处理

 

3,抛出处理

 

六,异常的常用方法

常用的是printStackTrace方法,功能包含了其他两种方法

七,自定义异常

当不知道抛出的异常是什么类型的时候,可以自定义异常类型

public class NameFormatException extends RuntimeException{
    //NameForm:当前异常的名字,表示命名格式化问题
    //Exception:表示当前类是一个异常类

    //运行时:RuntimeException 核心 就表示由于参数错误而导致的问题
    //编译时:Exception 核心 提醒程序员检查本地信息

    public NameFormatException(){
    }
    public NameFormatException(String message){
        super(message);
    }
}

 

八,综合练习

public class GirlFriend {
    private String name;
    private int age;

    public GirlFriend() {
    }

    public void setName(String name) {
        int len=name.length();
        if(len<3||len>10){
            throw new RuntimeException();
        }
        this.name = name;
    }

    public void setAge(int age) {
        if(age<18||age>40){
            throw new RuntimeException();
        }
        this.age = age;
    }

    @Override
    public String toString() {
        return "GirlFriend{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class ExceptionDemo {
    public static void main(String[] args) {
        //1,创建键盘输入的对象
        Scanner scanner=new Scanner(System.in);

        //2,创建女朋友对象
        GirlFriend gf=new GirlFriend();

        while (true) {
            try {
                //3,接收女朋友的姓名
                System.out.println("请输入女朋友名字:");
                String name=scanner.nextLine();
                gf.setName(name);

                //4,接收女朋友的年龄
                System.out.println("请输入女朋友年龄:");
                int age= Integer.parseInt(scanner.nextLine());
                gf.setAge(age);

                //如果所有的数据都是正确的,那么跳出循环
                break;
            } catch (NumberFormatException e) {
                System.out.println("年龄的格式有误!重新输入");
            }catch (RuntimeException e) {
                System.out.println("姓名的长度 或 年龄的范围有误!重新输入");
            }
        }

        //5,打印信息
        System.out.println(gf.toString());
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值