认识异常,自定义异常

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

            }
        }
    }
}
相关推荐
九圣残炎7 分钟前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
wclass-zhengge9 分钟前
Netty篇(入门编程)
java·linux·服务器
童先生11 分钟前
Go 项目中实现类似 Java Shiro 的权限控制中间件?
开发语言·go
lulu_gh_yu12 分钟前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
Re.不晚36 分钟前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
老秦包你会38 分钟前
Qt第三课 ----------容器类控件
开发语言·qt
凤枭香41 分钟前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
雷神乐乐42 分钟前
Maven学习——创建Maven的Java和Web工程,并运行在Tomcat上
java·maven
ULTRA??1 小时前
C加加中的结构化绑定(解包,折叠展开)
开发语言·c++
码农派大星。1 小时前
Spring Boot 配置文件
java·spring boot·后端