异常的产生过程解析

先运行下面的程序,程序会产生一个数组索引越界异常ArrayIndexOfBoundsException。我们通过图解来解析下异常产生的过程。

工具类

classArrayTools{//对给定的数组通过给定的角标获取元素。

public static int getElement(int[] arr,intindex) {int element =arr[index];returnelement;

}

}

测试类

classExceptionDemo2 {public static voidmain(String[] args) {int[] arr = {34,12,67};int num = ArrayTools.getElement(arr,4)

System.out.println("num="+num);

System.out.println("over");

}

}

上述代码执行过程图解:

抛出异常throw

在java中,提供了一个throw关键字,它用来抛出一个指定的异常对象。

1,创建一个异常对象。封装一些提示信息。

2,需要将这个异常对象告知给调用者。throw 异常对象;

throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。

//使用格式:

throw new异常类名(参数);//例如:

throw new NullPointerException("要访问的arr数组不存在");throw new ArrayIndexOutOfBoundsException("该索引在数组中不存在,已超出范围");

声明异常throws

声明:将问题标识出来,报告给调用者。如果方法内通过throw抛出了编译时异常,而没有捕获处理(稍后讲解该方式),那么必须通过throws进行声明,让调用者去处理。

声明异常格式:

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

声明异常的代码演示:

classDemo{/*如果定义功能时有问题发生需要报告给调用者。可以通过在方法上使用throws关键字进行声明。*/

public void show(int x)throwsException {if(x>0){throw newException();

}else{

System.out.println("show run");

}

}

}classDemo{/*如果定义功能时有问题发生需要报告给调用者。可以通过在方法上使用throws关键字进行声明。*/

public void show(int x)throwsException {if(x>0){throw newException();

}else{

System.out.println("show run");

}

}

}

throws用于进行异常类的声明,若该方法可能有多种异常情况产生,那么在throws后面可以写多个异常类,用逗号隔开。

//多个异常的情况,例如:

public static int getElement(int[] arr,int index) throwsNullPointerException, ArrayIndexOutOfBoundsException {if(arr==null){throw new NullPointerException("arr指向的数组不存在");

}if(index<0 || index>=arr.length){throw new ArrayIndexOutOfBoundsException("错误的角标,"+index+"索引在数组中不存在");

}int element =arr[index];returnelement;

}

捕获异常try…catch…finally

捕获:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理

捕获异常格式:

try{//需要被检测的语句。

}catch(异常类 变量) { //参数。//异常的处理语句。

}finally{//一定会被执行的语句。

}

try:该代码块中编写可能产生异常的代码。

catch:用来进行某种异常的捕获,实现对捕获到的异常进行处理。

finally:有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的,在finally代码块中存放的代码都是一定会被执行的。

classExceptionDemo{public static void main(String[] args){ //throws ArrayIndexOutOfBoundsException

try{int[] arr = new int[3];

System.out.println( arr[5] );//会抛出ArrayIndexOutOfBoundsException

当产生异常时,必须有处理方式。要么捕获,要么声明。

}catch (ArrayIndexOutOfBoundsException e) { //括号中需要定义什么呢?try中抛出的是什么异常,在括号中就定义什么异常类型。

System.out.println("异常发生了");

}finally{

arr= null; //把数组指向null,通过垃圾回收器,进行内存垃圾的清除

}

System.out.println("程序运行结果");

}

}

try…catch…finally异常处理的组合方式

try catch finally组合:检测异常,并传递给catch处理,并在finally中进行资源释放。

try catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对异常进行捕获处理。

void show(){ //不用throws

try{throw new Exception();//产生异常,直接捕获处理

}catch(Exception e){//处理方式

}

}

一个try 多个catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对每种异常信息进行不同的捕获处理。

void show(){ //不用throws

try{throw new Exception();//产生异常,直接捕获处理

}catch(XxxException e){//处理方式

}catch(YyyException e){//处理方式

}catch(ZzzException e){//处理方式

}

}

注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。

try finally 组合: 对代码进行异常检测,检测到异常后因为没有catch,所以一样会被默认jvm抛出。异常是没有捕获处理的。但是功能所开启资源需要进行关闭,所有finally。只为关闭资源。

void show(){//需要throws

try{throw newException();

}finally{//释放资源

}

}

