19异常的学习笔记

2023-09-20 22:44:29

异常

很重要,有利于我们平时处理问题
异常就是代表程序出现了问题
常见的异常比如说

  1. 数组越界
  2. 除法除0

异常的体系是什么

java.lang.Throwable
Error Exception
RuntimeException 其他异常

Error 代表的是系统级别的错误,也就是一旦系统出现问题,sun公司会把这些问题封装程Error对象出来
Error 是sun公司自己用的,不是给我们程序员用的,我们开发人员不用管
Exception:叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用 Exception 以及它的孩子来封装程序出现的问题。
运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)
编译时异常:编译阶段就会出现错误提醒的。(如:日期解析异常)
抓住异常,我们通过这个代码来进行抓住异常,如果 try 里面的代码是有异常的,那我们就进行捕捉,如果捕捉到,我们就可以得到这个异常信息,并输出这个异常的信息

        try {
            SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date d = date.parse("2020-11-5 11:50:90");
            System.out.println(d);
        } catch (ParseException e) {
            e.printStackTrace();
        }

自定义运行时异常

  1. 定义一个异常类继承RuntimeExceptin
  2. 重写构造器
  3. 通过throw new 异常类来创建异常对象并输出

编译阶段不报错,提醒不强烈,运行时才报错

public class exception {
    public static void main(String[] args) {
            saveAge(180);
    }
    public  static  void saveAge(int age){
        if(age>0&&age<150){
            System.out.println("年龄被成功保存"+age);
        }else {
            throw  new AgeIllegalRuntimeException("age is illegal ,your age is "+age);
        }
    }
}

我们这个新建的这个异常类我们是继承这个RuntimeException

public class AgeIllegalRuntimeException extends RuntimeException{
	//构造函数
    public AgeIllegalRuntimeException() {
    }
	//构造函数,其中这个message是输出的异常信息
    public AgeIllegalRuntimeException(String message) {
        super(message);
    }
}

抛出编译时异常

public class exception {
    public static void main(String[] args) {
            saveAge(12);
            //saveAge2(25);   //这里会直接报错,我们有两种解决办法,一种是继续往上抛
            try {
                saveAge2(160);
                System.out.println("程序正常执行");
            } catch (AgeIllegleException e) {
                System.out.println("程序异常");
                throw new RuntimeException(e);
            }

    }
    public  static  void saveAge(int age){
        if(age>0&&age<150){
            System.out.println("年龄被成功保存"+age);
        }else {
            throw  new AgeIllegalRuntimeException("age is illegal ,your age is "+age);
        }
    }
    //throws 是在这个方法中抛出异常,让该方法调用的时候出现
    //throw 跑出去一个异常对象。
    public  static  void saveAge2(int age) throws AgeIllegleException {
        if(age>0&&age<150){
            System.out.println("年龄被成功保存"+age);
        }else {
            throw  new AgeIllegleException("age is illegal ,your age is "+age);
        }
    }
}

分析上面的代码,我们可以看到这些异常的处理的时候我们发现我们可以不断的向外面抛出异常,但是一直抛出异常肯定是不可以的,因此我们需要对其进行捕获异常,利用try catch,进行记录异常,并记录处理信息

异常处理

1. 捕获异常,记录异常并相应合适的信息给用户
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 ExceptionNesting {
    public static void main(String[] args) {
        try {
            test1();
        } catch (FileNotFoundException e) {
            System.out.println("文件未找到");
            throw new RuntimeException(e);
        } catch (ParseException e) {
            System.out.println("日期格式 不正确");
            throw new RuntimeException(e);
        }
    }
    public static void test1() throws FileNotFoundException, ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf.parse("2020-10-20 12:12");
        System.out.println(date);
        test2();
    }
    public static void test2() throws FileNotFoundException {
        InputStream is = new FileInputStream("D:/meinv.png");
    }
}

2. 捕获异常并进行处理

import java.util.Scanner;

public class StrongExceptionCorrect {
    public static void main(String[] args) {
        while (true) {
            try {
                System.out.println(getMoney());
                break;
            } catch (Exception e) {
                System.out.println("你输入的价格不合适请重新输入(你输入的并不是一个double类型的变量,可能输入了字符串导致异常)");
            }
        }
    }
    public static double getMoney(){
        Scanner input = new Scanner(System.in);
        while (true){
            System.out.println("请您输入合适的价格");
            double money = input.nextInt();
            if(money>=0){
                return money;
            }else {
                System.out.println("你输入的价格是不合适的");
            }
        }
    }
}
更多推荐

