Java的异常处理方式
一、异常简介
异常结构图

Throwable是类,Exception和Error都继承了该类,error是因为系统内部错误或者资源耗尽错误,这种情况很少出现,而且error也不允许被抛出在Exception异常中又分为RuntimeException(运行时期异常)和IOException(其他异常),划分两个异常的规则是:由于程序错误导致的异常属于RuntimeException(运行时期异常),比如错误的类型转换,数组越界,访问null指针这类,而像I/O错误这类问题导致的异常属于其他异常;
在Java中,将error类和RuntimeException类的异常称为unchecked(非受查异常)所有的其他异常称为checked(受查异常);受查异常是必须要处理的异常,如果不处理,编译器就不让通过
非受查异常编译时期不会出问题,可以不去处理,虚拟机会处理这些问题,一般是在运行的时候出问题,这些异常一般都是因为数组越界,访问null指针这些问题
在抛出异常时可以抛出Throwable,并且在调用的时候必须进行catch处理。但是这样的设计方法做不好,因为不知道抛出的类型到底是哪种具体问题,无法针对性的处理
二、异常处理的两种方式
2.1 throw
一个方法不仅需要告诉编译器将要返回一个什么值,还要告诉编译器可能发生什么错误,方法应在其首部声明所以可能抛出的异常,这样可以从首部反映出这个方法可能抛出那些checked异常;
throws和throw的区别
- throws
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常 - throw
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定抛出了某种异常 - throws异常注意事项:
子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。
如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
如果父类没有抛出任何异常,那么子类也不可以抛出任何异常,如果子类方法内有异常发生,那么子类只能try,不能throws
在异常处理中,应该捕获那些知道怎么处理的异常,而将那些不知道怎样处理的异常抛出;
2.2 try...catch
try ....catch 的处理方案
每有一个异常就写一个try...catch..写一个try , 多个catch
try{
...
}
catch(异常类名 变量名) {
...
}
catch(异常类名 变量名) {
...
}
try...方式异常处理的方式:
在try里面发现问题后,jvm会帮我们生成一个异常对象,然后把这个异常对象和catch里面的异常进行匹配。如果该异常对象是某个异常类型,就会执行该catch里面的处理信息。在jdk7.0之后出现了一个新的异常处理方案
try{
...
}
catch(异常名1 | 异常名2 | ... 变量 ) {
...
}
这种处理方法的优点是使得代码简洁了,但是不足也很明显,这种方法对于不同的异常,处理方法是一致的,但是如果如果在开发中碰到的是同类型的异常,且有相同的处理方法,那么就可以使用这种异常处理方法,并且,这种特性只有在异常之间不存在子类关系才会使用,即异常1和异常2不能是父类和子类的关系。
finally子句 :
finally子句的处理机制:在执行了try-catch语句后,执行finally子语句,而且无论try部分有没有被执行,即使try-catch语句中执行了return语句,finally语句内的都将被执行,但是有一种情况是例外,如果在try-catch语句中执行了系统退出代码,即system.exit(0),那么finally将不会被执行,而且包括后面所有的语句。
三、自定义异常类
在程序中,有时候会碰到一些用标准类异常也无法描述和处理的问题,这个时候就可以自定义一个异常类,自定义异常类继承Exception,或者继承Exception的子类,自定义的异常类要给出具体的异常处理的操作,一般自定义的异常类有两个构造方法,一个是无参构造,一个是带有描述详细的异常信息的构造,下面是一个自定义的异常类,当出现了某些异常的时候就可以抛出自定义的异常类

Java的异常处理方式的更多相关文章
- Java IO异常处理方式
public class IOException{ // 获取系统默认的行分隔符 private static final String LINE_SEPARATOR = System.getProp ...
- JAVA异常及其异常处理方式
异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用Syste ...
- Java的异常处理
Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally.JB的在线帮助中对这几个关键字是这样解释的: Throws: Lists the ...
- Java之异常处理机制
来源:深入理解java异常处理机制 2.Java异常 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 ...
- java的异常处理机制(try…catch…finally)
1 引子try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话.不信 ...
- Java中异常处理和设计
在程序设计中,进行异常处理是非常关键和重要的一部分.一个程序的异常处理框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度.试想一下,如果一个项目从头到尾没有考虑过异常处理,当程序出错从哪里寻 ...
- java的异常处理简介
异常概述 任何一种程序设计语言设计的程序在运行时都有可能出现错误,例如除数为0,数组下标越界,要读写的文件不存在等等. 捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生. 对于这些错误,一 ...
- 深入理解java的异常处理机制
JAVA异常的概念 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的 ...
- Java 六种异常处理的陋习(转)
Java 六种异常处理的陋习 原文链接: http://www.cnblogs.com/Android-and-android/archive/2013/05/02/3054469.html 你觉得 ...
随机推荐
- Audit Object Changes 审核对象更改
Important 重要 The Audit Trail module is not supported by the Entity Framework ORM in the current vers ...
- Laravel实现大型商城网站之用户注册短信发送项目实战功能开发
确定短信运营商 我这里采用的云片,不过大家使用其它的也可以. 首先自己注册一个帐号,然后找到这个 点击开始接入,完成新手引导过程. 第二部的签名和模板必须填写,类似我下面填写的这样 值得注意的是这个模 ...
- node error SOCKET error:10106
上周我的node.js command prompt出错了,什么也干不了 SOCKET error:10106 纠结两天,终于搞定了,其实比较简单,就是不会弄起来好麻烦 参考: 作者:忆常 url: ...
- JS PopupAlert
JS PopupAlert 可以在 JavaScript 中创建三种消息框:警告框.确认框.提示框. 警告框 警告框经常用于确保用户可以得到某些信息. 当警告框出现后,用户需要点击确定按钮才能继续进行 ...
- git命令行的颜色配置
Git颜色branch,diff,interactive,status配置,git终端配置颜色,git命令行高亮 Git默认的输出是单一颜色的,感觉很不容易阅读,Git支持用多种颜色来显示其输出的信息 ...
- pytorch 中的Variable一般常用的使用方法
Variable一般的初始化方法,默认是不求梯度的 import torch from torch.autograd import Variable x_tensor = torch.randn(2, ...
- 观察者模式Vs发布订阅模式
1)观察者模式 观察者模式通俗的讲就是我们平事件调用(click/change等等) 大家先看这个图片.我们被观察者Subject(监听某个事件)发生改变时,观察者Observer监听到没改变做出调整 ...
- leetcode-math
Reverse Integer /** * Given a 32-bit signed integer, reverse digits of an integer. * */public class ...
- PowerMock学习(八)之Mock Argument Matcher的使用
前言 本计划在上周六日将powermock学完,并同步到博客中,结果自己没经得住诱惑,又开始去打王者荣耀了.虽然两天时间我从钻石一升到了星耀V四星,但是我并没有觉得很开心,相反很失落呢.不得不说腾讯的 ...
- c#中的Nullable(可空类型)
在C#中使用Nullable类型(给整型赋null值的方法) 在C#1.x的版本中,一个值类型变量是不可以被赋予null值的,否则会产生异常.在C#2.0中,微软提供了Nullable类型,允许用它定 ...