认识异常,自定义异常

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("您输入的价格是不合适的");

            }
        }
    }
}
相关推荐
南山十一少2 小时前
Spring Security+JWT+Redis实现项目级前后端分离认证授权
java·spring·bootstrap
软件黑马王子3 小时前
C#初级教程(4)——流程控制:从基础到实践
开发语言·c#
闲猫3 小时前
go orm GORM
开发语言·后端·golang
427724003 小时前
IDEA使用git不提示账号密码登录,而是输入token问题解决
java·git·intellij-idea
chengooooooo4 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
李长渊哦4 小时前
常用的 JVM 参数:配置与优化指南
java·jvm
计算机小白一个4 小时前
蓝桥杯 Java B 组之设计 LRU 缓存
java·算法·蓝桥杯
李白同学5 小时前
【C语言】结构体内存对齐问题
c语言·开发语言
黑子哥呢?6 小时前
安装Bash completion解决tab不能补全问题
开发语言·bash
青龙小码农6 小时前
yum报错:bash: /usr/bin/yum: /usr/bin/python: 坏的解释器:没有那个文件或目录
开发语言·python·bash·liunx