当前位置: 首页 > news >正文

工作/seo管理平台

工作,seo管理平台,在线网站代码生成器,中国网教育目录 1.异常的概念与体系结构 1.1异常的体系结构 1.2异常的举例 1.3错误的举例 2.异常的分类 2.1编译时异常 2.2运行时异常 3.异常的处理 3.1异常的抛出throw 3.2try-catch捕获并处理 3.3finally 3.4 异常声明throws 4.自定义异常类 1.异常的概念与体系结构 1.1异常的…

目录

1.异常的概念与体系结构

 1.1异常的体系结构

1.2异常的举例

1.3错误的举例

 2.异常的分类

2.1编译时异常

 2.2运行时异常

3.异常的处理

3.1异常的抛出throw

3.2try-catch捕获并处理

3.3finally

3.4 异常声明throws

4.自定义异常类


1.异常的概念与体系结构

 1.1异常的体系结构

异常种类繁多,为了对不同异常或者错误进行很好的分类管理, Java 内部维护了一个异常的体系结构:

  从上图中可以看到:

1. Throwable 是异常体系的顶层类,其派生出两个重要的子类 , Error Exception
2. Error 指的是 Java 虚拟机无法解决的严重问题,比如: JVM 的内部错误、资源耗尽等 ,典型代表: StackOverflflowError OutOfMemoryError ,一旦发生回力乏术。
3. Exception 异常产生后程序员可以通过代码进行处理,使程序继续执行。比如:感冒、发烧。我们平时所说 的异常就是Exception

 

1.2异常的举例

Java 中,将程序执行过程中发生的不正常行为称为异常
比如:
(1)算术异常
 public static void main(String[] args) {System.out.println(10/0);}

运行结果及分析:

补充:

 

 (2)数组越界异常

public static void main(String[] args) {int[] arr = {1, 2, 3,4,5};System.out.println(arr[10]);}
// 执行结果
Exception in thread "main" java . lang . ArrayIndexOutOfBoundsException : 100
(3)空指针异常
public static void main(String[] args) {int[] arr = null;System.out.println(arr.length);}
// 执行结果
Exception in thread "main" java . lang . NullPointerException

1.3错误的举例

StackOverflflowError

public class Text2 {public static void fun(){fun();}public static void main(String[] args) {fun();}
}

执行结果:


 2.异常的分类

异常可能在编译时发生,也可能在程序运行时发生,根据发生的时机不同,可以将异常分为:

2.1编译时异常

在程序编译期间发生的异常,称为编译时异常,也称为受检查异常 (Checked Exception)
举个经典的例子:

理解: 

正确完整代码:

public class Text3 {public static void main(String[] args) throws CloneNotSupportedException {Person p1 = new Person(18, "WH");Person p2= (Person) p1.clone();}
}
public class Person {int age;String nume;public Person(int age, String nume) {this.age = age;this.nume = nume;}@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}

 2.2运行时异常

在程序执行期间发生的异常,称为运行时异常,也称为非受检查异常 (Unchecked Exception)
RunTimeException 以及其子类对应的异常,都称为运行时异常
比如:
NullPointerException 、 ArrayIndexOutOfBoundsException、 ArithmeticException
在1.2异常的举例中展示了相关代码
注意:编译时出现的语法性错误,不能称之为异常。
例如将 System.out.println 拼写错了 , 写成了 system.out.println. 此时编译过程中就会出错 , 这是 " 编译期 " 出错。
而运行时指的是程序已经编译通过得到 class 文件了 , 再由 JVM 执行过程中出现的错误 .

 


3.异常的处理

在Java中,异常处理主要的5个关键字:try、catch、final、throw、throws。

异常的捕获,也就是异常的具体处理方式,主要有两种:异常声明throws 以及 try-catch捕获处理。

3.1异常的抛出throw

在编写程序时,如果程序中出现错误,此时就需要将错误的信息告知给调用者
在Java中,可以借助throw关键字,抛出一个指定的异常对象,将错误信息告知给调用者
语法:
throw new XXXException ( " 异常产生的原因 " )
主动抛出指定异常

运行结果:

Exception in thread "main" java.lang.NullPointerException: hahaha

