异常相关知识点

异常:

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

 
 

异常分类:

异常分类:ErrorException

Error:代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,sun公司会把这些问题封装成Error对象给出来, 说白了,Error是给sun公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它。

Exception:叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用Exception以及它的孩子来封装程序出现的问题。

 

 

Exception:

Exception:

​ 1.**运行时异常:**RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)

​ 2.编译时异常:编译阶段就会出现错误提醒的(不管代码对错,都会提醒)。(如:日期解析异常)

 

 

异常的处理方式:

throws处理异常:

throws的作用:抛出异常,如果有异常会抛给调用者( 甩锅)。

main方法throws异常给JVM虚拟机,JVM默认执行:打印异常信息,停止程序。

格式:
修饰符 返回值类型 方法名(参数) throws 异常类名1, 异常类名2 { 
} 
public static void test01() throws ParseException {
    // 可能出现异常的代码
}

package com.ouyang.demo02;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class demo01 {
    public static void main(String[] args) throws ParseException {
        test();
    }
    
    public static void test() throws ParseException {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse("2024-07-27");
        System.out.println("date = " + date);
    }
}

 

 

try…catch处理异常:

try…catch的作用:捕获异常,处理这个异常(程序正常执行,继续执行)。

 

格式:
try {
   可能出现异常的代码;
} catch(异常类名 变量名) {
   异常的处理代码;
} catch(异常类名 变量名) {
   异常的处理代码;
}
try {
    // 可能出现异常的代码
} catch (ParseException e) {
    // 处理异常的代码
}
package com.ouyang.demo02;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class demo01 {
    /*
        出现了日期解析异常,我们处理了这个异常!
        啦啦啦啦啦!
   */
    public static void main(String[] args)  {
        try {
            test();
        } catch (ParseException e) {
            System.out.println("出现了日期解析异常,我们处理了这个异常!");
        }

        System.out.println("啦啦啦啦啦!");

    }

    public static void test() throws ParseException {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse("2024年07-27");
        System.out.println("date = " + date);
    }
}

 

finally代码块作用:

​ 有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的。

​ 在finally代码块中的代码一定会被执行。

​ catch可以不写。

try {
   可能出现异常的代码;
} catch(异常类名 变量名) {
   异常的处理代码;
} finally {
   代码;
}

 
 

重写方法异常处理:

父类方法抛出异常,子类重写该方法,抛出异常要比父类少或者相同。

 
 

 

自定义异常:

自定义异常的步骤:

自定义异常的步骤

​ ①定义类继承Exception/ RuntimeException

​ ②编写构造器

​ ③在需要的地方创建异常

package com.ouyang.demo02;

//1.定义类维承Exception/RuntimeException
public class U18Exception extends RuntimeException{
    //2.编写两个构造器调用父类的构造器

    public U18Exception() {
    }

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

package com.ouyang.demo02;

import java.util.Scanner;

public class demo02 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String name = sc.next();
        int age = sc.nextInt();

        try {
            register(name,age);
        } catch (U18Exception e) {
            System.out.println("您的年龄未满18岁,不能注册!");
        }

    }

    public static void register(String name,int age) throws U18Exception {
        if(age<18){
            //如果年龄小于18不能注册
            // 制造异常/创建异常
            throw new U18Exception();
        }else {
            System.out.println("注册成功!");
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值