异常
来源:互联网 发布:网络推广博客方案 编辑:程序博客网 时间:2024/06/05 06:49
error:由系统底层发生,修改代码
exception:告诉jvm,jvm告诉使用者
举一个简单的例子
Int[] a=new Int[10];
System.out.println("a[10]");
输出语句发生问题时,jvm就将这个已知的问题封装成对象 throw new ArrayIndexOutOfBoundsException(1);将问题抛给调用者main函数,如果main函数没有针对的处理方法,main函数就继续抛给调用者jvm,jvm会终止程序,jvm就使用了默认的处理方法,将问题的名称+信息+位置在控制台上显示出来,让调用者看到
e.printStackTrace();名字+信息+位置 jvm默认的处理,收到异常就是调用这个方法,将信息显示到屏幕上。
异常的处理:
1.遇到问题不进行具体的处理,而是继续抛给调用者,其实就是在函数上通过throws关键字声明异常,告诉调用者。
2.针对性的处理方法,捕获。
try{
有可能异常的代码
}catch(异常变量){
捕获,处理异常的代码
}finally{
一定会被执行的代码
}
throw和throws有什么区别?
1.位置不同
throws用在函数上,后面跟着的是异常类,可以跟多个
throw用在函数内,后面跟的是一场对象
2.功能不同
throws用来声明异常,让调用者只知道该功能可能出现的问题,并由调用者给出预先的处理方法
throw抛出具体的问题对象,执行到throw,功能就已经结束了,就跳转到调用者,并将具体的问题对象也抛给调用者。也就是throw语句独立存在时,下面不要定义其他语句,执行不到。
3.执行时期不同
throws编译时期
throw运行时期
finally
finally块用于回收再try块里打开的物理资源,异常机制会保证finally总被执行
当catch中遇到return时。finally还是会被执行
除非在try块、catch块中使用了system.exit(0);退出ivm,只有这种情况下finally不会执行
尽量避免在finally块中使用return或throw等导致方法终止的语句,否则会出现一些很奇怪的现象
当程序在try,catch中一到return或throw语句(该语句都会导致方法立即结束),系统执行这两个语句并不会结束该方法,而是会去寻找该异常处理流程中是否包含finally块。
如果没有finally块,程序立即执行return或throw语句,方法终止。
如果有finally块,系统立即执行finally块,只有当finally块执行完成后,系统才会调回来执行try,catch块中的return或throw语句。如果finally有return或throw语句,finally已经终止了方法,系统不会再跳回去执行try,catch块中的任何代码
为了保证try语句可以自动关闭资源,这些资源实现类必须实现AutoCloseable或Closeable接口,实现这两个接口就必须实现close()方法
自动关闭资源的try语句相当于包含了隐式的finally块(这个finally块用于关闭资源),此时try语句中既没有catch也没有finally
- 异常
- 异常!
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- Linux常用yum命令—安装、升级、卸载、软件包查询、软件组管理命令、以及升级、卸载需要注意的问题
- HDU 1042 N!
- 实例详解贝叶斯推理的原理
- 《碟中谍5》中惊鸿一瞥的步态识别技术,究其神在哪里?
- 2017hdu沈阳网络赛补题triangulation
- 异常
- Activiti工作流开发——工作流简介
- 成员变量、局部变量和静态变量
- TCP三次握手四次挥手
- 输入一个递增的数组和一个数字s,找出数组中任意两个数使他们的和正好是这个数字s,如果有任意多对数字的和为s,输出任意一堆数字即可,例如,输入数组[1,2,4,7,11,15]和数字
- 【读书笔记】《程序员修炼之道》前言+第一章
- 前端JavaScript学习(一)(call、apply、bind)
- UVA
- Elasticsearch权威指南-学习笔记