异常---

news2024/11/15 8:12:20

目录

认识异常

自定义异常


认识异常

1.异常是什么?
2.异常的代表是谁?分为几类?
Error :代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题, s u n 公司会把这些问题封装成 Error 对象给出来,说白了, Error 是给 s u n 公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它。
 Exception :叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用 Exception 以及它的孩子来封装程序出现的问题。
.运行时异常: RuntimeException 及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)

.编译时异常:编译阶段就会出现错误提醒的。(如:日期解析异常)
3.异常代码层面的处理有几种方式?

package com.xinbao.d3_exception;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Exception {
    public static void main(String[] args) throws ParseException {
//        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date d = sdf.parse("2028-11-11 10:24");
            System.out.println(d);
//        } catch (ParseException e) {
//            e.printStackTrace();
//        }
    }
}

E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=61424:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\api-app3-3 com.xinbao.d3_exception.Exception
Exception in thread "main" java.text.ParseException: Unparseable date: "2028-11-11 10:24"
	at java.base/java.text.DateFormat.parse(DateFormat.java:399)
	at com.xinbao.d3_exception.Exception.main(Exception.java:11)

进程已结束,退出代码为 1
自定义异常

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

异常有什么作用?
1、异常是用来查寻系统 Bug 的关键参考信息!

2、异常可以作为方法内部的一种特殊返回值,以便诵知上层调用者底层的执行情况!

package com.xinbao.d3_exception;
//年龄非法运行时异常
public class AgeIllegalRuntimeException extends RuntimeException{
    //必须让这个类继承自RuntimeException,才能成为异常类

    //重写构造器
    public AgeIllegalRuntimeException() {
    }

    public AgeIllegalRuntimeException(String message) {
        super(message);
    }
}
package com.xinbao.d3_exception;

public class ExceptionTest2 {
    public static void main(String[] args) {
        //需求:保存一个合法年龄
        try {
            saveAge(88);
            saveAge(188);
            System.out.println("底层执行成功!");
        } catch (java.lang.Exception e) {
            e.printStackTrace();
            System.out.println("底层出现bug");
        }
    }

    public static void saveAge(int age){
        if (age>0 && age<150){
            System.out.println("年龄保存成功" + age);
        }else {
            //用一个异常对象封装这个问题
            //throw 抛出这个异常对象
            throw new AgeIllegalRuntimeException("/age is illegal, yoyr age is " + age);
        }
    }
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=61657:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\api-app3-3 com.xinbao.d3_exception.ExceptionTest2
年龄保存成功88
底层出现bug
com.xinbao.d3_exception.AgeIllegalRuntimeException: /age is illegal, yoyr age is 188
	at com.xinbao.d3_exception.ExceptionTest2.saveAge(ExceptionTest2.java:22)
	at com.xinbao.d3_exception.ExceptionTest2.main(ExceptionTest2.java:8)

进程已结束,退出代码为 0

编译时异常

package com.xinbao.d3_exception;

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

    public AgeIllegalException(String message) {
        super(message);
    }
}
package com.xinbao.d3_exception;

public class ExceptionTest2 {
    public static void main(String[] args) {
        //需求:保存一个合法年龄
        try {
//            saveAge(88);
//            saveAge(188);
            saveAge2(355);
            System.out.println("底层执行成功!");
        } catch (java.lang.Exception e) {
            e.printStackTrace();
            System.out.println("底层出现bug");
        }
    }

    public static void saveAge(int age){
        if (age>0 && age<150){
            System.out.println("年龄保存成功" + age);
        }else {
            //用一个异常对象封装这个问题
            //throw 抛出这个异常对象
            throw new AgeIllegalRuntimeException("/age is illegal, yoyr age is " + age);
        }
    }

