《Java从入门到放弃》JavaSE入门篇:异常
异常!!!看看生活中的异常例子:
正常情况下,从家到公司上班,只需要20分钟!但如果在路上碰到堵车或修路或车突然自燃等问题,那就没办法正常去上班了。其中堵车或修路或车突然自燃等问题就属于异常。
碰到异常,就需要处理,不然就只能中断上班了。
在Java程序中的异常表示什么意思呢?
Java中的错误分为两类:错误(Error)和异常(Exception)
错误一般都是在编译前IDE就能发现并提示,例如非要给整型变量赋一个超大的数值:
这就是一个典型的Error。
程序在运行时出现的问题,就叫异常!!!如果在编程时不考虑到对这些异常的处理,当出现异常时,程序就会停止。例如下面示例中的除0错误:
1
2
3
4
5
6
7
|
public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print( "请输入整数:" ); int i = input.nextInt(); int sum = 10 /i; System.out.println(sum); } |
这段代码在编译时是没有任何问题的,但在运行时输入0就会提示有异常:
出现错误很好解决,在编码环节改正确就OK了,但有的时候是否出现异常就不是开发者能控制的(如上例),所以开发者只能预判哪些地方有可能出现异常,提前做好处理。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print( "请输入整数(不能输入0):" ); int i = input.nextInt(); int sum = 0 ; try { sum = 10 /i; } catch (Exception e) { // TODO: handle exception System.out.println( "不能输入0,不能输入0,不能输入0!!!听不懂国语么!!!" ); } System.out.println(sum); } |
结果:
可以发现结果中不再出现异常的信息,而且换成了我们自己的提示信息。
就跟下面两个图的区别一下,如果异常直接出现在用户面前,用户很有可能就再也不用你的程序了,而如果给个提示,则用户有可能会继续使用。
异常的概念就介绍完毕啦!!!,接下来看看Java中是如何处理异常的。
Java中的常见异常如下图:
当然,这只列出了一部分,还有很多的异常已比较常见,当大家碰到时最好查一下JDK。
Java中异常的三种处理方式:
try-catch-finally
throw和throws
一、try-catch-finally
try部分是必须的,用来捕获异常,一般把有可能出现异常的代码放入其中。
catch部分可以有零到多个,是用来判断异常类别并进行处理,一般把异常处理代码放入其中。
finally部分可选,无论是否有异常都必须执行的代码放入其中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
int firstNum = 12 ; int secondNum = 0 ; try { int result = firstNum/secondNum; System.out.println( "两个数字相除的结果是:" +result) } catch (ArithmeticException e) { System.out.println( "算术异常:" ); } catch (NumberFormatException e) { System.out.println( "数字转换异常" ); } catch (ArrayIndexOutOfBoundsException e){ System.out.println( "数组下标越界异常" ); } catch (Exception e) { System.out.println( "其他异常" ); } finally { System.out.println( "我是必须要执行滴,快叫爸爸!" ); } |
二、thorw和throws
这个关键字的作用是抛出异常,它不处理。
我叫小明给我带份红烧肉,小明去食堂发现没有红烧肉(这就相当于异常出现了),他不知道如何处理,就回到寝室告诉我没有红烧肉,然后我再来处理。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class XiaoMing { //买食物的方法 public void buyFood(String food) throws Exception{ //用一个集合表示食堂的所有菜 List<String> foods = new ArrayList<String>(); foods.add( "青椒鸡蛋" ); foods.add( "青椒肉丝" ); foods.add( "红烧排骨" ); foods.add( "土豆欢声" ); //表示是否有该食物的状态 int state = 0 ; //默认没有 0.没有该食物 1.有该食物 for (String string : foods) { if (food.equals(string)){ state = 1 ; break ; } } if (state== 0 ){ throw new Exception( "你要吃的菜没有了!" ); } } } |
编写测试代码:
不瞎的朋友应该发现有什么问题了吧?
是的,因为buyFood()方法后面我们加了throws Exception,所以在调用时IDE就认为这儿极有可能会有异常,我们就必须处理它,还是两种方式,要么使用try-catch,要么在main方法后继续抛异常(throws Exception)。
在Java中,除了使用JDK中定义好的异常外,我们还可以自定义异常,这个很简单,定义一个类,继承Exception类,重写一个参数的构造方法就OK了。
好吧,异常到这儿就够用了,需要深入了解的朋友,请自行百度吧,哈哈!
“软件思维”博客地址:51CTO,博客园,感兴趣的小伙伴可以去看相关的其它博文。
《Java从入门到放弃》JavaSE入门篇:异常的更多相关文章
- dotnet 从入门到放弃的 500 篇文章合集
本文是记录我从入门到放弃写的博客 博客包括 C#.WPF.UWP.dotnet core .git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到 ...
- [Python 从入门到放弃] 6. 文件与异常(二)
本章所用test.txt文件可以在( [Python 从入门到放弃] 6. 文件与异常(一))找到并自行创建 现在有个需求,对test.txt中的文本内容进行修改: (1)将期间的‘:’改为‘ sai ...
- 《Java从入门到放弃》入门篇:springMVC数据校验
昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303 ...
- 《Java从入门到放弃》入门篇:hibernate中的多表对应关系
hibernate中的对应关系其实就是数据库中表的对应关系, 就跟某些电影中的某些场景是一样一样滴. 比如可以是一男一女,还可以是一男多女, 更可以是多男一女,最后最后最后还可以是多男多女!!! 有些 ...
- 《Java从入门到放弃》入门篇:hibernate查询——HQL
不知不觉又到了hibernate的最后一篇了,只感觉时光飞逝~,岁月如梭~! 转眼之间,我们就···························,好吧,想装个X,结果装不下去了,还是直接开始吧· ...
- 《Java从入门到放弃》入门篇:springMVC数据传递
springMVC中的数据传递方式与JSP和Struts2相比,更加的简单.具体有什么样的区别呢?我们通过下面这张图来对比就知道了. 随手画的,有些错别字,不用太在意..... 接下来,进入正题,sp ...
- Java性能测试从入门到放弃-详解篇
Jmeter组件分类说明 Jmeter的组件可以放在任意位置 线程池:用于创建线程.每个线程会"批次顺序"执行任务,因此后面的任务可根据前面的任务决定具体的操作. ...
- 函数响应式编程(FRP)从入门到”放弃”——基础概念篇
前言 研究ReactiveCocoa一段时间了,是时候总结一下学到的一些知识了. 一.函数响应式编程 说道函数响应式编程,就不得不提到函数式编程,它们俩到底有什么关系呢?今天我们就详细的解析一下他们的 ...
- python从入门到放弃之线程篇
一,什么是多线程? 1.多线程的概念? 说起多线程,那么就不得不说什么是线程,而说起线程,又不得不说什么是进程. 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分 ...
- [Python 从入门到放弃] 5. 文件与异常(一)
1.文件操作: 文件操作包含读/写 从文件中读取数据 向文件写入数据 Python中内置了open()方法用于文件操作 (更多关于open()BIF介绍 阅读此篇) 基本模板: 1.获取文件对象 2. ...
随机推荐
- 木棍分割[HAOI2008]
题目描述 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长度最小, 并且 ...
- 度度熊与邪恶大魔王 DP | 完全背包
Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻击方式 ...
- python进阶(3):模块和包
之前两天我们介绍了一些比较常用的模块,而我也说过会讲解什么是模块,今天我们就来分析分析模块和包,模块我们现阶段使用还可以而包的话现阶段我们基本很少会用到包,学的不是很清楚也没关系这些东西都是用的多了也 ...
- Ruby01: Beginner
中整個早上都忙著作業,看來是假期懶了一下現在現眼報吧哈哈.在上課之前發一下Ruby 的首章,算是倉促的開始吧. puts puts "Once upon a time... there's ...
- linux 自动备份数据库
首先在你的项目合适的地方建立一个执行备份数据库的脚本 下面我建立一个叫 mysqlBackups.sh 的脚本内人如下: #!/bin/sh # Database info DB_NAME=" ...
- LR的响应时间与使用IE所感受时间不一致的讨论
在做性能测试时,有时碰到这样一种情况,使用性能工具LR测试出来的响应时间比实际使用IE感受到的时间要长,例如,实际使用IE打开一个系统时只需要1~2秒,而使用LR跑一个用户所得出的结果可能是8秒.10 ...
- php中自动加载类_autoload()和spl_autoload_register()实例详解
一._autoload 自动加载类:当我们实例化一个未定义的类时,就会触此函数.到了php7.1以后版本不支持此函数好像抛弃了 新建一个类文件名字自己随便去:news类在auto.php文件里面去实例 ...
- 关于JS中数组的分析操作
JS数组的基础操作代码: <script type="text/javascript"> 数组的三种定义 var arr1 = new Array( ...
- python第一篇-------python介绍
一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写Python语言的编译器.Python这个名字,来自Guido所 ...
- 2017中国大学生程序设计竞赛 - 网络选拔赛 HDU 6155 Subsequence Count 矩阵快速幂
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6155 题意: 题解来自:http://www.cnblogs.com/iRedBean/p/73982 ...