Java中的异常

认识异常

异常就是程序出现的问题;

Integer.valueOf("aaaa");

 异常体系

因为写代码时经常会出现问题,Java的设计者们早就为我们写好了很多个异常类,来描述不同场景下的问题。而有些类是有共性的所以就有了异常的继承体系

 Error:代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,sun公司会把这些问题封装成Error对象给出来,说白了,Error是给sun公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它

Exception:叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用Exception以及它的子类来封装程序出现的问题

运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)(非受检)

int[] arr = {1,2,3,4,5};
Sysout.out.println(arr[5]);

产生ArrayIndexOutOfBoundsExcpetion异常

编译时异常:编译阶段就会出现错误提醒的(如:日期解析异常)(受检)

 

自定义异常

如果企业自己的某种问题,想通过异常来表示,那就需要自己来定义异常类了。

应用:

public class Test01 {public static void main(String[] args) {}public static void saveAge(int age) throws AgeOutOfBroundException {if(age > 0 && age < 150 ){info("年龄保存成功");}else {throw new AgeOutOfBroundException("年龄超出范围");}}
}
class AgeOutOfBroundException extends Exception{public AgeOutOfBroundException() {}public AgeOutOfBroundException(String 年龄超出范围) {}
}

注意咯,自定义异常可能是编译时异常,也可以是运行时异常

1.如果自定义异常类继承Excpetion,则是编译时异常。
    特点:方法中抛出的是编译时异常,必须在方法上使用throws声明,强制调用者处理。
    
2.如果自定义异常类继承RuntimeException,则运行时异常。
    特点:方法中抛出的是运行时异常,不需要在方法上用throws声明。

异常处理

比如有如下的场景:A调用用B,B调用C;C中有异常产生抛给B,B中有异常产生又抛给A;异常到了A这里就不建议再抛出了,因为最终抛出被JVM处理程序就会异常终止,并且给用户看异常信息,用户也看不懂,体验很不好。