    public static void saveAge2(int age) throws AgeIllegalException{
        if (age>0 && age<150){
            System.out.println("年龄保存成功" + age);
        }else {
            //用一个异常对象封装这个问题
            //throw 抛出这个异常对象
            //throws 用在方法上 抛出方法内部的异常
            throw new AgeIllegalException("/age is illegal, yoyr age is " + age);
        }
    }
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=61734:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\api-app3-3 com.xinbao.d3_exception.ExceptionTest2
com.xinbao.d3_exception.AgeIllegalException: /age is illegal, yoyr age is 355
	at com.xinbao.d3_exception.ExceptionTest2.saveAge2(ExceptionTest2.java:34)
	at com.xinbao.d3_exception.ExceptionTest2.main(ExceptionTest2.java:9)
底层出现bug

进程已结束,退出代码为 0
异常的常见处理方法

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

package com.xinbao.d3_exception;

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 Exceptiontest3 {
    public static void main(String[] args) {
//        try {
//            test1();
//        } catch (ParseException e) {
//
//            e.printStackTrace();//打印出这个异常对象的信息,记录下来
//            System.out.println("日期异常");
//        } catch (FileNotFoundException e) {
//            System.out.println("文件读取异常");
//            e.printStackTrace();
//        }

        try {
            test1();
        } catch (Exception e) {
            System.out.println("您当前操作有问题~");
            e.printStackTrace();
        }
    }

    //public static void test1() throws ParseException, FileNotFoundException {
    public static void test1() throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        Date d = sdf.parse("2023-10-27 21:59");//如果有异常,直接抛出异常,不会再往下执行
        System.out.println(d);
        test2();
    }

    //public static void test2() throws FileNotFoundException {
    public static void test2() throws Exception {
        //读取文件
        InputStream is = new FileInputStream("E:\\社会实践\\社会实践报告(1).docx");
    }
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=35733:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\api-app3-3 com.xinbao.d3_exception.Exceptiontest3
Fri Oct 27 21:59:00 CST 2023

进程已结束,退出代码为 0

捕获异常,尝试重新修复

package com.xinbao.d3_exception;

import java.util.Scanner;

public class ExceptionTest4 {
    public static void main(String[] args) {
        //需求:调用一个方法,让用户输入一个合适的价格返回为止
        //重新修复
        while (true) {
            try {
                getMoney();
                break;
            } catch (Exception e) {
                //e.printStackTrace();
            }
        }
    }

