JavaSE——异常(2/2)-异常的处理(记录异常并提示 、尝试重新修复)

news2024/11/29 10:53:51

目录

记录异常并提示 

案例演示

流程解析 

写法优化

尝试重新修复


开发中对于异常的常见处理方式

  • 一层一层往上抛出异常,并且在最上层捕获异常,分为两种不同的处理方式。

 例如,B站网页报错就是采取的第一种方式:

记录异常并提示 

案例演示

先来看第一种处理方式,以时间解析报错和读取不存在文件为例子。

如上方案例,我们来进行处理:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test3 {
    //写一个方法是时间解析错误的,且去调用另外一个方法two()
    public static void one() throws ParseException, FileNotFoundException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = sdf.parse("2028-11-11 10:24");
        System.out.println(d);
        two();
    }

    //two方法也报了异常
    public static void two() throws FileNotFoundException {
        //读取文件,暂时只需要知道他读取了不存在的文件而报错,其他先不了解
        InputStream is = new FileInputStream("D:/wuyu/ok.png");
    }

    public static void main(String[] args) {
        try {
            one();
        } catch (ParseException e) {
            System.out.println("您要解析的时间有问题了!");
            e.printStackTrace();        //打印出这个异常对象的信息,记录下来
        } catch (FileNotFoundException e) {
            System.out.println("您要找的文件不存在!");
            e.printStackTrace();        //打印出这个异常对象的信息,记录下来
        }
    }
}

运行结果:

如果时间格式无误,就会捕获到two方法的异常了

再次运行:

流程解析 

对于文件读取错误的异常,流程也是类似的

写法优化

它们都是Exception的子类,所以可以直接抛出Exception

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test3 {
    public static void main(String[] args) {
        try {
            one();
        } catch (Exception e) {
            System.out.println("您当前操作有问题!");
            e.printStackTrace();        //打印出这个异常对象的信息,记录下来
        }
    }

    //写一个方法是时间解析错误的,且去调用另外一个方法two()
    public static void one() throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = sdf.parse("2028-11-11 12:10:24");
        System.out.println(d);
        two();
    }

    //two方法也报了异常
    public static void two() throws Exception {
        //读取文件,暂时只需要知道他读取了不存在的文件而报错,其他先不了解
        InputStream is = new FileInputStream("D:/wuyu/ok.png");
    }
}

运行之后也能达到同样的效果:

尝试重新修复

第二种方法,我们以完成一个需求演示

需求:调用一个方法,让用户输入一个合适的价格返回为止。

import java.util.Scanner;

public class Test4 {
    //需求:调用一个方法,让用户输入一个合适的价格返回为止。
    public static double getMoney(){
        Scanner sc = new Scanner(System.in);
        double money = 0;
        while(true){
            System.out.println("请您输入合适的价格: ");
            money = sc.nextDouble();
            if(money >= 0){
                return money;
            }else{
                System.out.println("您输入的价格是不合适的");
            }
        }
    }
    public static void main(String[] args) {
        //对于上述的方法,如果输入的是非double类型的数据,就会产生异常

        //我们对异常尝试修复
        while(true){
            try {
                System.out.println(getMoney());
                break;
            } catch (Exception e) {
                System.out.println("请您输入合法的数字!");
            }
        }

    }
}

看运行结果:


 抛出异常(throws)

  • 在方法上使用throws关键字,可以将方法内部出现的异常抛出去给调用者处理。

//推荐方式

方法 throws Exception{

}

//Exception代表可以捕获一切异常

捕获异常(try...catch)

  • 直接捕获程序出现的异常。

//推荐方式

try{

        //可能出现异常的代码

}catch(Exception e){

        e.printStackTrace();        //直接打印异常对象的信息

}

//Exception代表可以捕获一切异常


END 


学习自:黑马程序员——JavaSE课程

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

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

相关文章

擎天科技与禅道合作,打造统一的项目管理平台

统一、全面的项目管理平台能够帮助企业优化管理流程,提升业务效率。擎天集团选择与禅道软件合作,打造统一的项目管理平台,在降低自研软件的研发成本、打破团队信息孤岛、保障数据全面性等方面效果显著,大大提高了团队沟通协作效率…

NL6621 WIFI模块烧录及其他

某宝淘得NL6621: 测了一下引脚: 做了以下功课: 新岸线物联网NL6621解决方案是高性价比、完全开源、高成熟度的解决方案,特别为高数据吞吐率低成本的无线局域网产品而设计。它集成了MCU, MAC,1T1R基带和带功放RF收发机于…

【JavaEE网络】HTTP响应详解:状态码、报头与正文的全面解析

目录 HTTP响应(Response)认识 "状态码" (status code)认识响应 “报头”(header)认识响应 “正文”(body) HTTP响应(Response) 响应: 首行响应头空行正文 认…

互动科技如何强化法治教育基地体验?

近年来,多媒体互动技术正日益融入我们生活的各个角落,法治教育领域亦不例外。步入法治教育基地,我们不难发现,众多创新的多媒体互动装置如雨后春笋般涌现,这些装置凭借前沿的科技手段,不仅极大地丰富了法制…

Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件

目录 1. 前言 2. 部署Node服务 2.1. 前置环境安装 2.2. 将Node服务加入集群 3. 部署JNI网络插件 4. 测试集群 5. 总结 1. 前言 我们在上一篇文章完成了Matster结点的部署,这次我们接着来部署Node服务,注意,我Node服务是部署在另外两台…