注意事项
(1) throw 必须写在方法体内部
(2)抛出的对象必须是 Exception 或者 Exception 的子类对象
(3) 如果抛出的是 RunTimeException 或者 RunTimeException 的子类,则可以不用处                 理, 直接交给JVM来处理
(4)如果抛出的是编译时异常,用户必须处理,否则无法通过编译
(5)异常一旦抛出,其后的代码就不会执行

对于(3)(5)举例:

3.2try-catch捕获并处理

语法形式:

如果真正要对异常进行 处理,就需要try-catch
注意事项
(1) try块内抛出异常位置之后的代码将不会被执行
public static void main(String[] args) {try{System.out.println(10/0);System.out.println(100);}catch (ArithmeticException e){e.printStackTrace();}}

运行结果:

java.lang.ArithmeticException: / by zero

(2)如果抛出异常类型与catch时异常类型不匹配,即异常不会被成功捕获,也就不会被处理,继续往外抛,直到 JVM收到后中断程序----异常是按照类型来捕获的

public static void main(String[] args) {try {System.out.println(10/0);} catch (NullPointerException e) {System.out.println(10);}}

运行结果:

Exception in thread "main" java.lang.ArithmeticException: / by zero

没有打印10,而是报java.lang.ArithmeticException: / by zero,
因为:异常没有被成功捕获,也就不会被处理继续往外抛,直到 JVM收到后中断程序
(3)try中可能会抛出多个不同的异常对象,则必须用多个catch来捕获----即多种异常,多次捕获

 

(4)如果异常之间具有父子关系,一定是子类异常在前catch,父类异常在后catch,否则语法错误

(5)可以通过一个catch捕获所有的异常,即多个异常,一次捕获(不推荐)

Exception 类是所有异常类的父类. 因此可以用这个类型表示捕捉所有异常

3.3finally

在写程序时, 有些特定的代码,不论程序是否发生异常,都需要执行,比如程序中打开的资源 :网络连接、数据库 连接、IO 流等, 在程序正常或者异常退出时,必须要对资源进进行回收 。另外,因为 异常会引发程序的跳转,可能 导致有些语句执行不到 finally 就是用来解决这个问题的。
小结: finally 中的代码一定会执行的,一般在 finally 中进行一些资源清理的扫尾工作
注意:
finally 执行的时机是在方法返回之前 (try 或者 catch 中如果有 return 会在这个 return 之前执行 fifinally). 但是如果 finally 中也存在 return 语句 , 那么就会执行 fifinally 中的 return, 从而不会执行到 try 中原有的 return.
一般我们不建议在 finally 中写 return ( 被编译器当做一个警告 )

 

3.4 异常声明throws

处在方法声明时参数列表之后,当方法中抛出编译时异常,用户不想处理该异常,此时就可以借助 throws 将异常抛 给方法的调用者来处理。即当前方法不处理异常,提醒方法的调用者处理异常

 

语法格式:

修饰符 返回值类型 方法名 ( 参数列表 ) throws 异常类型 1 ,异常类型 2 ...{
}

  注意:

如果方法是main方法调用者仍然可以不处理异常,借助throws将异常抛 给JVM来处理。

注意事项
1. throws 必须跟在方法的参数列表之后
2. 声明的异常必须是 Exception 或者 Exception 的子类
3. 方法内部如果抛出了多个异常, throws 之后必须跟多个异常类型,之间用逗号隔开,如果抛出多个异常类型 具有父子关系,直接声明父类即可。
4.我们在使用throws时,要明确声明的异常是编译时异常还是运行时异常。

比如:

(1)

(2) 

 

如果是 运行时异常调用者不处理异常也没关系,JVM会处理。

如果是编译时异常一定要处理异常

处理方式:(1)try-catch捕获并处理

                  (2)借助throws将异常抛 给JVM来处理。



4.自定义异常类

Java 中虽然已经内置了丰富的异常类 , 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我 们实际情况的异常结构.
如何自定义异常类?
例题:

定义Course类,Course包含private String cno,private String cname,private int credit,Course包括方法:public Course(),public Course。Define CreditException类扩展(继承) 在RunTimeException中,CreditException包含以下方法:public CreditException()、public CreditException(String Message)。