    public static double getMoney(){
        Scanner sc = new Scanner(System.in);
        System.out.println("put in money:");
        while (true) {
            double money = sc.nextDouble();
            if (money >= 0){
                return money;
            }else {
                System.out.println("input again:");
            }
        }
    }
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=35800:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\api-app3-3 com.xinbao.d3_exception.ExceptionTest4
put in money:
-89
input again:
joaj
put in money:
vnmio
put in money:
24123

进程已结束,退出代码为 0

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1141529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RDMA概览

RDMA(Remote Direct Memory Access&#xff0c;远程直接内存访问)&#xff0c;指能够访问(读写)远程机器的内存。有多种支持RDMA的网络协议&#xff0c;包括&#xff1a;Infiniband、RoCE和iWAPP。具体的API定义包含在内核文件linux/include/rdma/ib_verbs.h reference: 【精选…

02【Git分支的使用、Git回退、还原】

上一篇&#xff1a;01【Git的基本命令、底层命令、命令原理】 下一篇&#xff1a;03【Git的协同开发、TortoiseGit、IDEA的操作Git】 文章目录 02【Git分支的使用、Git回退、还原】一、分支1.1 分支概述1.1.1 Git分支简介1.1.2 Git分支原理 1.2 创建分支1.2.1 创建普通分支1.…

如何理解my_map.yaml中origin的含义

当然可以。首先,我们先了解一下2D地图的基本构成。2D地图实际上是一个网格系统,其中每个单元格(或像素)代表现实世界中的一个区域。当我们谈论origin时,我们实际上是在描述这个网格如何在真实的3D空间中放置。 让我们通过一个简单的示意图来解释: 假设上面的矩形表示一个…

分组卷积的思想神了

大家好啊&#xff0c;我是董董灿。 最近&#xff0c;分组卷积帮我解决了一个大忙&#xff0c;事情是这样的。 这几天遇到一个头疼的问题&#xff0c;就是要在某一芯片上完成一个神经网络的适配&#xff0c;这个神经网络中卷积居多&#xff0c;并且有一些卷积的通道数很大&…

Go 命令大全:全面解析与实践

一、Go命令全列表 在这部分&#xff0c;我们将通过一个表格来快速浏览Go语言的所有内建命令及其基本功能。这些命令涵盖了从代码构建、测试&#xff0c;到依赖管理和其他工具等方面。 命令功能描述go build编译Go源文件go run编译并运行Go程序go get下载并安装依赖或项目go m…

AD9371 官方例程HDL详解之JESD204B RX侧时钟生成

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

是谁在造谣杭州取消直播带货?

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 这个世道&#xff0c;谣言的传播成本很低&#xff1a;比如“杭州禁止直播带货”这件事。 就在今天若水跟我说&#xff1a;“杭州禁止直播是谣言了&#xff0c;辟谣了”让我也赶紧隐藏或删除内容&…

LVS集群-NAT模式

集群的概念&#xff1a; 集群&#xff1a;nginx四层和七层动静分离 集群标准意义上的概念&#xff1a;为解决特定问题将多个计算机组合起来形成一个单系统 集群的目的就是为了解决系统的性能瓶颈。 垂直扩展&#xff1a;向上扩展&#xff0c;增加单个机器的性能&#xff0c;…

YOLOv7优化:感受野注意力卷积运算(RFAConv),效果秒杀CBAM和CA等 | 即插即用系列

💡💡💡本文改进:感受野注意力卷积运算(RFAConv),解决卷积块注意力模块(CBAM)和协调注意力模块(CA)只关注空间特征,不能完全解决卷积核参数共享的问题 提供多种卷积变体供使用:CBAMConv,CAMConv,CAConv,RFAConv,RFCAConv RFAConv | 亲测在多个数据集能够实现…

时间、空间复杂度的例题详解

文章前言 上篇文章带大家认识了数据结构和算法的含义&#xff0c;以及理解了时间、空间复杂度&#xff0c;那么接下来来深入理解一下时间、空间复杂度。 时间复杂度实例 实例1 // 计算Func2的时间复杂度&#xff1f; void Func2(int N) {int count 0;for (int k 0; k <…

yarn install 这个命令安装如何加速

yarn install 命令用来安装项目依赖&#xff0c;其速度受多种因素影响&#xff0c;如网络速度、npm/yarn包的源服务器、以及本地缓存等。以下是一些可能帮助你加速 yarn install 的方法&#xff1a; 1. 使用国内镜像 如果你在中国&#xff0c;可以使用淘宝的 npm 镜像&#x…

【正点原子STM32连载】 第四十四章 触摸屏实验 摘自【正点原子】APM32F407最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html## 第四…

ubuntu 22.04安装百度网盘

百度网盘 客户端下载 (baidu.com) 下载地址 sudo dpkg -i baidunetdisk_4.17.7_amd64.deb

Go RESTful API 接口开发

文章目录 什么是 RESTful APIGo 流行 Web 框架-GinGo HelloWorldGin 路由和控制器Gin 处理请求参数生成 HTTP 请求响应Gin 的学习内容实战用 Gin 框架开发 RESTful APIOAuth 2.0接口了解用 Go 开发 OAuth2.0 接口示例 编程有一个准则——Don‘t Repeat Yourself&#xff08;不要…

强化学习------PPO算法

目录 简介一、PPO原理1、由On-policy 转化为Off-policy2、Importance Sampling&#xff08;重要性采样&#xff09;3、off-policy下的梯度公式推导 二、PPO算法两种形式1、PPO-Penalty2、PPO-Clip 三、PPO算法实战四、参考 简介 PPO 算法之所以被提出&#xff0c;根本原因在于…

简述一下伪共享的概念以及如何避免

缓存行 计算机工程师为了提高 CPU 的利用率&#xff0c;平衡 CPU 和内存之间的速度差异&#xff0c;在CPU 里面设计了三级缓存。 CPU 在向内存发起 IO 操作的时候&#xff0c;一次性会读取 64 个字节的数据作为一个缓存行&#xff0c;缓存到 CPU 的高速缓存里面。 在 Java 中一…

Codeforces Round 905 (Div. 3)ABCDEF

Codeforces Round 905 (Div. 3) 目录 A. Morning题意思路核心代码 B. Chemistry题意思路核心代码 C. Raspberries题意思路核心代码 D. In Love题意思路核心代码 E. Look Back题意思路核心代码 A. Morning 题意 从一开始&#xff0c;每一次操作可以选择当前的数字打印或者是移…

【代码随想录】算法训练计划03

1、203. 移除链表元素 题目&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 思路&#xf…

【Unity实战】手戳一个自定义角色换装系统——2d3d通用

文章目录 每篇一句前言素材开始切换头型添加更改颜色随机控制头型和颜色新增眼睛同样的方法配置人物的其他部位设置相同颜色部位全部部位随机绘制UI并添加点击事件通过代码控制点击事件添加颜色修改的事件其他部位效果UI切换添加随机按钮保存角色变更数据跳转场景显示角色数据 …

Linux之J2EE的项目部署及发布

目录 前言 一、会议OA单体项目windows系统部署 1.检验工作 1. 检验jar项目包是否可以运行 2. 验证数据库脚本是否有误 3. 测试项目功能 2. 部署工作 2.1 传输文件 2.2 解压项目及将项目配置到服务器中 2.3 配置数据库 2.4 在服务器bin文件下点击startup.bat启动项目 …