java 文件表创建及前后端使用

表结构task_file 前端具体到业务表单 <el-form-item label"任务附件" prop"taskAttachment"><el-upload ref"upload" accept".jpg, .png, .txt, .xlsx, .doc, .docx, .xls, .pdf, .zip, .rar":action"upload.url" …

(三)小程序样式和组件

视频链接&#xff1a;尚硅谷2024最新版微信小程序 文章目录 小程序的样式和组件介绍样式-尺寸单位 rpx样式-全局样式和局部样式组件-组件案例演示组件案例-轮播图区域绘制组件案例-轮播图图片添加组件案例-绘制公司信息区域组件案例-商品导航区域组件案例-跳转到商品列表组件案…

Java实现 selenium Web自动化测试(简单篇)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

LifeCycle之ProcessLifeCycleOwner

问题&#xff1a;想要知道应用程序当前处在前台、后台、或从后台回到前台&#xff0c;想要知道应用的状态&#xff0c; LifeCycle提供了ProcessLifeCycleOwner的类&#xff0c;方便我们知道整个应用程序的生命周期情况 ProcessLifeCycleOwner 使用方法 1.首先添加依赖 imple…

Flutter 首次亮相 Google Cloud Next 大会

作者 / Kelvin Boateng Flutter 团队在近期首次参加了 Google Cloud Next 大会&#xff0c;这意味着 Flutter 在开发社区中的影响力正在日益增长。 Google Cloud Next https://cloud.withgoogle.com/next 我们与 Google Cloud、Firebase、Very Good Ventures 和 Serverpod 的团…

深化产教融合,泰迪智能科技助力西南林业大学提质培优

2024年5月7日&#xff0c;泰迪智能科技昆明分公司院校部总监查良红和数据部负责人余雄亮赴西南林业大学理学院就工作室共建事宜进行交流会谈。西南林业大学理学院院长张雁、党委副书记魏轶、副院长谢爽、就业负责人罗丽及学生代表参与本次交流会。 会议伊始&#xff0c;谢副院长…

C++语法|进程虚拟地址空间和函数调用栈

本文来自施磊老师的课程&#xff0c;老师讲的非常不错&#xff0c;我的笔记也是囫囵吞枣全部记下&#xff0c;但是我在这里推荐一本书&#xff0c;真的真的建议初学C或者想要进阶C的同学们看看&#xff1a;《CPU眼里的C/C》 文章目录 进程的虚拟地址空间和布局进程虚拟地址空间…

服务异步通讯MQ

同步调用存在的问题: 异步调用方案: RabbitMQ安装: 第一种:在线拉取 docker pull rabbitmq:3-management 第二种:将已有的安装包放入再用load加载 我这里放到tmp包里边 然后:cd /tmp docker load -i mq.tar 加载进去 然后运行mq容器 docker run \-e RABBITMQ_DEFAULT_USER…

tag-字符串:数组拆分I

题目 给定长度为 2n 的整数数组 nums &#xff0c;你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) &#xff0c;使得从 1 到 n 的 min(ai, bi) 总和最大。 返回该 最大总和 。 示例 题解一 class Solution:def arrayPairSum(self, nums: List[int]) …

@Test测试Mapper接口报错java.lang.NullPointerException

Test测试Mapper接口报错java.lang.NullPointerException 报错原因&#xff1a;没有注入依赖 解决方法&#xff1a;在测试类上面添加SpringBootTest

windows 环境下安装《车辆动态监控系统》支持JT808、JT1078、苏标主动安全设备接入

《车辆动态监控系统》下载安装部署包 开放端口 80/443/8800&#xff0c;web后台端口&#xff0c;nginx代理服务&#xff0c;nginx默认为8800端口8808&#xff0c;JT808专用端口6802&#xff0c;视频播放推流端口6891-6898&#xff0c;FTP端口6821&#xff0c;苏标主动安全附件…

[GESP样题 四级] 绝对素数

B3939 [GESP样题 四级] 绝对素数 题目 如果一个两位数是素数&#xff0c;且它的数字位置经过对换后仍为素数&#xff0c;则称为绝对素数&#xff0c;例如 13。给定两个正整数 A, B&#xff0c;请求出大于等于 A&#xff0c;小于等于 B 的所有绝对素数。 输入 1 行&#xff0…

LPDDR5电路设计的新功能

最近因为需要使用到LPDDR5&#xff0c;快速地浏览了JEDEC标准文档&#xff0c;发现与前几代相比出现了一些新的电路设计功能&#xff0c;总结为如下三点&#xff1a; 1. CK/WCK/RDQS时钟方案&#xff1b; 2. 电源的PDN设计目标&#xff1b; 3. DQ, DMI和RDQS的Rx端DFE均衡技术。…

便宜的智能组网系统有哪些?

随着物联网的迅猛发展&#xff0c;智能设备的普及与应用也日益增多。不同地区的智能设备之间的互联通信仍然存在着很多困难和挑战。其中一个主要问题是如何实现便宜而高效的智能组网。在这篇文章中&#xff0c;我们将介绍一款名为【天联】的组网产品&#xff0c;它是北京金万维…

《TAM》论文笔记(上)

原文链接 [2005.06803] TAM: Temporal Adaptive Module for Video Recognition (arxiv.org) 原文代码 GitHub - liu-zhy/temporal-adaptive-module: TAM: Temporal Adaptive Module for Video Recognition 原文笔记 What&#xff1a; TAM: Temporal Adaptive Module for …