JavaSE——异常(1/2)-认识异常(介绍,异常的体系,了解如何解决异常)、自定义异常(自定义异常的种类,实例演示)

目录

认识异常

介绍

异常的体系

了解如何解决异常

自定义异常

自定义异常的种类

实例演示


认识异常

介绍

什么是异常?

  • 异常就是代表程序出现的问题。

比如:

int[] arr = {10,20,30};
System.out.println(arr[3]);System.out.println(10 / 0);

运行之后会报错,以一个异常对象抛出来错误。

异常的体系

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

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

由分为两种:

  • 运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引l越界异常)
  • 编译时异常:编译阶段就会出现错误提醒的。(如:日期解析异常)

例如:

import java.text.SimpleDateFormat;
import java.util.Date;public class Test1 {public static void main(String[] args){//运行时异常
//        Integer.valueOf("abc");
//
//        int[] arr = {11,22,33};
//        System.out.println(arr[5]);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date d =  sdf.parse("2028-11-11 10:24");System.out.println(d);                              //编译时异常}
}

了解如何解决异常

捕获异常(try...catch)

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

try{

        //监视可能出现异常的代码!

}catch(异常类型1 变量){

        //处理异常

}catch(异常类型2 变量){

        //处理异常

}...

抛出异常(throws)

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

方法 throws 异常1,异常2,异常3...{

        ...

}

第一种方式:try...catch

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Test1 {public static void main(String[] args){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();}}
}

第二种方式:抛给上层程序

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Test1 {public static void main(String[] args) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date d =  sdf.parse("2028-11-11 10:24");    //编译时异常System.out.println(d);}
}

抛给上层程序,也就是JVM虚拟机;虚拟机实际上也会进行进行try  catch.

自定义异常

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

自定义异常的种类

自定义运行时异常

  • 定义一个异常类继承RuntimeException
  • 重写构造器
  • 通过throw new 异常类(xxx) 来创建异常对象并抛出

编译阶段不报错,提醒不强烈,运行时才可能出现!!

自定义编译时异常

  • 定义一个异常类继承Exception
  • 重写构造器
  • 通过throw new 异常类(xxx) 来创建异常对象并抛出

编译阶段就报错,提醒更加强烈!

实例演示

需求一:保存合法年龄。

自定义运行时异常来处理:

1.首先自定义异常类

public class AgeIllegalRuntimeException extends RuntimeException {//必须让这个类继承自 RuntimeExceptionpublic AgeIllegalRuntimeException() {}public AgeIllegalRuntimeException(String message) {super(message);}//这样就算定义完成了
}

2.回到主程序,捕获错误

