认识异常,自定义异常

1、什么是异常?

异常就是程序运行过程中出现的问题

2、异常的体系:

Error:

代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,sun公司就会把这些问题封装成Error对象给出来

Exception:

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

*运行时异常:

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

*编译时异常:

编译阶段就会出现错误提醒的。(如日期解析异常)

异常的处理方法:

①抛出异常(throws)

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

|---------------------------------|
| 方法 throws 异常1,异常2,异常3...{ ... } |

捕获异常(try...catch)

*直接捕获程序出现的异常

|-----------------------------------------------------------------------------|
| try{ //监视可能出现异常的代码; }catch(异常类型1 变量){ //处理异常 }catch(异常类型1 变量 ){ //处理异常 }... |

自定义异常:

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

自定义异常的种类

|---------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------|
| 自定义运行时异常 | 自定义编译时异常 |
| 1、定义一个异常类来继承RuntimeException 2、重写构造器 3、通过throw new 异常类(xxx)来创建异常对象并抛出 编译阶段不报错,提醒不强烈,编译阶段,运行时才可能出现 | 1、定义一个异常类继承自Exception 2、重写构造器 3、通过throw new 异常类(xxx)来创建异常对象并抛出 4、编译阶段就报错,提醒更强烈 |

复制代码
//目标:掌握自定义异常,以及异常的作用
public class YiChang {
    public static void main(String[] args) {
//保存一个合法的年龄
        try {
            saveAge(525);
            System.out.println("底层执行成功了");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("底层出现了bug");
        }
        try {
            saveAge1(25);
            System.out.println("底层执行成功了");
        } catch (ageilegalException e) {
            e.printStackTrace();
            System.out.println("底层出现了bug");
        }
    }
    public static void saveAge(int age){
        if (age>0&&age<150) {
            System.out.println("年龄合法");
        }else{
            //用一个异常对象来封装这个问题
            //throw抛出这个异常对象
        throw new ageilegalRuntimeException("/age is illeagal,your age is "+age);
        }
    }
    public static void saveAge1(int age)throws ageilegalException{
        if (age>0&&age<150) {
            System.out.println("年龄合法");
        }else{
            //用一个异常对象来封装这个问题
            //throw抛出这个异常对象
            //throws用在方法上,抛出方法内部的异常
            throw new ageilegalException("/age is illeagal,your age is "+age);
        }
    }
}

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

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

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

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

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

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

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

复制代码
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class YiChang1 {
    //目标:异常的处理
    /*
    public static void main(String[] args) {
        try {
            test();

        } catch (FileNotFoundException e) {//捕获异常
            System.out.println("你要找的异常信息是不存在的");
            e.printStackTrace();//打印异常信息,记录下来
        } catch (ParseException e) {
            System.out.println("你要解析的时间是不存在的");
            e.printStackTrace();
        }
    }
    public static void test() throws FileNotFoundException, ParseException {
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
        Date date=simpleDateFormat.parse("2024-05-02 9:05:48");
        System.out.println(date);
        test2();
    }
    public static void test2() throws FileNotFoundException {
        //读取文件的
        InputStream is=new FileInputStream("D:/woainizhongguo");


    }
     */
    public static void main(String[] args) {
        try {
            test();
        } catch (Exception e) {//捕获异常
            System.out.println("你当前操作有问题");
            e.printStackTrace();
        }
    }
    public static void test() throws Exception, Exception {
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
        Date date=simpleDateFormat.parse("2024-05-02 9:05:48");
        System.out.println(date);
        test2();
    }
    public static void test2() throws Exception {
        //读取文件的
        InputStream is=new FileInputStream("D:/woainizhongguo");


    }
}

import java.util.Scanner;

public class YiChang2 {
    public static void main(String[] args) {
        //需求:调用一个方法,让用户输入一个合适的价格
        while (true) {
            try {
                System.out.println(money());
                 break;
            } catch (Exception e) {
                System.out.println("请您输入合法的价格");
            }
        }

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

            }
        }
    }
}
相关推荐
一只大袋鼠19 分钟前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
LuminousCPP1 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
web3.08889991 小时前
1688 图搜接口(item_search_img / 拍立淘) 接入方法
开发语言·python
德思特1 小时前
从 Dify 配置页理解 RAG 的重要参数
java·人工智能·llm·dify·rag
YOU OU1 小时前
Spring IoC&DI
java·数据库·spring
один but you2 小时前
从可变参数到 emplace:现代 C++ 性能优化的核心组合
java·开发语言
是码龙不是码农2 小时前
ThreadPoolExecutor 7 个核心参数详解
java·线程池·threadpool
这是程序猿3 小时前
Spring Boot自动配置详解
java·大数据·前端
MY_TEUCK3 小时前
【Java 后端 | Nacos 注册中心】微服务治理原理、选型与注册发现实战
java·开发语言·微服务
测试员周周3 小时前
【Appium 系列】第13节-混合测试执行器 — API + UI 的协同执行
开发语言·人工智能·python·功能测试·ui·appium·pytest