如果课程的学分低于0.5或高于6,则课程的构建方法将抛出CreditException,消息为“学分应在0.5和6之间!”。

定义公共类TestCourse,创建一个Course对象,并使用try/catch块来处理CreditException。

代码:
import java.util.Scanner;public class LogIn {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);System.out.println("请输入cno");String cno=scanner.next();System.out.println("请输入课程名字");String cname=scanner.next();System.out.println("请输入学分");double credit=scanner.nextDouble();Course course=new Course(cno,cname,credit);try {if(!(course.getCredit()>=0.5&&course.getCredit()<=6)){throw new CreditException("课程的学分应在0.5到6之间");}else{System.out.println("输入成功学分为:"+course.getCredit());}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
class Course{private String cno;private String cname;private double credit;public Course(String cno, String cname, double credit) {this.cno = cno;this.cname = cname;this.credit = credit;}public Course() {}public String getCno() {return cno;}public void setCno(String cno) {this.cno = cno;}public String getCname() {return cname;}public void setCname(String cname) {this.cname = cname;}public double getCredit() {return credit;}public void setCredit(double credit) {this.credit = credit;}}
class CreditException extends RuntimeException{public CreditException(String message){super(message);}
}

注意事项

  • 自定义异常通常会继承自 Exception 或者 RuntimeException
  • 继承自 Exception 的异常默认是受查异常
  • 继承自 RuntimeException 的异常默认是非受查异常

以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

 

相关文章:

异常的顶级理解

目录 1.异常的概念与体系结构 1.1异常的体系结构 1.2异常的举例 1.3错误的举例 2.异常的分类 2.1编译时异常 2.2运行时异常 3.异常的处理 3.1异常的抛出throw 3.2try-catch捕获并处理 3.3finally 3.4 异常声明throws 4.自定义异常类 1.异常的概念与体系结构 1.1异常的…...

LinkedHashMap实现LRU缓存cache机制,Kotlin

LinkedHashMap实现LRU缓存cache机制&#xff0c;Kotlin LinkedHashMap的accessOrdertrue后&#xff0c;访问LinkedHashMap里面存储的元素&#xff0c;LinkedHashMap就会把该元素移动到最尾部。利用这一点&#xff0c;可以设置一个缓存的上限值&#xff0c;当存入的缓存数理超过…...

Google 开源库Guava详解(集合工具类)

任何具有JDK Collections Framework经验的程序员都知道并喜欢java.util.Collections.Guava提供了更多的实用程序&#xff1a;适用于所有集合的静态方法。这些是番石榴最受欢迎和成熟的部分。 对应于特定接口的方法以相对直观的方式分组&#xff1a; nterface JDK or Guava? …...

Ansys Zemax | 如何将光线追迹结果导出为IES格式

照明系统设计者通常需要向客户提供IES格式的数据。照明工程学会 (Illuminating Engineering Society&#xff0c;IES) 文件格式便于传输辉度数据&#xff0c;该格式得到了制造商和设计师的广泛认可。本文描述了如何生成IES文件并验证结果。&#xff08;联系我们获取文章附件&am…...

JSONObject 比 Map好使的地方

需求&#xff1a;改originalJson中的json字符串的key&#xff0c;当key满足在configMapping中配置的key2情况的时候&#xff0c;把originalJson的key改成 configMapping中的value2。 上代码&#xff1a; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject;p…...

[js] 图解 event.pageX event.clientX event.offsetX getBoundingClientRect

event.clientX、event.clientY 鼠标相对于浏览器窗口可视区域的X&#xff0c;Y坐标&#xff08;窗口坐标&#xff09;&#xff0c;可视区域不包括工具栏和滚动条。IE事件和标准事件都定义了这2个属性 event.pageX、event.pageY 类似于event.clientX、event.clientY&#xff0c;…...

VsCode备忘

上次简单学习了一下vscode的使用&#xff0c;结果好长时间没用&#xff0c;今天打开又全忘了。。。再记录一下吧 快捷键 CtrlShiftP 命令面板&#xff0c;查找命令&#xff0c;设置等等 Ctrl 打开集成终端&#xff0c;监视生成输出 Ctrl, 打开设置 CtrlP 转到文件,使用转到符…...

Linux命令200例:Yum强大的包管理工具使用(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…...

使用 Linux 相关知识部署博客系统

目录 ​编辑一、认识 Linux 二、如何拥有 Linux 环境 三、常见的 Linux 命令 1、目录相关命令 &#xff08;1&#xff09;ls &#xff08;2&#xff09;pwd &#xff08;3&#xff09;cd 2、文件操作相关命令 &#xff08;1&#xff09;touch &#xff08;2&#xf…...

Linux--进程--vfork与fork区别

vfork&#xff1a; 所需头文件&#xff1a;#include <sys/types.h> #include <unistd.h> pid_t vfork(void); 功能&#xff1a; vfork() 函数和 fork() 函数一样都是在已有的进程中创建一个新的进程&#xff0c;但它们创建的子进程是有区别的。 参数&#xff…...

Ubuntu系统重装nvidia gpu驱动

1. 卸载原驱动 sudo apt remove *cuda* sudo apt remove *nvidia* sudo /usr/bin/nvidia-uninstall sudo dpkg -l | grep ^rc | cut -d -f3 | sudo xargs dpkg --purge sudo rm -rf ~/.cuda-license-* sudo apt purge nvidia-cuda-toolkit sudo apt remove nvidia-driver-* s…...

Java + Selenium + Appium自动化测试

一、启动测试机或者Android模拟器&#xff08;Genymotion俗称世界上最快的模拟器&#xff0c;可自行百度安装&#xff09; 二、启动Appium&#xff08;Appium环境安装可自行百度&#xff09; 三、安装应用到Genymotion上&#xff0c;如下图我安装一个计算机的小应用&#xff…...

【sgLazyCascader】自定义组件:基于el-cascader的懒加载级联菜单,支持异步加载子级菜单

sgLazyCascader源码 <template><div :class"$options.name"><el-cascader :props"props" v-model"model" :placeholder"placeholder || 请选择" :options"options"></el-cascader></div> &l…...

2023高教社杯数学建模E题思路模型 - 黄河水沙监测数据分析

# 1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响&#xff0c; 以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位…...

一、Linux下常用的压缩格式

一、Linux下常用的压缩格式 ​ Linux下常用的压缩扩展名有&#xff1a;.tar、.tar.bz2、.tar.gz。 二、Windows下7ZIP软件的安装 ​ 因为Linux下很多文件是.bz2&#xff0c;.gz结尾的压缩文件&#xff0c;因此需要在windows下安装7ZIP软件。 三、gzip压缩工具 .gzip工具负…...

MySQL 查询 - 排除某些字段的SQL查询,提升查询性能

序言 某些时候&#xff0c;需要查询拥有很多很多字段的表&#xff0c;但是查询表时&#xff0c;其中有一些不需要查询的字段&#xff0c;会增加查询的负担&#xff0c;所以这时候&#xff0c;就需要排除这些冗余的字段&#xff0c;指定需要的字段查询&#xff0c;提升查询性能…...

国产信创服务器如何进行安全可靠的文件传输?

信创&#xff0c;即信息技术应用创新&#xff0c;2018年以来&#xff0c;受“华为、中兴事件”影响&#xff0c;国家将信创产业纳入国家战略&#xff0c;并提出了“28n”发展体系。从产业链角度&#xff0c;信创产业生态体系较为庞大&#xff0c;主要包括基础硬件、基础软件、应…...

ARTS第五周:S - 数据编织 Data fabric

Brife ​数据编织/数据经纬&#xff08;Data Fabric&#xff09;是一种新型的数据管理和治理方法&#xff0c;旨在连接和整合所有数据源和数据目标&#xff0c;实现数据的无缝移动和访问。它是一种跨平台、跨云、跨技术的解决方案&#xff0c;可以连接各种类型的数据&#xff0…...

基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平教程

详情点击链接&#xff1a;基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平教程 一&#xff0c;空间数据获取与制图 1.1 软件安装与应用 1.2 空间数据 1.3海量空间数据下载 1.4 ArcGIS软件…...

Spring Boot 介绍

Spring Framework的发展和Spring Boot Spring 3 支持Java注解Spring 4 支持 Java 8, 同时推出Spring Boot Spring Boot 简化了Spring配置。Spring Boot是什么? Boot 翻译有靴子,启动的意思, 在计算机领域有引导的意思, 比如计算机启动引导或是Linux 的引导程序。 Spring B…...

mysql基于AES_ENCRYPTAES_DECRYPT实现密码的加密与解密

1.直接使用AES_ENCRYPT&&AES_DECRYPT函数导致的问题。 执行语句 select AES_ENCRYPT(cd123,key) 结果 加密过后的字符串是一串很奇怪的字符。 尝试使用上面加密过后的字符解密。 select AES_DECRYPT(u5£d|#,key) 结果 并未成功的解密 2.解决办法 使用 hex(…...

怎么把pdf转换成jpg图片?

怎么把pdf转换成jpg图片&#xff1f;在工作中&#xff0c;如果我们收到无法修改编辑的PDF文件&#xff0c;可能会遇到一些困难。尤其是当平台或网站只支持JPG图片格式&#xff0c;而领导又要求我们将pdf文件改为JPG格式时&#xff0c;情况就更为棘手了。这对于我们打工一族来说…...

计算机脚本的概念,如何编写、使用脚本 (Script)?

一、脚本的概念和使用场景 在计算机领域的脚本&#xff0c;指的是使用一种特定的描述性语言&#xff0c;依据一定的格式编写的可执行文件脚本语言又被称为扩建的语言或者动态语言, 是一种编程语言, 用来控制软件应用程序, 脚本通常是以文本 (ASCⅡ) 保存, 只是在被调用时进行解…...

c语言 5.0

&#x1f482; 个人主页: 程序员爱摸鱼&#x1f91f; 版权: 本文由【程序员爱摸鱼】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注点赞收藏(一键三连)哦&#x1f485; 想寻找共同成长的小伙伴&#xff0c;可以互粉哦 &#x1f4ac;文章目录…...

如何配置远程访问以在外部网络中使用公司内部的OA办公系统——“cpolar内网穿透”

文章目录 前言1. 确认在内网下能够使用IP端口号登录OA办公系统2. 安装cpolar内网穿透3. 创建隧道映射内网OA系统服务端口4. 实现外网访问公司内网OA系统总结 前言 现在大部分公司都会在公司内网搭建使用自己的办公管理系统&#xff0c;如OA、ERP、金蝶等&#xff0c;员工只需要…...

【AI】机器学习——线性模型(线性回归)

线性模型既能体现出重要的基本思想&#xff0c;又能构造出功能更加强大的非线性模型 文章目录 3.1 线性模型3.1.1 数据3.1.2 目标/应用 3.2 线性回归3.2.1 回归模型历史3.2.2 回归分析研究内容回归分析步骤 3.2.3 回归分析分类3.2.4 回归模型3.2.5 损失函数梯度下降法一元回归模…...

智能小车之跟随小车、避障小车原理和代码

目录 1. 红外壁障模块分析​编辑 2. 跟随小车的原理 3. 跟随小车开发和调试代码 4. 超声波模块介绍 5. 摇头测距小车开发和调试代码 1. 红外壁障模块分析 原理和循迹是一样的&#xff0c;循迹红外观朝下&#xff0c;跟随朝前 TCRT5000传感器的红外发射二极管不断发射红外…...

行业追踪,2023-09-07

自动复盘 2023-09-07 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…...

Qt creator中项目的构建配置和运行设置

使用 Qt Creator 集成开发环境构建和运行程序是一件非常简单的事情&#xff0c;一个按钮或者一个快捷键搞定全部&#xff0c;大家已经都了解了。但是&#xff0c;这些看起来简单的过程&#xff0c;背后到底发生了什么呢&#xff1f; 点击 Qt Creator 项目模式&#xff0c;可以…...

蓝桥杯打卡Day3

文章目录 吃糖果递推数列 一、吃糖果IO链接 本题思路:本题题意就是斐波那契数列&#xff01; #include <bits/stdc.h>typedef uint64_t i64;i64 f(i64 n) {if(n1) return 1;if(n2) return 2;return f(n-1)f(n-2); }signed main() {std::ios::sync_with_stdio(false);s…...