认识异常,自定义异常

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

            }
        }
    }
}
相关推荐
wuxiguala5 分钟前
【java图形化界面编程】
java·开发语言·python
东方雴翾8 分钟前
CSS语言的游戏AI
开发语言·后端·golang
鲤鱼不懂24 分钟前
python 浅拷贝copy与深拷贝deepcopy 理解
开发语言·python
创码小奇客30 分钟前
Spring Boot 中分布式事务的奇幻漂流
java·spring boot·trae
我是大头鸟38 分钟前
ecplise 工具 没有Java EE Tools 选项
java·java-ee
猫猫头有亿点炸41 分钟前
C语言之九九乘法表
c语言·开发语言
问道飞鱼1 小时前
【Vue3知识】组件间通信的方式
开发语言·javascript·ecmascript·组件·通信
树下水月1 小时前
关于使用python 安装 flask-openapi3扩展,使用docker 环境的完整复盘
开发语言·python·flask
时雨h1 小时前
《Spring Boot+策略模式:企业级度假订单Excel导入系统的架构演进与技术实现》
开发语言·bash
IDRSolutions_CN1 小时前
开发PDF时,如何比较 PDF 文件
java·经验分享·pdf·软件工程·团队开发