Java SE入门及基础(39)

目录

异常处理

1. 如何处理异常

2. throw 抛出异常

语法

示例

3. throws 声明可能抛出的异常类型

语法

示例

4. try-catch 捕获异常

语法

示例

思考:如果一个方法可能抛出多个异常,如何捕获?

示例

5. finally 语句

语法

示例

面试题

Java SE文章参考:Java SE入门及基础知识合集-CSDN博客


异常处理

1. 如何处理异常

        在Java 中,异常的种类很多,如果每一种异常类型我们都需要去记住,这无疑是一件很困难的事。如果能够有一套机制来处理异常,那么将减少程序员在开发时的耗时。Java 就提供了一套异常处理机制来出来异常。Java 处理异常使用了 5 个关键字: throw throws try catch finally

2. throw 抛出异常

        throw关键字只能在方法内部使用, throw 关键字抛出异常表示自身并未对异常进行处理。
语法
throw 异常对象 ;     // 通常与 if 选择结构配合使用
示例
package com . we . exception ;
import java . util . Scanner ;
public class Example1 {
        private static Scanner sc = new Scanner ( System . in );
        public static void main ( String [] args ) {
                calculate ();
        }
        public static void calculate (){
                System . out . println ( " 请输入一个数字: " );
                int number1 = sc . nextInt ();
                System . out . println ( " 请再输入一个数字: " );
                int number2 = sc . nextInt ();
                if ( number2 == 0 ){
                        ArithmeticException e = new ArithmeticException ( " 在除法运算中除数不能为零" );
                        throw e ;
                }
        int result = number1 / number2 ;
        System . out . println ( result ); // 该行代码不能够被执行
        }
}

3. throws 声明可能抛出的异常类型

        throws关键字只能应用在 方法或者构造方法的定义上 对可能抛出的异常类型进行声明,自身不会对异常做出处理,由方法的调用者来处理。如果方法的调用者未处理,则异常将持续向上一级调用者抛出,直至main() 方法为止,如果 main() 方法也未处理,那么程序可能因此终止
语法
访问修饰符 返回值类型 方法名 ( 参数列表 ) throws 异常类型 1 , 异常类型 2 ,... 异常类型 n {
}
示例
package com .we . exception ;
import java . util . InputMismatchException ;
import java . util . Scanner ;
public class Example2 {
        private static Scanner sc = new Scanner ( System . in );
        public static void main ( String [] args ) {
                int result = devided ();
                System . out . println ( result );
        }
        public static int devided () throws InputMismatchException , ArithmeticException {
                int number1 = getNumber ();
                int number2 = getNumber ();
                return number1 / number2 ;
        }
        /**
        *
        * @return
        * @throws InputMismatchException 执行该方法时可能会抛出 InputMismatchException        
        */
        public static int getNumber () throws InputMismatchException {
                System . out . println ( " 请输入一个数字: " );
                int number = sc . nextInt ();
                return number ;
        }
}
        throws 可以声明方法执行时可能抛出的异常类型,但需要注意的是:方法执行过程中只能抛出声明的异常类型的其中一个异常。

4. try-catch 捕获异常

        throw 和 throws 关键字均没有对异常进行处理,这可能会导致程序终止。在这种情况下,可以使用 try&catch结构来对抛出异常进行捕获处理,从而保证程序能够正常运行。
语法
try {
        //代码块
} catch ( 异常类型 异常对象名 ){
}
        其中try 表示尝试的意思,尝试执行 try 结构中的代码块,如果执行过程中抛出了异常,则交给 catch 语句块进行捕获操作
示例
package com .we . exception ;
import java . util . InputMismatchException ;
import java . util . Scanner ;
public class Example3 {
        private static Scanner sc = new Scanner ( System . in );
        public static void main ( String [] args ) {
                try {
                        int number = getNumber ();
                        System . out . println ( number );
                } catch ( InputMismatchException e ){
                        e . printStackTrace (); // 打印异常轨迹
                        System . out . println ( e . getClass (). getName ());
                        System . out . println ( " 异常信息: " + e . getMessage ());
                        System . out . println ( " 请不要瞎搞,只能数数字 " );
                }
        System . out . println ( " 发生异常也会执行 " );
}
        /**
        *
        * @return
        * @throws InputMismatchException 执行该方法时可能会抛出InputMismatchException
        */
        public static int getNumber () throws InputMismatchException {
                System . out . println ( " 请输入一个数字: " );
                int number = sc . nextInt ();
                return number ;
        }
}
思考:如果一个方法可能抛出多个异常,如何捕获?
        多以在try 后面添加多个 catch 子句来分别对每一种异常进行处理。
