java知识点详解——异常

当输入的数不是整数时 会报错

当输入的被除数为0时 会报错

在以前我们会使用if—else语句用来堵住漏洞,但是那样相当繁琐,很难穷举所有错误

Scanner in = new Scanner(System.in);
System.out.print("请输入被除数:");
int num1 = in.nextInt();
System.out.print("请输入除数:");
int num2 = in.nextInt();
System.out.println(num1+"/"+ num2 +"="+ num1/ num2);
System.out.println("感谢使用本程序!");

异常:

程序中预先设置好 对付异常的处理办法

异常在java中被封装成了各种异常类,所有异常类都是Throwable的子类,Error类和Exception类。

Error类

表示仅仅靠程序本身无法恢复的严重错误,比如内存溢出,虚拟机错误等

Exception类

由Java应用程序抛出和处理的非严重错误,比如算术运算出错,数组下标越界,类型转换异常等。

Exception类又可以分为两大类:

  1. 运行时异常: 就比如算数异常
  2. Checked异常: 非运行时异常

Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws

try:

执行可能产生 异常的代码

catch:

捕获异常

throw:

抛出异常 手动抛出异常

throws:

异常声明 声明可能要抛出的各种异常

finally:

无论是否发生异常,代码总能执行

异常对象常用的方法:catch小括号里的

方法

void printStackTrace()

输出异常的堆栈信息

String getMessage()

返回异常信息描述字符串,是printStackTrace()输出信息的一部分

常见的异常类型:

try-catch:

把可能出现异常的代码块放入try语句块中,使用catch语句捕获异常

try-catch捕获异常的三种情况:

1.正常:try语句块中的代码没有出现异常:那么catch语句块中的代码不会执行

2.出现异常:try语句块中的代码产生异常对象,并且异常类型匹配,进入catch然后继续执行代码

3.异常类型不匹配:try语句块中的代码产生异常对象,异常类型不匹配,程序中断

.printStackTrace()的堆栈跟踪功能显示出程序运行到当前类的执行流程 ?????

try-catch格式:

try里面放可能出现异常的语句

try{int c = aa/bb;System.out.println(c);}catch (ArithmeticException e){System.out.println("被除数不能为0");}

try-catch-finally:

finally:是否发生异常都执行

不执行的唯一情况,除非程序遇到 System.exit() 调用,这会导致 JVM 终止,finally 块不会被执行。

当try-catch-finally存在return语句时:
  1. 发生异常
  2. 异常类型匹配
  3. 进入catch,先执行return语句之前的代码
  4. 执行finally
  5. 执行return
