Java异常的使用
1.exception的分类
java将异常分为两种,checked exception和unchecked exception(一般指runtimeException)。
checked exception:不是调用者非法使用或传入不正确参数造成的异常,运行时遇到此类异常需要调用者根据情况作出反应,捕获后程序可以继续运行,代码中必须显示捕获,如果抛出此类异常也需要在函数名后显示加入throws关键字
public static void checkedExceptionMaker() throws Exception{
throw new Exception("checkExceptionMaker exception");
}
unchecked exception:程序运行期间,因调用者不正确使用导致的异常发生,此时可以使用运行时异常,并使得程序遇到此异常时,被终止,可能抛出unchecked exception的函数无需指定throws异常类型
public static void runtimeExceptionMaker() {
throw new RuntimeException("runtimeExceptionMaker exception");
}
2.exception的捕获
checked exception需要显示捕获,否则会编译出错,而unchecked exception是可选地捕获,万一不捕获就会沿函数栈(调用函数轨迹)往上抛出,最终终止程序。
public static void main(String[] argv) { try {
checkedExceptionMaker();
System.out.println("pass checked exception");
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("program is still running...");
runtimeExceptionMaker(); System.out.println("program is done"); }
运行结果:
java.lang.Exception: checkExceptionMaker exception
at edu.xhyzjiji.cn.exception_demo.ExceptionClassify.checkedExceptionMaker(ExceptionClassify.java:26)
at edu.xhyzjiji.cn.exception_demo.ExceptionClassify.main(ExceptionClassify.java:13)
Exception in thread "main" java.lang.RuntimeException: runtimeExceptionMaker exception
at edu.xhyzjiji.cn.exception_demo.ExceptionClassify.runtimeExceptionMaker(ExceptionClassify.java:30)
at edu.xhyzjiji.cn.exception_demo.ExceptionClassify.main(ExceptionClassify.java:19)
program is still running...
注意行5,12的代码没有被执行。
/*什么时候用check exception,什么时候需要unchecked exception?*/
checked exception是对接口调用者(后面简称调用者)输入参数可预知的异常进行检查, 比如除数为0,某些必要参数为null,打开了不存在的文件之类,这些问题是由调用者引入,并非接口源码的漏洞,我们就可以大胆使用checked exception,以告知调用者可能存在的输入问题,调用者以try-catch方式捕获这些异常,并根据异常类型将程序引导到正常流程中去。
unchecked exception可能是接口本身问题而导致异常的出现,比如数组越界访问,因端口号被占用使得创建tcp客户端失败,这些异常可能存在以下特点:
1.接口源码本身有问题;2.异常产生使后续程序无法运行,这时候应该终止程序并让接口开发者修改潜在问题,重新发布接口,这时候我们可以选用unchecked exception。
/*unchecked exception是否需要try-catch*/
有时候为了程序不因此崩溃,需要对unchecked exception也进行try-catch,这依赖于对接口源码一定的熟悉程度,但是由于unchecked exception的发生,调用者无法引导程序归入正常流程,所以即使try-catch捕获到异常,后续的调用也会继续抛出异常,try-catch的意义就不大了,而且会令我们的代码满布try-catch代码块。
温和的做法是我们可以选择try-catch可能发生的unchecked exception,并重试数次或累计抛出次数,如果依然得不到解决,我们自己再抛出一个runtime exception来结束当前的程序。
3.异常/捕获的嵌套
4.继承exception,利用code减少catch数量
5.exception捕获原理
Java异常的使用的更多相关文章
- 浅谈java异常[Exception]
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...
- 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?
本文转载自 java 异常捕捉 ( try catch finally ) 你真的掌握了吗? 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理 ...
- Java异常体系及分类
上图是基本的java异常体系结构. 主要分为2大类:Error和Exception 1.Error:描述了Java运行系统中的内部错误以及资源耗尽的情形.应用程序不应该抛出这种类型的对象,一般是由虚拟 ...
- Java异常之自定义异常
哎呀,妈呀,又出异常了!俗话说:"代码虐我千百遍,我待代码如初恋". 小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常.Java异 ...
- 第11章 Java异常与异常处理
1.Java异常简介 1.什么是异常异常出现的时候代码会无法正常运行下去,会产生各种问题2.捕捉异常的作用提早发现异常,方便查找问题,并给出解决方法3.Java中的异常1.Java中所有不正常的类都是 ...
- java 异常
1.java异常 2.自定义抛出 3.运行时异常,程序有问题,让使用者可以改' ' 4.return 和 throw的区别 return 符合函数要求的值 throw 有问题的时候用它结束 ...
- 3.Java异常进阶
3.JAVA异常进阶 1.Run函数中抛出的异常 1.run函数不会抛出异常 2.run函数的异常会交给UncaughtExceptionhandler处理 3.默认的UncaughtExceptio ...
- 2.Java异常学习
1.Java异常的概念 异常的例子 1.除法就是一个需要捕获异常的例子,除数又可能是0 异常处理的基本流程如下 一旦发生异常,就使得程序不按照原来的流程继续的运行下去 a.程序抛出异常 try{ th ...
- java异常架构图 和几个面试题
1.java异常架构图 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被 ...
- 黑马----JAVA异常
黑马程序员:Java培训.Android培训.iOS培训..Net培训 黑马程序员--JAVA异常 一.JAVA异常有三种语句块:try语句块.catch语句块.finally语句块. 1.try语句 ...
随机推荐
- Maven--生命周期和插件(四)
<Maven--搭建开发环境(一)> <Maven--构建企业级仓库(二)> <Maven—几个需要补充的问题(三)> <Maven—生命周期和插件(四)&g ...
- CPU使用率统计办法
我们在搞性能测试的时候,对后台服务器的CPU利用率监控是一个常用的手段.服务器的CPU利用率高,则表明服务器很繁忙.如果前台响应时间越来越大,而后台CPU利用率始终上不去,说明在某个地方有瓶颈了,系统 ...
- python3 urllib.request.urlopen() 地址打开错误
错误内容:UnicodeEncodeError: 'ascii' codec can't encode characters in position 28-29: ordinal not in ran ...
- 看了一本书,说可以利用Hierarchy Viewer优化布局
看了一本书,说可以利用Hierarchy Viewer优化布局,今以志之. 参考:http://www.cnblogs.com/Rocky_/archive/2011/11/04/2236243.ht ...
- laravel3中文文档是迈入laravel4的捷径
http://v3.golaravel.com/docs/ 目录 Laravel概览 更新日志 安装与设置 系统需求 安装 服务器设置 基本设置 环境 友好的链接(URL) 路由 基础 通配符(Wil ...
- Ubuntu 14.04根据系统,休眠后不能启动要解决的问题
简介: 提升Ubuntu制度14.04之后,当系统进入休眠,我们不能再次启动,直接崩溃,凡出了问题? 1. 问题纳入 Ubuntu升级系统14.04之后.通过系统的Power设置休眠时间,在系统进 ...
- 基于注解的Spring MVC
1.加入�jar 2.web.xml配置: <?xml version="1.0" encoding="UTF-8"?> <web-app v ...
- [转] iOS使用NSMutableAttributedString 实现富文本(不同颜色字体、下划线等)
转自: 在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都 ...
- SqlCommand和SqlDataAdapter有什么区别
因为DataSet是离线的,所以SqlDataAdapter这个对象是连接DataSet和数据库的桥梁,所有对DataSet的操作(填充,更新等)都要通过他 ado.net数据访问有两种方式: 1.离 ...
- SQLSERVER内核架构剖析 (转)
我们做管理软件的,主要核心就在数据存储管理上.所以数据库设计是我们的重中之重.为了让我们的管理软件能够稳定.可扩展.性能优秀.可跟踪排错. 可升级部署.可插件运行,我们往往研发自己的管理软件开发平台. ...