示例
package com . we . exception ;
import java . util . InputMismatchException ;
import java . util . Scanner ;
public class Example3 {
        private static Scanner sc = new Scanner ( System . in );
        public static void main ( String [] args ) {
                int result = devided ();
                System . out . println ( result );
        }
        public static int devided () {
                try {
                        int number1 = getNumber ();
                        int number2 = getNumber ();
                        return number1 / number2 ;
                } catch ( InputMismatchException e ){
                        System . out . println ( " 请不要瞎搞,只能数数字 " );
                        return - 1 ;
                } catch ( ArithmeticException e ){
                        System . out . println ( " 在除法运算中除数不能为零 " );
                        return - 2 ;
                }
        }
        /**
        *
        * @return
        * @throws InputMismatchException 执行该方法时可能会抛出 InputMismatchException
        */
        public static int getNumber () throws InputMismatchException {
                System . out . println ( " 请输入一个数字: " );
                int number = sc . nextInt ();
                return number ;
        }
}
        当使用多个catch 子句捕获异常时,如果捕获的多个异常对象的数据类型具有继承关系,那么父类异常 不能放在前面。

5. finally 语句

        finally 语句不能单独使用,必须与 try 语句或者 try-catch 结构配合使用,表示无论程序是否发生异常都会执行,主要用于释放资源。但 如果在 try 语句或者 catch 语句中存在系统退出的代码,则 finally 句将得不到执行。
System . exit ( 0 ); // 系统正常退出    0- 正常退出   非 0- 异常退出
System . exit ( 1 ); // 系统异常退出
语法
try {
} finally {
}
// 或者
try {
} catch ( 异常类型 异常对象名 ){
} finally {
}
示例
package com . we . exception ;
public class Example4 {
        private static int [] numbers = { 1 , 2 , 3 , 4 , 5 };
        public static void main ( String [] args ) {
                try {
                        int number = getNumberFromArray ( 5 );
                        System . out . println ( number );
                } catch ( ArrayIndexOutOfBoundsException e ){
                        System . out . println ( " 数组下标越界了 " );
                        System . exit ( 0 );
                } finally {
                        System . out . println ( " 需要执行的代码 " );
                }
        }
        public static int getNumberFromArray ( int index ){
                return numbers [ index ];
        }
}

面试题

分析如下代码的执行结果:
public class Example5 {
        public static void main ( String [] args ) {
                int result = getResult ();
                System . out . println ( result );
        }
        public static int getResult (){
                int number = 10 ;
                try { // 尝试执行
                //返回值 => 尝试返回一个结果,但发现后面还有 finally 模块,而 finally 模块一定会得到执行。于是在这里只能将
                //返回值使用一个临时变量( 例如变量 a) 存储起来。然后再执行 finally 模块,finally模块执行完之后,再将这个临时
                //变量(a) 存储的值返回
                        return number ;
                } catch ( Exception e ){
                        return 1 ;
                } finally {
                        number ++ ;
                }
        }
}

Java SE文章参考:Java SE入门及基础知识合集-CSDN博客

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

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

相关文章

使用 pg_profile 在 Postgres 中生成性能分析报告

前言: postgres数据库中拥有大量的辅助插件用于帮助DBA更好的分析数据库性能或整个集群,包括索引、I/O、CPU和内存等,pg_profile是基于PostgreSQL标准统计信息视图的诊断工具,它类似于Oracle AWR架构,和Oracle一样&am…

threejs简单创建一个几何体(一)

1.下包引入 //下包 npm install three yarn add three//引入 import * as THREE from three2.创建场景,摄像机 // 1.创建场景const scene new THREE.Scene()// 2.创建摄像机//第一个参数是视角,一般在60-90之间,第二个参数是场景的尺寸,一般取显示器的宽高,第三个参数是开始位…

下载chromedrive,使用自动化

1、先看一下自己浏览器的版本 2、访问 https://googlechromelabs.github.io/chrome-for-testing/

Avalonia之ListBox模版设置

最近在使用Avalonia进行开发的时候发现好多用法还是和Wpf有很大的区别,尤其是在WPF使用习惯了Style.Triggs时候,好多之前的想法和方案需要进行转变。Avalonia的样式控制更倾向于Html里面的样式控制。今天将自己在移植过程中的过程做一个记录,方便后续查漏补缺: <UserCon…

通信信号IQ数据处理

在当今的数字通信领域&#xff0c;IQ信号数据的处理、信号识别以及数据解析是确保信息准确传输和接收的关键环节。IQ信号&#xff0c;即正交幅度调制信号&#xff0c;包含了载波信号的幅度和相位信息&#xff0c;是现代无线通信系统中不可或缺的一部分。本文将深入探讨IQ信号数…

射影几何 -- 摄像机几何 1

三维计算机视觉的主要任务是利用三维物体的二维图像所包含的信息&#xff0c;获取三维物体的空间位置与形状等几何信息&#xff0c;并在此基础上识别三维物体。 摄像机关于空间平面的投影是平面到平面的一个二维中心投影变换 对于空间物体&#xff0c;由于摄像机将三维物体表面…