此时比较好的做法就是:1.将异常捕获,将比较友好的信息显示给用户看;2.尝试重新执行,看是是否能修复这个问题。

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 Test02 {public static void main(String[] args) {try {test1();} catch (ParseException e) {System.out.println("你想要找的文件不存在");;} catch (FileNotFoundException e) {System.out.println("你要解析的时间不正确");throw new RuntimeException(e);}}public static void test1() throws ParseException, FileNotFoundException {SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");Date date = dateFormat.parse("2028-02-28 22:18:46");System.out.println(date);test2();}private static void test2() throws FileNotFoundException {InputStream inputStream = new FileInputStream("D:/movie.pang");}
}

第一种处理方式是,在main方法中对异常进行try...catch捕获处理了,给出友好提示。

第二种处理方式是:在main方法中对异常进行捕获,并尝试修复


import java.util.Scanner;
/*** 目标:掌握异常的处理方式:捕获异常,尝试修复。*/
public class Test03 {public static void main(String[] args) {while (true){try {System.out.println(getmoney());break;} catch (Exception e) {System.out.println("你输入有误");//打印错误信息}}}public static double getmoney(){Scanner scanner = new Scanner(System.in);while (true){System.out.println("请输入你的钱数");double money = scanner.nextDouble();if(money > 0){return money;}else {System.out.println("你输入的价格不合适");}}}
}

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

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

相关文章

日志采集分析ELK

这里的 ELK其实对应三种不同组件 1.ElasticSearch&#xff1a;基于Java&#xff0c;一个开源的分布式搜索引擎。 2.LogStash&#xff1a;基于Java&#xff0c;开源的用于收集&#xff0c;分析和存储日志的工具。&#xff08;它和Beats有重叠的功能&#xff0c;Beats出现之后&a…

OLED透明屏采购指南:如何选择高质量产品?

着科技的不断进步&#xff0c;OLED透明屏作为一种创新的显示技术&#xff0c;在各个行业中得到了广泛应用。 在进行OLED透明屏采购时&#xff0c;选择高质量的产品至关重要。在这篇文章中&#xff0c;尼伽将为您提供一个全面的OLED透明屏采购指南&#xff0c;帮助您了解关键步…

day20 飞机大战射击游戏

有飞行物类 飞行 爆炸 的连环画&#xff0c; 飞行的背景图 &#xff0c; 子弹图&#xff0c; 还有游戏开始 暂停 结束 的画面图。 设计一个飞机大战的小游戏&#xff0c; 玩家用鼠标操作hero飞行机&#xff0c; 射出子弹杀死敌机&#xff0c;小蜜蜂。 敌机可以获得分数&…

Jmeter参数化类型

1.参数在多个请求报文中出现&#xff0c;执行一次需要使用同一个参数--随机生成(随机变更) 2.参数在请求报文中出现&#xff0c;执行过程需要使用同一个参数(--固定参数) 3.参数从指定几个固定中随机获取一个 4.参数从本地文件中获取 5.参数在多个请求报文中出现&#xff0c;每…

c++11:std::partition分割,std::is_partitioned判断

序列 vec.clear();for(int i 0;i<10;i){vec.push_back(i);}重新分割。大于1的排在后&#xff0c;返回第一个 std::vector<int>::iterator it std::partition(vec.begin(),vec.end(),[](int value){return value>1;}); std::cout<<"partition:"&l…

计算机 数进制转换;存储MB与带宽Mbps

参考&#xff1a;https://zhuanlan.zhihu.com/p/459817484 1、计算机 数进制转换 1&#xff09;与十进制相关的转换 2&#xff09;与二进制相关的转换 二进制是Binary&#xff0c;简写为B&#xff1b;八进制是Octal&#xff0c;简写为O&#xff1b;十进制是Decimal&#xff…

centos nginx配置ipv4和ipv6的地址都可以访问同一个网站

标题centos nginx配置ipv4和ipv6的地址都可以访问同一个网站 在 Nginx 中配置使 IPv4 和 IPv6 地址都可以访问同一个网站相对简单。只需要确保 Nginx 配置文件正确地配置了监听 IPv4 和 IPv6 地址的监听器即可。 打开你的 Nginx 配置文件&#xff0c;通常位于 /etc/nginx/nginx…

还在玩传统终端,不妨来试试全新 AI 终端 Warp

壹 ❀ 引 最近一段时间&#xff0c;AI领域如同雨后春笋般开始猛烈生长&#xff0c;processon&#xff0c;sentry&#xff0c;一些日常使用的工具都在积极接入AI&#xff0c;那么正好借着AI的风头&#xff0c;今天给大家推荐一款非常不错的智能终端 warp&#xff08;目前仅限ma…

车载APP软件外包开发通讯

车载APP与车辆之间的通信方式和特点会因为不同的技术和场景而有所不同。以下是一些常见的车载APP与车辆通信方式以及它们的特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.蓝牙连接&#xff1a…

英语——基本句型

第一节 句型1——主语+谓语 一个句子为了说明一件事或表达一种感情,最简单的表达方式,就是“谁,怎么了”。这里的“谁”,就是句子的主语,它的内涵很丰富,可以是人、物、某种行为等。“怎么了”,就是句子的谓语,一般由不及物动词充当。主语+谓语,即构成一个最简单的句…

STM32 F103C8T6学习笔记9:0.96寸单色OLED显示屏—自由取模显示—显示汉字与图片

今日学习0.96寸单色OLED显示屏的自由取模显示: 宋体汉字比较复杂&#xff0c;常用字符可以直接复制存下来&#xff0c;毕竟只有那么几十个字母字符&#xff0c;但汉字实在太多了&#xff0c;基本不会全部放在单片机里存着&#xff0c;一般用到多少个字就取几个字的模&#xff…

基于STM32+微信小程序设计的宠物投喂装置(腾讯云IOT)

一、设计需求 【1】 项目背景 社会经济的飞速发展与城市化进程的加速,城市市民家庭的封闭化和人口老龄化的情况日益突出,基于人们的情感寄托与休闲消费的需要,中国的宠物产业也悄然兴起。家庭宠物的饲养成为了城市居民生活消遣的新方式。宠物的喂养和看护往往是宠物主人最…

hive高频使用的拼接函数及“避坑”

hive高频使用的拼接函数及“避坑” 说到拼接函数应用场景和使用频次还是非常高&#xff0c;比如一个员工在公司充当多个角色&#xff0c;我们在底层存数的时候往往是多行&#xff0c;但是应用的时候我们通常会只需要一行&#xff0c;角色字段进行拼接&#xff0c;这样join其他…

typescript基础之null和undefined

TypeScript是一种基于JavaScript的编程语言&#xff0c;它支持静态类型检查和面向对象的特性。TypeScript中的null和undefined是两种基本类型&#xff0c;它们分别表示空值或未定义的值。在本文中&#xff0c;我将介绍TypeScript中null和undefined的含义、区别、检查方法和使用…

Transformer 相关模型的参数量计算

如何计算Transformer 相关模型的参数量呢&#xff1f; 先回忆一下Transformer模型论文《Attention is all your need》中的两个图。 设Transformer模型的层数为N&#xff0c;每个Transformer层主要由self-attention 和 Feed Forward组成。设self-attention模块的head个数为 …

linux系统部署jenkins详细教程

一、Linux环境 1、下载war包 官网下载地址&#xff1a; https://get.jenkins.io/war-stable/2.332.4/jenkins.war 2、将war包上传至服务器 创建目录/home/ubuntu/jenkins 上传war包至该目录 3、将jenkins添加到环境变量 进入环境变量文件 vim /etc/profile # 文件下方追加…

【3Ds Max】图形合并命令的简单使用

示例&#xff08;将文字设置在球体上&#xff09; 1. 首先这里创建一个球体和一个文本 2. 选中球体&#xff0c;在复合对象中点击图形合并按钮 点击“拾取图形”按钮&#xff0c;然后选中文本&#xff0c;此时可以看到球体上已经投射出文本 3. 接下来是一些常用参数的介绍 当…

从零实战SLAM-第八课(非特征点的视觉里程计)

在七月算法报的班&#xff0c;老师讲的蛮好。好记性不如烂笔头&#xff0c;关键内容还是记录一下吧&#xff0c;课程入口&#xff0c;感兴趣的同学可以学习一下。 --------------------------------------------------------------------------------------------------------…

centos下使用jemalloc解决Mysql内存泄漏问题

参考&#xff1a; MySQL bug&#xff1a;https://bugs.mysql.com/bug.php?id83047&tdsourcetags_pcqq_aiomsg https://github.com/jemalloc/jemalloc/blob/dev/INSTALL.md &#xff08;1&#xff09;ptmalloc 是glibc的内存分配管理 &#xff08;2&#xff09;tcmalloc…

【设计模式】模板方法模式(Template Method Pattern)

23种设计模式之模板方法模式&#xff08;Template Method Pattern&#xff09; 基本概念 模板方法模式是一种行为型设计模式&#xff0c;它定义了一个算法骨架&#xff0c;将某些算法步骤的实现延迟到子类中。 这样可以使得算法的框架不被修改&#xff0c;但是具体的实现可以…