package user.Exception;public class Test2 {public static void main(String[] args) {//需求:保存一个合法的年龄try {saveAge(222);} catch (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,your age is " + age);//写上异常提示}}
}

 运行结果:

自定义编译时异常来处理:

异常类定义这里,和上面的方法是差不多的:(注意继承自Exception)

package user.Exception;public class AgeIllegalRuntimeException extends Exception {//必须让这个类继承自 Exception,才能成为一个编译时时异常类public AgeIllegalRuntimeException() {}public AgeIllegalRuntimeException(String message) {super(message);}//这样就算定义完成了
}

主程序:

package user.Exception;public class Test2 {public static void main(String[] args) {//需求:保存一个合法的年龄try {saveAge2(222);System.out.println("saveAge2底层执行时成功的!");} catch (Exception e) {e.printStackTrace();System.out.println("saveAge2底层出现了bug");}}public static void saveAge2(int age) throws AgeIllegalRuntimeException {if(age > 0 && age < 150){System.out.println("年龄成功保存: " + age);}else{//用一个异常对象封装这个问题// throw抛出去这个异常对象// 再用throws,用在方法上,抛出方法内部的异常throw new AgeIllegalRuntimeException("/age is illegal,your age is " + age);}}
}

 运行结果:


异常有什么作用?

  1. 异常是用来查寻系统Bug的关键参考信息!
  2. 异常可以作为方法内部的一种特殊返回值,以便通知上层调用者底层的执行情况!

END


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

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

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

相关文章

VS调试技巧

1. 什么是bug bug本意是“昆⾍”或“⾍⼦”&#xff0c;现在⼀般是指在电脑系统或程序中&#xff0c;隐藏着的⼀些未被发现的缺陷或 问题&#xff0c;简称程序漏洞。 “Bug” 的创始⼈格蕾丝赫柏&#xff08;Grace Murray Hopper&#xff09;&#xff0c;她是⼀位为美国海军⼯…

【痕迹】QQ+微信朋友圈和聊天记录分析工具1.0.3

【痕迹】QQ微信朋友圈和聊天记录分析工具1.0.3 &#xff08;1&#xff09;纯Python语言实现&#xff0c;使用Flask后端&#xff0c;本地分析&#xff0c;不上传个人数据。 &#xff08;2&#xff09;数据可视化分析QQ、微信聊天记录&#xff0c;提取某一天的聊天记录与大模型…

精准读取CSV/Excel数据 - 灵活指定行列范围的 Python 解决方案

文章目录 源代码项目简介导入相关库__file_exists 装饰器函数的签名和注释主要功能的实现运行演示读取 Excel 文件 源代码 https://github.com/ma0513207162/PyPrecip。pyprecip\reading\read_api.py 路径下。 项目简介 PyPrecip 是一个专注于气候数据处理的 Python 库&#xf…

Spring 当中的Bean 作用域

Spring 当中的Bean 作用域 文章目录 Spring 当中的Bean 作用域每博一文案1. Spring6 当中的 Bean的作用域1.2 singleton 默认1.3 prototype1.4 Spring 中的 bean 标签当中scope 属性其他的值说明1.5 自定义作用域&#xff0c;一个线程一个 Bean 2. 总结:3. 最后&#xff1a; 每…

蓝桥杯练习系统(算法训练)ALGO-947 贫穷的城市

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 某城市有n个小镇&#xff0c;编号是1~n。由于贫穷和缺乏城市规划的人才&#xff0c;每个小镇有且仅有一段单向的公路通往别…

【数学】三角函数相关

目录 一、三角函数 二、诱导公式 1.介绍 2.示例 三、其它重要公式 ID&#xff1a;HL_5461 一、三角函数 对于如图所示三角形&#xff1a; 三角函数公式表达其它关系正弦函数/余弦函数/正切函数余切函数正割函数余割函数 二、诱导公式 1.介绍 奇变偶不变&#xff0c;符…

微信小程序 手机号授权登录

手机号授权登录 效果展示 这里面用的是 uni-app 官方的登录 他支持多端发布 https://zh.uniapp.dcloud.io/api/plugins/login.html#loginhttps://zh.uniapp.dcloud.io/api/plugins/login.html#login 下面是代码 <template><!-- 授权按钮 --><button v-if&quo…

Spring+Vue的卓越托管中心管理系统的设计与实现+PPT+论文+讲解+售后

相比于以前的传统手工管理方式&#xff0c;智能化的管理方式可以大幅降低运营人员成本&#xff0c;实现了卓越托管中心管理系统的标准化、制度化、程序化的管理&#xff0c;有效地防止了卓越托管中心管理系统的随意管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能…

DI-engine强化学习入门(十又二分之一)如何使用RNN——数据处理、隐藏状态、Burn-in

一、数据处理 用于训练 RNN 的 mini-batch 数据不同于通常的数据。 这些数据通常应按时间序列排列。 对于 DI-engine, 这个处理是在 collector 阶段完成的。 用户需要在配置文件中指定 learn_unroll_len 以确保序列数据的长度与算法匹配。 对于大多数情况&#xff0c; learn_un…

神经网络极简入门

神经网络是深度学习的基础&#xff0c;正是深度学习的兴起&#xff0c;让停滞不前的人工智能再一次的取得飞速的发展。 其实神经网络的理论由来已久&#xff0c;灵感来自仿生智能计算&#xff0c;只是以前限于硬件的计算能力&#xff0c;没有突出的表现&#xff0c;直至谷歌的A…

mysql workbench如何导出insert语句?

进行导出设置 导出的sql文件 CREATE DATABASE IF NOT EXISTS jeesite /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ /*!80016 DEFAULT ENCRYPTIONN */; USE jeesite; -- MySQL dump 10.13 Distrib 8.0.28, for Win64 (x86_64) -- -- Host: 127.0…

如何使用dockerfile文件将项目打包成镜像

要根据Dockerfile文件来打包一个Docker镜像&#xff0c;你需要遵循以下步骤。这里假设你已经安装了Docker环境。 1. 准备Dockerfile 确保你的Dockerfile文件已经准备就绪&#xff0c;并且位于你希望构建上下文的目录中。Dockerfile是一个文本文件&#xff0c;包含了用户可以调…

顺序表的实现(迈入数据结构的大门)(1)

什么是数据结构 数据结构是由&#xff1a;“数据”与“结构”两部分组成 数据与结构 数据&#xff1a;如我们所看见的广告、图片、视频等&#xff0c;常见的数值&#xff0c;教务系统里的&#xff08;姓名、性别、学号、学历等等&#xff09;&#xff1b; 结构&#xff1a;当…

线性表--数据结构设计与操作

单链表 1.单链表的定义&#xff1a; typedef struct LNode{Elemtype data;struct Lnode *next; }LNode ,*LinkList;//单链表的数据结构&#xff08;手写&#xff09; #include<iostream> #include<vector> #include<algorithm>typedef int TypeElem; //单链表…

OpenAI API搭建的智能家居助手;私密大型语言模型(LLM)聊天机器人;视频和音频文件的自动化识别和翻译工具

✨ 1: GPT Home 基于Raspberry Pi和OpenAI API搭建的智能家居助手 GPT Home是一个基于Raspberry Pi和OpenAI API搭建的智能家居助手&#xff0c;功能上类似于Google Nest Hub或Amazon Alexa。通过详细的设置指南和配件列表&#xff0c;用户可以自行组装和配置这个设备&#x…

Ansible自动运维工具之playbook

一.inventory主机清单 1.定义 Inventory支持对主机进行分组&#xff0c;每个组内可以定义多个主机&#xff0c;每个主机都可以定义在任何一个或多个主机组内。 2.变量 &#xff08;1&#xff09;主机变量 [webservers] 192.168.10.14 ansible_port22 ansible_userroot ans…

使用sqlmodel实现唯一性校验

代码&#xff1a; from sqlmodel import Field, Session, SQLModel, create_engine# 声明模型 class User(SQLModel, tableTrue):id: int | None Field(defaultNone, primary_keyTrue)# 不能为空&#xff0c;必须唯一name: str Field(nullableFalse, uniqueTrue)age: int | …

Flutter弹窗链-顺序弹出对话框

效果 前言 弹窗的顺序执行在App中是一个比较常见的应用场景。比如进入App首页&#xff0c;一系列的弹窗就会弹出。如果不做处理就会导致弹窗堆积的全部弹出&#xff0c;严重影响用户体验。 如果多个弹窗中又有判断逻辑&#xff0c;根据点击后需要弹出另一个弹窗&#xff0c;这…

大数据Scala教程从入门到精通第五篇:Scala环境搭建

一&#xff1a;安装步骤 1&#xff1a;scala安装 1&#xff1a;首先确保 JDK1.8 安装成功: 2&#xff1a;下载对应的 Scala 安装文件 scala-2.12.11.zip 3&#xff1a;解压 scala-2.12.11.zip 4&#xff1a;配置 Scala 的环境变量 在Windows上安装Scala_windows安装scala…

docker搭建代码审计平台sonarqube

docker搭建代码审计平台sonarqube 一、代码审计关注的质量指标二、静态分析技术分类三、sonarqube流程四、快速搭建sonarqube五、sonarqube scanner的安装和使用 一、代码审计关注的质量指标 代码坏味道 代码规范技术债评估 bug和漏洞代码重复度单测与集成 测试用例数量覆盖率…