单例模式( Singleton)——创建型模式

单例模式——创建型模式 什么是单例模式&#xff1f; 单例模式是一种创建型设计模式&#xff0c; 让你能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。简单来说如果你创建了一个对象&#xff0c; 过一会儿后你决定再创建一个新对象&#xff0c; 此…

中国京津冀太阳能光伏推进大会暨展览会

能源是国民经济发展的重要基础之一。随着国民经济的发展&#xff0c;能源的缺口增大&#xff0c;能源安全及能源在国民经济中的地位越显突出。我国是世界上少数几个能源结构以煤为INVITATION主的国家之一&#xff0c;也是世界上最大的煤炭消费国&#xff0c;燃煤造成的环境污染…

Linux操作系统——常见指令(1)

今天分享一下Linux操作系统常见一些指令。今天介绍 ls pwd cd touch mkdir rmdir rm这几个指令。 ls指令 语法 ls 选项 目录或者文件 功能 对于目录&#xff0c;该命令列出该目录下的所有子目录和文件&#xff0c;对于文件&#xff0c;将列出文件名以及其他信息。 我们常用…

【单调栈】代码随想录算法训练营第六十天 |84.柱状图中最大的矩形(待补充)

84.柱状图中最大的矩形 1、题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱…

24计算机考研调剂 | 长江大学石油工程学院

长江大学石油工程学院接收调剂研究生 考研调剂招生信息 学校:长江大学 专业:工学->石油与天然气工程->油气田开发工程 年级:2024 招生人数:2 招生状态:正在招生中 联系方式:********* (为保护个人隐私,联系方式仅限APP查看) 补充内容 长江大学武汉校区石油工程学…

20240314-前缀和

基本推导公式 因此得出二维前缀和预处理公式 s[i][j] s[i - 1][j] s[i][j - 1 ] a[i] [j] - s[i - 1][j - 1] 因此二维前缀和的结论为&#xff1a; 以(x1, y1)为左上角&#xff0c;(x2, y2)为右下角的子矩阵的和为&#xff1a; s[x2, y2] - s[x1 - 1, y2] - s[x2, y1 - 1]…

将SQL数据库转换为Mysql数据库

一、准备工作 1、SQL server安装包与已经有数据的mdf、ldf数据库文件&#xff1b; 2、.net Framework安装包&#xff1b;&#xff08;用于支持SQL Server安装的组件&#xff09; 3、MySql安装包&#xff1b;&#xff08;用于目标数据库的环境安装&#xff09; 4、navicat安装包…

基于SpringBoot的“家乡特色推荐系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“家乡特色推荐系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 用户注册界面图 文章分享界面…

WeiPHP Notice/index接口处存在RCE漏洞

产品介绍 WeiPHP是一款基于PHP开发的开源微信公众号开发框架。它提供了丰富的功能和易于使用的接口&#xff0c;使开发者能够快速构建和管理微信公众号应用。WeiPHP支持自定义菜单、消息管理、用户管理、素材管理、支付接口等功能&#xff0c;同时还提供了插件机制和模块化开发…

【DL经典回顾】激活函数大汇总(八)(Maxout Softmin附代码和详细公式)

激活函数大汇总&#xff08;八&#xff09;&#xff08;Maxout & Softmin附代码和详细公式&#xff09; 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里&#xff0c;激活函数扮演着不…

学生时期学习资源同步-1 第一学期结业考试题4

原创作者&#xff1a;田超凡&#xff08;程序员田宝宝&#xff09; 版权所有&#xff0c;引用请注明原作者&#xff0c;严禁复制转载

人工智能入门之旅:从基础知识到实战应用(一)

一、引言 人工智能(Artificial Intelligence,AI)是指利用计算机科学和技术模拟、延伸和扩展人类智能的理论、方法、技术和应用系统的学科。它的目标是使计算机系统具有类似于人类的智能,能够感知环境、学习、推理、规划、解决问题和交流。 在当今社会中,人工智能具有极其…

PBKDF2算法:保障密码安全的利器

title: PBKDF2算法&#xff1a;保障密码安全的利器 date: 2024/3/14 16:40:05 updated: 2024/3/14 16:40:05 tags: PBKDF2算法密码安全性迭代盐值密钥 PBKDF2算法起源&#xff1a; PBKDF2&#xff08;Password-Based Key Derivation Function 2&#xff09;算法是一种基于密码…

如何理解闭包

闭包是编程语言中一个重要的概念&#xff0c;特别是在函数式编程中常常会遇到。以下是对闭包的理解&#xff1a; 1. 定义&#xff1a; 闭包是一种函数&#xff0c;它引用了在其定义范围之外的自由变量&#xff08;非全局变量&#xff09;&#xff0c;并且这些引用的变量在函数…