uniapp录音功能和音频播放功能制作

录音功能在UniApp中,你可以使用uni.getRecorderManager()方法来创建一个录音管理器实例,从而实现录音功能。以下是一个示例,演示了如何在UniApp中使用uni.getRecorderManager()实现录音功能://在需要录音的页面或组件中exportdefault{data(){retur

Apache Hive概述,模拟实现Hive功能,Hive基础架构

1、ApacheHive概述1.1、分布式SQL计算对数据进行统计分析,SQL是目前最为方便的编程工具。大数据体系中充斥着非常多的统计分析场景所以,使用SQL去处理数据,在大数据中也是有极大的需求的。MapReduce支持程序开发(Java、Python等)但不支持SQL开发1.2、分布式SQL计算-HiveApach

探索Adobe Photoshop 2024:新功能与增强功能详解

AdobePhotoshop2024,这款传奇的图像编辑软件,近期又迎来了一些令人振奋的新特性。对于专业设计师和摄影爱好者来说,Photoshop的每次更新都牵动着他们的心。那么,这次的新版本究竟带来了哪些值得我们期待的功能呢?且听我一一解读。首先,Photoshop2024对其界面进行了一些改进。全新的工作区布局,使

Layui快速入门之第七节 表格

目录一:基本用法基本案例:二:静态表格三:模板配置渲染四:静态表格转换五:已知数据渲染六:自定义模板API渲染一:基本用法表格组件table是Layui中使用率极高的一个组件,它以表格的承载方式对数据进行渲染、重载、排序、统计、分页等等一系列交互操作,并提供了丰富的API用于扩展,基本涵盖了日常业务所涉及的大部分需求基

【pytorch】模型常用函数(conv2d、linear、loss、maxpooling等)

1、二维卷积函数——cnv2d():'''in_channels(int):输入通道数out_channels(int):输出通道数kernel_size(intortuple):卷积核大小stride(intortuple,optional):步长Default:1padding(int,tupleorstr,opt

驱动开发 作业 day9 9/20

基于platform实现head.h#ifndef__HEAD_H__#define__HEAD_H__//构建LED开关的功能码,不添加ioctl第三个参数#defineLED_ON_IO('l',1)#defineLED_OFF_IO('l',0)#endiftest.c#include<stdlib.h>#inc

docker 获取Nvidia 镜像 | cuda |cudnn

本文分享如何使用docker获取Nvidia镜像,包括cuda10、cuda11等不同版本,cudnn7、cudnn8等,快速搭建深度学习环境。1、来到dockerhub官网,查看有那些Nvidia镜像https://hub.docker.com/r/nvidia/cuda/tags?page=2&name=11.3这

Spring Cloud Eureka:服务注册与发现

💗wei_shuo的个人主页💫wei_shuo的学习社区🌐HelloWorld!SpringCloudEureka:服务注册与发现SpringCloudEureka是SpringCloud生态系统中的一个组件,它是用于实现服务注册与发现的服务治理组件。在微服务架构中,服务之间存在复杂的依赖关系,而SpringCl

安防监控/视频汇聚/云存储/AI智能视频分析平台EasyCVR下级海康设备无法级联是什么原因?

安防视频监控平台/视频集中存储/云存储/磁盘阵列EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。有用户反馈,在使用下级平台的海康设备级联到视频监控EasyCVR平台

游戏服务器搭建过程中Maven多模块编译遇到的一些问题

目录1、多模块的创建1.1父模块的创建1.2删除垃圾文件1.3修改pom.xml1.4创建子模块继承2、子模块之间的互相引用3、多个模块间版本的管理3.1dependencis3.2dependencyManagement4、依赖执行5、在SpringBoot项目中加载依赖项目的组件有几种常用的方法5.1.使用@Com

ip地址怎么改网速快

在当今高度依赖互联网的时代,快速稳定的网络连接对于人们的生活和工作至关重要。然而,有时我们可能会遇到网络速度缓慢的问题。虽然更改IP地址并不能直接影响网络速度,但它可以成为改善网络连接的一种策略之一。虎观代理小二二将探讨如何通过更改IP地址来尝试提升网络速度,并提供一些实用的方法与建议。请注意,网络速度受多个因素影响,

热文推荐