Java异常情况了解

news/2024/11/7 12:32:28/

作者:爱塔居的博客_CSDN博客-JavaSE,数据结构领域博主

专栏:JavaSE

作者介绍:大三学生,希望一起进步~

文章目录

目录

文章目录

一、异常结构体系

二、异常分类

三、异常处理

 3.1异常抛出

3.2 异常捕获

四.【面试题】

五、题目练习


一、异常结构体系

在Java中,将程序执行过程中发生的不正常行为称为异常。

 Error:Java虚拟机无法解决的严重问题,比如JVM的内部错误、资源耗尽。

 Exception:程序员可以通过代码处理的问题。

🎂简单来说,Error没得救,Exception有救。

二、异常分类

异常分为两种:

1.编译时异常(受检查异常):编译器要求强制处理

2.运行时异常(非受检查异常):编译器不要求强制处理异常

RunTimeException以及其子类对应的异常,都称为运行时异常。

 

🍓我们要注意,编译时出现的语法性错误不能成为异常,比如将System.out.println拼写成system.out.println,属于“编译器”出错,不是异常。

三、异常处理

在Java应用程序中,异常处理机制为:抛出异常、捕捉异常。

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

 

 3.1异常抛出

在Java中,可以借助throw关键字,抛出一个指定的异常对象,将错误信息告知给调用者。

public class test {public static int getElement(int[]array,int index){if(null==array){throw new NullPointerException("传递的数组为null");}if(index< 0||index>=array.length){throw new ArrayIndexOutOfBoundsException("传递的数组下标越界");}return array[index];}public static void main(String[]args){// int[]array={1,2,3};//①//getElement(array,3);//①int[]array=null;//②getElement(array,3);//②}
}

 第一种情况抛出异常:

 第二种情况抛出异常:

 

注意点:

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

3.2 异常捕获

🍡try-catch-finally

正常情况下, finall代码是一定会被执行到的:

 🍨throws

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

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

【注意事项】
1. throws必须跟在方法的参数列表之后
2. 声明的异常必须是 Exception 或者 Exception 的子类
3. 方法内部如果抛出了多个异常,throws之后必须跟多个异常类型,之间用逗号隔开,如果抛出多个异常类型具有父子关系,直接声明父类即可。
问题:既然 finally 和 try-catch-finally 后的代码都会执行,那为什么还要有finally呢?
finally中的代码一定会执行的,一般在finally中进行一些资源清理的扫尾工作


四.【面试题】


1. throw 和 throws 的区别?

①throw用于方法内部,throws用于方法声明上

②throw后跟异常对象,throws后跟异常类型

③throw后只能跟一个异常对象,throws后可以一次声明多种异常类型

2. finally中的语句一定会执行吗?

当发生代码流程并未进入try语句块、使用了 System.exit(int) 退出程序、程序所在的线程死亡、其它非正常退出等4种情况时,不会执行finally的语句。

五、题目练习

1.关于Java的异常处理机制的叙述哪些正确?

A.如果程序发生错误及捕捉到异常情况了,才会执行finally部分

B.其他选项都不正确

C.当try区段的程序发生异常且被catch捕捉到时,才会执行catch区段的程序

D.catch部分捕捉到异常情况时,才会执行finally部分

解析:正常情况都会执行finally部分。try发生异常,被catch捕捉到才会执行catch程序

2.在异常处理中,如释放资源,关闭数据库、关闭文件应由( )语句来完成。

A.try子句

B.catch子句

C.finally子句

D.throw子句

 解析:finally进行一些资源清理的扫尾工作

 3.下面有关JAVA异常类的描述,说法错误的是?

A. 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception

B.非RuntimeException一般是外部错误(非Error),其必须被 try{}catch语句块所捕获

C. Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉

D.RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获

 解析:RuntimeException可以不被try{}catch语句块捕获


http://www.ppmy.cn/news/11494.html

相关文章

4509. 归一化处理

Powered by:NEFU AB-IN Link 文章目录4509. 归一化处理题意思路代码4509. 归一化处理 题意 第26次CCF计算机软件能力认证 在机器学习中&#xff0c;对数据进行归一化处理是一种常用的技术。 将数据从各种各样分布调整为平均值为 0、方差为 1 的标准分布&#xff0c;在很多情况…

前端笔试选择题——day3

前端笔试选择题——day3 输出什么 const obj {a:one, b:two, c:three} console.log(obj) // {a:"three", b:"two"}解析&#xff1a; 如果对象有两个具有相同名称的键&#xff0c;则将替换原有的值 将会发生什么 let config {alert:setInterval(() > {…

Linux-终端命令行

终端(Terminal)命令行仅仅是一个工具&#xff0c;对于命令有许多&#xff0c;而且随着嵌入式领域不断开发&#xff0c;命令会越来越多&#xff0c;我们只需要去了解常用的即可。 对于创建或删除一个文件夹&#xff0c;清理终端&#xff0c;下载文件等等都可以在终端命令行输入…

二叉平衡树之AVL树【手动实现代码】

目录 1、AVL树的概念 2、AVL树定义节点 3、AVL树的插入 4、AVL树的旋转 4.1、新节点插入较高左子树的左侧——右单旋 4.2、新节点插入较高右子树的右侧——左单旋 4.3、新节点插入较高左子树的右侧——左右双旋 4.4、新节点插入较高右子树的左侧——右左双旋 5、AVL树…

计算最大公约数和最小公倍数被Java程序员用代码写出来啦

沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 一、前言 嘿&#xff0c;怎么突然讲到最大公约数了&#xff1f; 这么想你肯定是没有好好阅读前面章节中讲到的RSA算法&#xff0c;对于与欧拉结果计算的互为质数的公钥e&#xff0c;其实就需…

为ABP新增手机验证模块

当前手机验证基本是标配&#xff0c;但Abp自身并没有实现这个功能&#xff0c;于是有了通过自定义模块实现的想法。 经过研究&#xff0c;发现要实现这个&#xff0c;只要重写和替换包含ReplaceEmailToUsernameOfInputIfNeeds方法的类就可以了。但要实现这个&#xff0c;首先要…

【BZOJ4916】神犇与蒟蒻

题目大意 很久很久以前&#xff0c;有一只神犇叫yzy; 很久很久之后&#xff0c;有一只蒟蒻叫lty; 输入一个整数nnn&#xff0c;1≤n≤1091\leq n\leq 10^91≤n≤109 请你输出一个整数A∑i1nμ(i2)A\sum\limits_{i1}^n\mu(i^2)Ai1∑n​μ(i2) 请你输出一个整数B∑i1nϕ(i2)B\s…

CentOS7下Nginx安装

安装nginx的基本环境部署 1、gcc、 gcc-c 是用来编译下载下来的nginx源码 2、pcre和pcre-devel PCRE(Perl Compatible Regular Expressions) 是一个Perl库&#xff0c;包括 perl 兼容的正则表达式库。 nginx 的 http 模块使用 pcre 来解析正则表达式&#xff0c;pcre-devel 是…