java代码抛出异常_Java中编写代码出现异常,如何抛出异常,如何捕获异常相关推荐

  1. java子类代码块_java中父类子类静态代码块、构造代码块执行顺序

    父类静态(代码块,变量赋值二者按顺序执行) 子类静态 父类构造代码块 父类构造方法 子类构造代码块 子类构造方法 普通方法在实列调用的时候执行,肯定位于上面之后了 //父类A public class ...

  2. 安装jdk配置环境、cmd命令行测试环境变量配置是否正确及运行java程序、安装IDEA编写代码测试

    文章目录 1.安装jdk配置环境 2.cmd命令行测试环境变量配置是否正确及运行java程序 3.安装IDEA编写代码测试 1.安装jdk配置环境 首先打开官网Oracle https://www.o ...

  3. Excel VBA教程–如何使用Visual Basic在电子表格中编写代码

    介绍 (Introduction) This is a tutorial about writing code in Excel spreadsheets using Visual Basic for ...

  4. java如何抛出异常_java中 方法中抛出异常处理方法

    展开全部 Java语言提供e69da5e887aa62616964757a686964616f31333366306461两种异常处理机制:捕获异常和声明抛弃异常. 1.捕获异常: (1)在Java程 ...

  5. Android Studio在xml文件中编写代码时,关键词没有代码提示补全

    问题描述: Android Studio在xml文件中编写代码时,无法自动补全 例如在TextView中输入textSize,没有出现任何代码提示 解决方式: File->Project Str ...

  6. java opencv 平移_Java中使用opencv

    Java中使用opencv Java中使用opencv 零.前言 作为图像处理出身,不仅仅要会C++图像处理.matlab图像处理.python图像处理.最起码也得会java图像处理,当然我最终还都用 ...

  7. java金字塔程序_Java中的金字塔模式程序

    java金字塔程序 Pattern programs are used a lot in interviews to understand the logical thinking abilities ...

  8. code blocks 代码颜色_vuepress中实现代码折叠、高亮

    最近在vuepress中撰写UI框架文档时发现在组件中插入演示代码没高亮,虽然在文档markdown中写代码有高亮但就无法实现折叠了,而且vuepress没有提供折叠代码的配置,因此实现一个折叠组件外 ...

  9. Java 移除重复节点 | 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。

    移除重复节点 难度简单97 编写代码,移除未排序链表中的重复节点.保留最开始出现的节点. 示例1: 输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3] 示例2: 输入:[1, 1, 1 ...

最新文章

  1. 数据竞争(data race)问题分析的利器——valgrind的Helgrind
  2. 大合集!80 篇 CVPR2020 论文分方向整理: 目标检测/图像分割/姿态估计等(附链接&下载)...
  3. Java语言的基础语法
  4. 属于服务器端运行的程序_Telerik UI for ASP.NET MVC:为任何设备以两倍的速度构建功能丰富且响应迅速的web应用程序...
  5. Python使用LDAP做用户认证
  6. 推荐5个免费项目管理工具
  7. mysql-nt.exe w3wp.exe cpu 100%_认识w3wp.exe进程,从根本上解决占用资源较大问题
  8. 《C++ Primer》2.6.1节练习
  9. CUDA并行计算 | CUDA算法效率提升关键点概述
  10. ndk-build生成.so
  11. 使用Docker Swarm来运行服务
  12. substance Pt 工业基础配色及金属配色ID材质
  13. 我和谷歌共同成长----Andriod(安卓)开发(持续更新)
  14. css pseudo elements,css伪元素(Pseudo-elements)各种使用类型
  15. 手机短信直接跳转到微信关注公众号或者添加好友的方案
  16. Simulink自动代码生成5——控制函数原型(control function prototype)
  17. Kappa(cappa)系数只需要看这一篇就够了,算法到python实现
  18. 机械臂matlab运动学仿真,matlab建立机械臂运动学仿真
  19. 【突然断电后电脑无法开机】
  20. JS 实现别踩白块功能

热门文章

  1. emlog模板开发基础2022最新指南
  2. perl oracle ppm,perl – 为什么没有找到ppm:命令?
  3. 提供 Android 酷炫的开屏动画 (awesome-opening-animation)
  4. C# .NET实现扫描识别图片中的文字
  5. [gitHub使用笔记一]ubuntu下快速访问github官网的方法
  6. MFC软件欢迎界面(基于对话框,VS2013)
  7. 电子游戏设计与制作 第一章 计算机游戏概述
  8. 计算机屏保后无法进入登录界面,Win10锁屏界面无法登录卡在登录状态的应对办法...
  9. 我的世界服务器登录显示motd,[信息]ColorMOTD —— 究极Motd插件,外带反压测[1.7-1.8]...
  10. uniapp editor富文本编辑器,h5富文本编辑器封装成插件