java代码抛出异常_Java中编写代码出现异常,如何抛出异常,如何捕获异常
异常的产生过程解析
先运行下面的程序,程序会产生一个数组索引越界异常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中编写代码出现异常,如何抛出异常,如何捕获异常相关推荐
- java子类代码块_java中父类子类静态代码块、构造代码块执行顺序
父类静态(代码块,变量赋值二者按顺序执行) 子类静态 父类构造代码块 父类构造方法 子类构造代码块 子类构造方法 普通方法在实列调用的时候执行,肯定位于上面之后了 //父类A public class ...
- 安装jdk配置环境、cmd命令行测试环境变量配置是否正确及运行java程序、安装IDEA编写代码测试
文章目录 1.安装jdk配置环境 2.cmd命令行测试环境变量配置是否正确及运行java程序 3.安装IDEA编写代码测试 1.安装jdk配置环境 首先打开官网Oracle https://www.o ...
- Excel VBA教程–如何使用Visual Basic在电子表格中编写代码
介绍 (Introduction) This is a tutorial about writing code in Excel spreadsheets using Visual Basic for ...
- java如何抛出异常_java中 方法中抛出异常处理方法
展开全部 Java语言提供e69da5e887aa62616964757a686964616f31333366306461两种异常处理机制:捕获异常和声明抛弃异常. 1.捕获异常: (1)在Java程 ...
- Android Studio在xml文件中编写代码时,关键词没有代码提示补全
问题描述: Android Studio在xml文件中编写代码时,无法自动补全 例如在TextView中输入textSize,没有出现任何代码提示 解决方式: File->Project Str ...
- java opencv 平移_Java中使用opencv
Java中使用opencv Java中使用opencv 零.前言 作为图像处理出身,不仅仅要会C++图像处理.matlab图像处理.python图像处理.最起码也得会java图像处理,当然我最终还都用 ...
- java金字塔程序_Java中的金字塔模式程序
java金字塔程序 Pattern programs are used a lot in interviews to understand the logical thinking abilities ...
- code blocks 代码颜色_vuepress中实现代码折叠、高亮
最近在vuepress中撰写UI框架文档时发现在组件中插入演示代码没高亮,虽然在文档markdown中写代码有高亮但就无法实现折叠了,而且vuepress没有提供折叠代码的配置,因此实现一个折叠组件外 ...
- Java 移除重复节点 | 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
移除重复节点 难度简单97 编写代码,移除未排序链表中的重复节点.保留最开始出现的节点. 示例1: 输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3] 示例2: 输入:[1, 1, 1 ...
最新文章
- 数据竞争(data race)问题分析的利器——valgrind的Helgrind
- 大合集!80 篇 CVPR2020 论文分方向整理: 目标检测/图像分割/姿态估计等(附链接&下载)...
- Java语言的基础语法
- 属于服务器端运行的程序_Telerik UI for ASP.NET MVC:为任何设备以两倍的速度构建功能丰富且响应迅速的web应用程序...
- Python使用LDAP做用户认证
- 推荐5个免费项目管理工具
- mysql-nt.exe w3wp.exe cpu 100%_认识w3wp.exe进程,从根本上解决占用资源较大问题
- 《C++ Primer》2.6.1节练习
- CUDA并行计算 | CUDA算法效率提升关键点概述
- ndk-build生成.so
- 使用Docker Swarm来运行服务
- substance Pt 工业基础配色及金属配色ID材质
- 我和谷歌共同成长----Andriod(安卓)开发(持续更新)
- css pseudo elements,css伪元素(Pseudo-elements)各种使用类型
- 手机短信直接跳转到微信关注公众号或者添加好友的方案
- Simulink自动代码生成5——控制函数原型(control function prototype)
- Kappa(cappa)系数只需要看这一篇就够了,算法到python实现
- 机械臂matlab运动学仿真,matlab建立机械臂运动学仿真
- 【突然断电后电脑无法开机】
- JS 实现别踩白块功能
热门文章
- emlog模板开发基础2022最新指南
- perl oracle ppm,perl – 为什么没有找到ppm:命令?
- 提供 Android 酷炫的开屏动画 (awesome-opening-animation)
- C# .NET实现扫描识别图片中的文字
- [gitHub使用笔记一]ubuntu下快速访问github官网的方法
- MFC软件欢迎界面(基于对话框,VS2013)
- 电子游戏设计与制作 第一章 计算机游戏概述
- 计算机屏保后无法进入登录界面,Win10锁屏界面无法登录卡在登录状态的应对办法...
- 我的世界服务器登录显示motd,[信息]ColorMOTD —— 究极Motd插件,外带反压测[1.7-1.8]...
- uniapp editor富文本编辑器,h5富文本编辑器封装成插件