Throwable(所有error和exception的父类:超类)

Java将错误变成对象交给异常处理机制

Error(仅靠程序本身无法恢复的严重错误)

一般是环境的问题,JVM的问题,并非程序的问题;最典型的就是虚拟机中运行的程序过多,造成的虚拟机内存溢出,虚拟机错误,还有系统崩溃之类的,应用程序是无法处理此类错误的。Error不在我们调试代码可以处理的范围中。

AWTError

ThreadDeath

...  ...

Exception(由java应用程序抛出和处理的非严重型错误)

Checked异常(检查时异常),程序必须处理的异常(代码调用,调用方声明有风险)

SQLException

ClassNotFoundException

......

例如文件调用:I/O 有可能找不到的风险

对于以上的文件读取可能发生的异常我们有两种处理方式:

1.    抛出,继续往上抛

2.    现场处理这个异常

运行时异常,不要求程序必须对它们做出处理(运行时才能抛出异常)

RuntimeException(运行时错误)

NullPointerException

对象没有被初始化生成的

NumberFormatException

ArrayIndexOutOfBoundsException

数组越界错误

......

ArithmeticExecption

数学异常(类似除零错误):

Java中的异常处理是通过5个关键字来实现的:

捕获

try: 执行可能产生异常的代码

Catch: 异常捕获

Finally: 无论是否发生异常总能执行的代码

抛出

Throw: 手动抛出异常

Throws: 声明方法可能要抛出的各种异常

使用try、catch、finally的三种情况:

1.程序正常运行(不经过catch):

2.程序发生异常,经过catch且异常匹配:

3.程序发生异常,但是不能被catch和catch的不匹配:

如果出现不能被catch那么程序就会报错,将异常往上抛,抛给JVM。

上面讲的是一段代码只有一种异常的最简单的情况;更多的时候一段代码不止一种异常:

这里的try中有多行代码,可能出现的异常有多种:数学异常,String字符串的空指针异常,在try中如果出现了异常时,会在catch中寻找对应可以解决的catch块,但是如果将exception放在三个catch的最前面,就会报错,因为exception是所有异常的超类,出现异常必然会进入到exception中,后面的两个catch就会失效了

使用throw和throws:

在java本身的语法中就是对异常执行抛出的动作,java本身的语法 会把异常一层一层的往上抛,方法中出现了异常,则会把异常抛给调用它的主函数,主函数无法解决,就会把异常再次往上抛出,最后抛到JVM导致JVM死掉。

使用throws抛出的运行时异常相当于提示调用者,该方法有风险,至于是否处理该风险,由调用者决定;如果throws抛出的是检查时异常,那么调用者自己就必须在调用的时候进行处理(利用try ... catch),当然通过throws可以同时抛出多个异常.

------------------------------异常案例------------------------------------

package javaexception;

publicclassExceptionTest1{

publicstaticvoidmain(String[]args){

Workerworker=newWorker();

try{

worker.work(11);

}catch(Exceptione){

Doctordoctor=newDoctor();

try{

doctor.cure(worker);

System.out.println("治好了");

}catch(Exceptione1){

System.out.println("die");

}

}

}

}

classWorker{

privatebooleanalive=true;

publicbooleanisAlive(){

returnalive;

}

publicvoidsetAlive(booleanalive){

this.alive=alive;

}

//工作的方法

publicvoidwork(intcount)throwsException{

if(count>10){

thrownewException("生病");

}else{

System.out.println("正常工作");

}

}

}

classDoctor{

publicvoidcure(Workerworker)throwsException{

intt=(int)(Math.random()*10000);

if(t==4512){

worker.setAlive(false);

thrownewException("death");

}else{

worker.setAlive(true);

}

}

}

--------------------------------------------

运行时异常:

捕获:

特别提醒:在try... catch...  finally中 finally最好不省略,因为finally是保证程序是否发生异常,都必须执行的代码(即使我们在try块中强行return之后,finally中依然会执行),(例如我们在I/O流里面,必须做的关闭操作就应该放在finally中)  ||需要强调的是:唯一能终止finally执行的操作就是 System.exit(0);及其它相关类似操作,这一类操作是直接终止程序的运行,关闭JVM。

如果在finally中发生异常的话,照样也会程序中断,因为没有人处理这个异常。

抛出:

Throw表示手动抛出一个异常,throws是声明该方法可能会抛出的异常(运行时异常调用者不用必须处理;只是知道这里会抛出这样一个异常)

检查时异常:

捕获:

printStackTrace是打印异常堆栈,但是一般我们不建议打印异常堆栈(IDE工具里JVM默认生成的),具体问题具体处理,一层一层的打印堆栈是比较耗性能的。

抛出:

如果抛出的是检查时异常那么就必须被处理,要么在手动抛出的地方立马用try catch进行处理,要么继续往上抛,抛给调用这个方法的方法或者主函数,如下例:

