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

Java—异常体系

Java的异常体系是Java语言中用于处理程序运行过程中可能出现的错误的机制。通过异常处理,程序可以在遇到问题时自动反馈,从而避免程序崩溃。Java异常体系中包含两大类:错误(Error)和异常(Exception)。

一、错误(Error)

1.1 概念

错误是指程序在运行时发现的非法操作,例如语法错误、逻辑错误或资源未找到等,会导致程序崩溃,无法继续执行后续代码。错误是由JVM产生和抛出的。

1.2 Error举例

1.2.1 栈溢出错误

public class test {public static void main(String[] args) {run();}public static void run(){run();}
}

运行结果 

二、异常(Exception)

2.1 概念

异常是在程序正常执行过程中由于某个意外条件引发的事件,异常可以由错误引起的,也可以是应用程序中不小心出现的问题。

异常又可分为受检异常(非运行时异常)和非受检异常(运行时异常)。

2.2 受检异常(非运行时异常)

受检异常时程序还未执行是就发现了的异常,从语法角度上是必须处理的异常,如果不解决就无法编译通过。包括ClassNotFoundException、IOException等。

将鼠标移动到forName处,会提示添加异常到方法签名,即代码为

public class test {public static void main(String[] args) {run();}public static void run() throws ClassNotFoundException {Class clazz = Class.forName("com.qcby.util");}
}

2.3 非受检异常(运行时异常)

非受检异常是由程序逻辑产生的异常,编译器检测不到,在运行期间被发现的异常,包括数组越界IndexOutOfBoundsExpection、空指针异常NullPointerExpection等。

数组越界异常

public class test {public static void main(String[] args) {run();}public static void run(){int[] arr = {1,2,3};System.out.println(arr[3]);}
}

运行结果 

注:错误(Error)异常(Exception)有一个共同的父类:Thorwable,Java异常体系整体结构如下:

三、处理异常

Java中处理异常的方式分为两大类:throws(抛出异常)try-catch-finally(解决异常的方式)

3.1 try-catch-finally

3.1.1 try-catch-finally讲解

try-catch-finally:检查异常的代码,不会影响到其他代码的执行

比如在受检异常的例子中我们对forName异常进行了抛出:

抛出后会发现main()中的run()方法也被标红,这是因为run()方法抛出了异常,main()作为run()方法的调用者,也要抛出异常,但是在这里可以使用try-catch环绕进行解决:

public class test {public static void main(String[] args) {try {run();} catch (ClassNotFoundException e) {e.printStackTrace();   //打印异常}}public static void run() throws ClassNotFoundException {Class clazz = Class.forName("com.qcby.util");}
}

try-catch-finally解释:尝试执行try代码块之中的代码,若不能正常执行,则执行catch代码块中的代码,catch代码块之中的代码用于抛出异常,如上述代码为打印出异常。无论代码能否正常执行,finally之中的代码都会执行。

try-catch-finally结构如下(可以有多个catch{}):

try{//可能出现异常的代码块
}catch(ExpectionName1 e){//一旦产生了这个异常应该做的措施
}catch(ExpectionName2 e){//一旦产生了这个异常应该做的措施
}finally{//无论成功还是失败都要执行的代码//一般都是做资源的清除
}

补充:所有的异常的父类都是Expection异常。

因此,多个catch{}可以合并为:

try{//可能出现异常的代码块
}catch(Expection e){//产生异常应该做的措施
}finally{//无论成功还是失败都要执行的代码//一般都是做资源的清除
}

3.1.2 try-catch-finally使用举例

(1)不采用try-catch-finally

public class test {public static void main(String[] args) throws ClassNotFoundException {run();System.out.println("--------------------");}public static void run() throws ClassNotFoundException {int[] arr = {1,2,3};System.out.println(arr[3]);}
}

运行结果

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3at com.qcby.test.test.run(test.java:10)at com.qcby.test.test.main(test.java:5)

(2)采用try-catch-finally

public class test {public static void main(String[] args) {try {run();} catch (ClassNotFoundException e) {e.printStackTrace();}finally {System.out.println("--------------------");}}public static void run() throws ClassNotFoundException {int[] arr = {1,2,3};System.out.println(arr[3]);}
}

运行结果

--------------------
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3at com.qcby.test.test.run(test.java:15)at com.qcby.test.test.main(test.java:6)

try-catch-finally包裹住异常的代码,不会影响其他代码的执行

3.2 throws

throws:不尝试解决异常,将异常抛出,交给有能力解决的方法取解决。

throw关键字:抛出异常,thorw用来自定义异常,提示方法的调用者

3.2.1 相关代码

public class test {public static void main(String[] args) throws Exception {run();System.out.println("--------------------");}public static void run() throws Exception {throw new Exception("这个方法可能存在问题");}
}

3.2.2 运行结果

Exception in thread "main" java.lang.Exception: 这个方法可能存在问题at com.qcby.test.test.run(test.java:9)at com.qcby.test.test.main(test.java:5)

相关文章:

  • 如何开发专业小模型
  • windows触摸板快捷指南
  • 杭电多校10 : 1007 小塔的魔法树
  • 分糖果--思维+while判断
  • CSS- 4.2 相对定位(position: relative)
  • 前端基础之CSS
  • 【001】RenPy打包安卓apk 流程源码级别分析
  • (面试)TCP、UDP协议
  • 手写tomcat:基本功能实现(4)
  • 轻量、优雅、高扩展的事件驱动框架——Hibiscus-Signal
  • Git 版本控制系统入门指南
  • 我的世界模组开发——特征(2)
  • 使用 Vue Tour 封装一个统一的页面引导组件
  • Typescript学习教程,从入门到精通,TypeScript 函数语法知识点及案例代码(5)
  • 六、绘制图片
  • Golang 范型
  • C# WPF .NET Core和.NET5之后引用System.Windows.Forms的解决方案
  • 数据库——SQL约束窗口函数介绍
  • 量化用到的机器学习书籍推荐
  • 广和通L610模块通过AT指令访问服务器方案:嵌赛使用
  • 《风林火山》千呼万唤始出来,戛纳首映后口碑崩盘?
  • 网警打谣:传播涉刘国梁不实信息,2人被处罚
  • 降水较常年同期少五成,安徽四大水利工程调水超11亿方应对旱情
  • 长期吃太饱,身体会发生什么变化?
  • 马上评|中学生被操场地面烫伤,谁的“大课间”?
  • 科普|男性这个器官晚到岗,可能影响生育能力