Java异常

发布时间:2024年01月14日

异常

认识异常

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

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

  • 运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)
  • 编译时异常:编译阶段就会出现错误提醒的(如:日期解析异常)

抛出异常(throws)

  • 在方法上使用throws关键字,可以将方法内部出现的异常抛出去给调用者处理。

捕获异常(try…catch)?

  • ?直接捕获出现出现的异常。

自定义异常

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

自定义运行时异常

  • 定义一个异常类继承RuntimeException
  • 重新构造器
  • 通过throw new 异常类(xxx)来创建异常对象并抛出

? ? ? ? 编译阶段不报错,提醒不强烈,运行时才可能出现

Test类

public class Test {
    public static void main(String[] args) {
        try {
            saveAge(233);
            System.out.println("底层执行成功");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("底层出现了bug");
        }
    }

    public static void saveAge(int age){
        if (age > 0 && age <150){
            System.out.println("年龄被保存成功:" + age);
        }else {
            throw  new AgeIllegalRuntimeException("/age is illegal, you age is " + age);
        }
    }
}

?AgeIllegalRuntimeException类

public class AgeIllegalRuntimeException extends RuntimeException{
    public AgeIllegalRuntimeException() {
    }

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

?

自定义编译时异常

  • 定义一个异常类继承Exception
  • 重写构造器
  • 通过throw new 异常类(xxx)来创建异常对象并抛出

????????编译阶段就报错,提醒更加强烈

Test类

public class Test {
    public static void main(String[] args) {
        try {
            saveAge(23);
            System.out.println("底层执行成功");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("底层出现了bug");
        }
    }

    public static void saveAge(int age) throw AgeIllegalException{
        if (age > 0 && age <150){
            System.out.println("年龄被保存成功:" + age);
        }else {
            throw  new AgeIllegalException("/age is illegal, you age is " + age);
        }
    }
}

?AgeIllegalException类

public class AgeIllegalException extends Exception{
    public AgeIllegalException() {
    }

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

异常有什么作用

  1. 异常是用来查寻系统Bug的关键参考信息
  2. 异常可以作为方法内部的一种特殊返回值,以便通知上层调用者底层的执行情况

异常的处理

开发中对于异常的常见处理方式

???????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 Test {
    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 date = sdf.parse("2021-10-10 10:24");
        System.out.println(date);
        test2();
    }

    private static void test2() throws FileNotFoundException {
        // 读取文件的
        InputStream is = new FileInputStream("D:/abcd.png");
    }
}

优化上面的写法

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

public class Test {
    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 date = sdf.parse("2021-10-10 10:24");
        System.out.println(date);
        test2();
    }

    private static void test2() throws Exception {
        // 读取文件的
        InputStream is = new FileInputStream("D:/abcd.png");
    }
}
2.捕获异常,尝试重新修复
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        while (true) {
            try {
                System.out.println(getMoney());
                break;
            } catch (Exception e) {
                System.out.println("请您输入合法的数字");
            }
        }
    }

    public static double getMoney(){
        while (true) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请您输入合适的价格");
            double money = sc.nextDouble();
            if (money > 0){
                return money;
            }else {
                System.out.println("您输入的价格是不合适的");
            }
        }
    }
}
文章来源:https://blog.csdn.net/SU_mu147/article/details/135573037
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。