java sql报错不能catch_java异常(转) - osc_ioa3fr1w的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. emc存储java打开后报错_连接EMC存储系统 - osc_mk8rqvg4的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.准备一台笔记本电脑,一根网线即可. 2.将网线一头连接笔记本电脑,另一头连接存储.(连接存储的一头应连接到有扳手图标的那一网口上) 3.配置IP地址 IP:128.221.1.254 子网掩码:2 ...

  2. mysql 视图报错1356,mysql视图初探 - osc_ky6f5kf1的个人空间 - OSCHINA - 中文开源技术交流社区...

    mysql视图初探 官方例子如下,从官方的例子就可以看出来视图就是提供一种快捷查询.用视图来查询一些常用的结果. mysql> help create view; Name: 'CREATE V ...

  3. MySQL配置大小写敏感报错_mysql表名大小写敏感 - xbuding: watch and learn! - OSCHINA - 中文开源技术交流社区...

    在ubuntu下安装的mysql版本是 5.6.25-0ubuntu1 linux下的mysql的表名是大小写敏范的.而在在windows下安装的mysql是大小写不敏感的. 原因是因为lower_c ...

  4. java io流拒绝访问_JAVA IO流 - 张宏良的个人空间 - OSCHINA - 中文开源技术交流社区...

    IO流 一.File类的使用 java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File能新建.删除.重命名文件和目录,但File不能访问文件内容本身.如果需要访问文件内容本身 ...

  5. Java位语句_卫语句 - 宿小帅的个人空间 - OSCHINA - 中文开源技术交流社区

    1.使用卫语句取代嵌套表达式 函数中的条件逻辑使人难以看清正常的执行途径.使用卫语句表现所有特殊情况. 动机:条件表达式通常有2种表现形式.第一:所有分支都属于正常行为.第二:条件表达式提供的答案中只 ...

  6. Oracle闪回报错,Oracle闪回恢复 - osc_pnw2apz4的个人空间 - OSCHINA - 中文开源技术交流社区...

    Oracle的闪回功能包括 1.闪回数据库(前提 归档模式下 启用闪回数据库) mount 下 alter database archivelog; alter database flashback ...

  7. java的异常解析_java异常解析 - liop的个人空间 - OSCHINA - 中文开源技术交流社区...

    抛出异常,捕捉异常,输出异常. /** * 自定义异常类 */ public class CustomerException extends RuntimeException { private St ...

  8. java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...

    最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...

  9. java 数组减除值_java数组操作 - osc_hwpd2zko的个人空间 - OSCHINA - 中文开源技术交流社区...

    什么是数组: 程序 = 算法+数据结构 算法:解决问题的步骤,流程(顺序,分支,循环) 数据结构:将数据按照某种特定的结构来保存 数怎么存 设计良好的,合理的数据结构可以导致好的算法 数组:就是一种最 ...

最新文章

  1. 如何在国内上medium_在Medium上写作的风格指南
  2. CPQuery, 解决拼接SQL的新方法
  3. 控制cpu_设备管理 设备控制方式
  4. C++ Primer 5th笔记(6)chapter6 函数: 参数
  5. 税务计算机网络管理制度,税务系统电子数据处理管理办法(试行)
  6. 在删除一个指针之后,一定将该指针设置成空指针(即在delete *p之后一定要加上: p=NULL)...
  7. nowcoder 清楚姐姐的翅膀们 F 一般图的最大匹配
  8. 汇编语言(四)之比较字符串
  9. Windos下用setx.exe命令行模式下永久设置系统环境变量
  10. day35-mysql之表的详细操作
  11. squid代理服务器(捎带的SNAT)
  12. pytorch卷积神经网络_【深度学习】卷积神经网络图片分类案例(pytorch实现)
  13. 利用BitLocker和VHD实现共享文件加密
  14. cout输出格式不常用情况
  15. android 广播观察者,作业三——观察者模式在Android广播机制上的应用
  16. mongodb 的基本函数语法封装
  17. 第3章 神经网络的最优化
  18. Python 情人节超强技能 导出微信聊天记录生成词云
  19. 李诞是怎么把吐槽变成一门生意的?
  20. poi 启用保护后取消_ie11启用增强保护模式开启关闭方法

热门文章

  1. PAT 大区赛 1-7古风排版
  2. 搭建一个大数据分析处理平台,主要划分为哪几步?
  3. 南加大和纽约大学计算机专业,NYU,南加大RD狂放榜?科比女儿喜提Offer大满贯!...
  4. 盖茨基金会与前Ripple CTO的区块链项目达成合作
  5. 要来一把紧张刺激的互联网狼人杀吗?
  6. 初入社会要避免入的坑-租房篇
  7. 论文阅读笔记--Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers
  8. 支付宝沙箱环境对接流程
  9. 门电路图对照表——国标、IEEE、标准符号对照表
  10. Windows远程桌面协议(RDP)