public void method(){try {// 代码段 1// 产生异常的代码段 2} catch (异常类型 ex) {// 对异常进行处理的代码段return;}finally{// 代码段}
}

注意:

  1. try-catch-finally结构中try语句块是必须的,catch、finally语句块均可选,但两者至少出现之一
  2. try-catch块中存在return语句,是否还执行finally块? 执行,先执行fainlly块再return
  3. try-catch- finally块中, finally块唯一不执行的情况是什么?除非程序遇到 System.exit() 调用,JVM停止

throws声明某个方法可能抛出的各种异常,多个异常用逗号隔开,放在方法名旁边

方式1:调用者处理异常

方式2:调用者继续声明异常

main()方法声明的异常由Java虚拟机处理

throw:自定义异常类

public static int divide(int a, int b) throws DivisionByZeroException {if (b == 0) {// 抛出自定义异常throw new Exception("除数不能为零");}return a / b;
}

throw和throws的区别:

1.作用不同:

  • throw用于程序员自行产生并且抛出异常
  • throws用于声明该方法内抛出异常

2.使用的位置不同:

  • throw位于方法体内部
  • throws必须跟在方法参数列表后,不能单独使用

3.内容不同:

  • throw抛出一个异常对象

上面是throw,抛出一个实际的异常

下面是throws, 用于声明一个方法可能会抛出异常。它放在方法签名中,告知调用者这个方法可能会抛出的异常。

public class Main {public static void main(String[] args) {try {readFile("somefile.txt");} catch (IOException e) {System.out.println("Error reading file: " + e.getMessage());}}public static void readFile(String fileName) throws IOException {// 如果发生文件读取异常,抛出 IOExceptionthrow new IOException("File not found");}
}

异常链:

当你创建一个新的异常时,可以将原始异常作为参数传递给新异常。这样,原始异常会作为“原因”存储在新异常中。

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

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

相关文章

JVM感知docker容器内存资源限制

容器中的java程序无法感知docker的内存资源限制 [rootxm-phy-kvm-113-2 ~]# docker run -m 100MB openjdk:8u131 java -XshowSettings:vm -version VM settings:Max. Heap Size (Estimated): 17.43GErgonomics Machine Class: serverUsing VM: OpenJDK 64-Bit Server VMopenjd…

【Python快速入门和实践016】Python常用脚本-对视频抽取指定帧数并保存

一、功能介绍 这段代码的功能是从一个视频文件中抽取指定数量的帧,并将这些帧保存为图像文件。步骤如下: 设置路径和参数: video_path:视频文件的路径。image_folder:保存抽取图像的目录。num_frames_to_extract&#…

Qt for MCUs: 为嵌入式微控制器(MCU)设计和开发高性能应用程序

Qt for MCUs是一个完整的图形框架和工具包 软件平台 Linux、macOS、Windows 支持的开发语言 C、QML、Python、JavaScript等 开发商 The Qt Company 最近更新时间 2024年3月13日 最新版本 2.7 简介 Qt for MCUs提供了一个轻量级图形框架和工具包,使您能够…

工业相机图像采集卡

什么是图像采集卡? 图像采集卡又称为图像卡,它将相机的图像视频信号,以帧为单位传送到计算机的内存和VGA帧存,供计算机处理,存储,显示和传输等使用。在机器视觉系统中,图像采集卡采集到的图像供…

【C语言】双链表

🦄个人主页:小米里的大麦-CSDN博客 🎏所属专栏:C语言数据结构_小米里的大麦的博客-CSDN博客 🎁代码托管:黄灿灿/数据结构 (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 一、什么是双链表? 二、双链表温习 1. 双链表的结构…

【Django开发】前后端分离django美多商城项目第2篇:展示用户注册页面,1. 创建用户模块子应用【附代码文档】

全套笔记资料代码移步: 前往gitee仓库查看 感兴趣的小伙伴可以自取哦~ 本教程的知识点为: 项目准备 项目准备 配置 1. 修改settings/dev.py 文件中的路径信息 2. INSTALLED_APPS 3. 数据库 用户部分 图片 1. 后端接口设计: 视图原型 2. 具体…

如何诱导AI犯罪-提示词注入

我们用到的大模型基本把政治类信息、犯罪相关信息都已屏蔽。但是,黑客依旧可以使用提示词诱导和提示词注入的方式对大模型进行攻击。 1、提示词诱导 如果直接让AI提供犯罪过程,AI会直接拒绝。虽然AI对于大部分知识了然于心,但因为经过了人工…

javase综合案例3 -- 通讯录

文章目录 一,项目要求基础功能拓展 二,导入jar包 pinyin4j.jar三,程序报下建立Pinyin4j类四,创建实体类Contact五,创建通讯录接口ContactDao六,创建ContactDao接口的视线子类ContactDaoImpl6.1 创建全局的M…

僵尸进程的例子

以下是一个简单的C语言程序示例&#xff0c;该程序将创建一个子进程&#xff0c;然后子进程退出&#xff0c;但是父进程不会调用wait()或waitpid()来回收子进程的状态&#xff0c;从而使得子进程成为僵尸进程。 #include <stdio.h> #include <stdlib.h> #include …

富格林:安全攻略打破黑幕陷阱

富格林指出&#xff0c;防止做单受害最重要的一步是打破黑幕陷阱&#xff0c;如果能够安全识破黑幕并且制定安全策略&#xff0c;便可以有效阻止受害风险。在现货黄金市场上&#xff0c;有各种黑幕的手段&#xff0c;投资者需要不断丰富自己的经验、提升自己&#xff0c;才能有…

【Dash】Dash模块介绍

什么是Dash&#xff1f; Dash 是一个开源的 Python 框架&#xff0c;用于创建基于 Web 的应用程序。它由 Plotly 公司开发&#xff0c;专为数据科学家和分析师设计&#xff0c;以便他们可以构建自定义的数据可视化 Web 应用程序&#xff0c;而无需具备前端开发知识。Dash 提供…

Selenium使用教程-Selenium环境搭建与基础操作

Selenium环境搭建与基础操作 1. 引言&#xff1a;Selenium简介​ Selenium&#xff0c;作为自动化测试领域的明星工具&#xff0c;以其强大的跨浏览器测试能力而闻名。它支持多种编程语言&#xff08;如Java、Python、C#等&#xff09;&#xff0c;允许开发者编写脚本来模拟真…

NGINX项目实战

一、nginx四层代理 部署支持4层TCP/UDP代理的Nginx服务器 部署nginx服务器 编译安装必须要使用--with-stream参数开启4层代理模块。 [rootproxy ~]# rm -rf /usr/local/nginx/ #清理环境 [rootproxy nginx-1.16.1]# ./configure --with-http_ssl_module --with-stream #开…

[算法题]字符串分类

题目链接: 字符串分类 1. 先将每个字符串排序, 用 sort() 即可. 这样即使字母位置不同的字符串在排序后都一样. 2. 将排序后的字符串保存在 set 中, set 能确保相同的字符串只会保存一次. 3. set 的大小就是题解. 题解代码: #include <iostream> #include <set&g…

Oracle特有的DECODE函数

Oracle中的DECODE函数是一种条件表达式函数&#xff0c;用于基于给定的条件从一组值中选择一个值返回。它的基本语法如下&#xff1a; DECODE(expression, search1, result1, [search2, result2, ...], [default])expression&#xff1a;要比较的表达式或列。searchN&#xff…

ios CCUIAlertView.m

// // CCUIAlertView.h // CCFC // //#import <Foundation/Foundation.h>interface UIAlertView(cc)// 显示消息框(UIAlertView *)showAlertView:(NSString *)titlemsg:(NSString *)msg delegate:(id)delegateokBtnTitle:(NSString *)okTitle;#if CC_ENABLE_PRIVATE_AP…

让 stable diffusion 局域网访问:详细解析配置步骤【Stable Diffusion 实战教程】

有不会的&#xff0c;请私信 5分钟 Stable Diffusion 本地安装-本地部署&#xff08;秋叶整合包&#xff09;【Stable Diffusion 实战教程】 https://blog.csdn.net/jybaby/article/details/136796609 排查 stable-diffusion-webui 局域网访问问题&#xff1a;详细解析配置步…

DDPM 核心代码解析(1)

所有代码 已上传至GitHub - duhanyue349/diffusion_model_learned_ddpm_main: 扩散模型基础框架源代码 目录结构如下 在train_cifar.py 中展示了扩散模型训练的所有代码 如果没有安装wandb 可以在create_argparser()设置 log_to_wandbFalse 一、加载模型参数 args 这里用了一…

直播圈不再只讲技术和千川,管理成为新焦点

直播圈不讲技术&#xff0c;也不讲千川啦&#xff0c;开始讲管理啦&#xff0c;感叹直播带货发展真快&#xff0c;都说要傻瓜化&#xff0c;讲的东西一年能迭代 3 个版本&#xff0c;甚至带货线下课不讲半天团队管理你的课都显得low。关键没一个能告诉你管理是什么管什么&#…

Windows查看指定IP的的连接

Windows查看指定IP的的连接 netstat -ano | find "172.40.50.163" ## 替换成所需要的IP如果想统计数量可以使用以下命令 netstat -ano | find "172.40.50.163" | find /c ":"如果想统计指定状态的 可以使用以下命令 netstat -ano | find &quo…