《Java从入门到放弃》JavaSE入门篇:异常

异常!!!看看生活中的异常例子:

正常情况下,从家到公司上班,只需要20分钟!但如果在路上碰到堵车或修路或车突然自燃等问题,那就没办法正常去上班了。其中堵车或修路或车突然自燃等问题就属于异常。

碰到异常,就需要处理,不然就只能中断上班了。


在Java程序中的异常表示什么意思呢?

Java中的错误分为两类:错误(Error)和异常(Exception)

错误一般都是在编译前IDE就能发现并提示,例如非要给整型变量赋一个超大的数值:

这就是一个典型的Error。

程序在运行时出现的问题,就叫异常!!!如果在编程时不考虑到对这些异常的处理,当出现异常时,程序就会停止。例如下面示例中的除0错误:

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了,但有的时候是否出现异常就不是开发者能控制的(如上例),所以开发者只能预判哪些地方有可能出现异常,提前做好处理。

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中异常的三种处理方式:

  1. try-catch-finally
  2. throw和throws

一、try-catch-finally

    try部分是必须的,用来捕获异常,一般把有可能出现异常的代码放入其中。

    catch部分可以有零到多个,是用来判断异常类别并进行处理,一般把异常处理代码放入其中。

    finally部分可选,无论是否有异常都必须执行的代码放入其中。

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

    这个关键字的作用是抛出异常,它不处理。

    我叫小明给我带份红烧肉,小明去食堂发现没有红烧肉(这就相当于异常出现了),他不知道如何处理,就回到寝室告诉我没有红烧肉,然后我再来处理。

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了。


好吧,异常到这儿就够用了,需要深入了解的朋友,请自行百度吧,哈哈!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏叁金大数据

自学Python六 爬虫基础必不可少的正则

  要想做爬虫,不可避免的要用到正则表达式,如果是简单的字符串处理,类似于split,substring等等就足够了,可是涉及到比较复杂的匹配,当然是正则的天下...

731
来自专栏鸿的学习笔记

Go语言的“Hello World”

一直对Go语言很好奇,周末有空研究了下Golang,首先能在电脑上跑出“Hello World!”:

912
来自专栏ThoughtWorks

Scala中的语言特性是如何实现的?

image.png #思特沃克好声音# (图片:网络) 我们学东西不止要知其然,还要知其所以然。成都办公室的崔鹏飞在学Scala的时候,不止学习如何使用Scal...

3047
来自专栏java一日一条

请不要再说 Java 中 final 方法比非 final 性能更好了

总结:你说final的性能比非final有没有提升呢?可以说有,但几乎可以忽略不计。如果单纯地追求性能,而将所有的方法修改为 final 的话,我认为这样子是不...

792
来自专栏Aloys的开发之路

不引入新的数组,实现数组元素交换位置函数

         最近遇到一道C++的面试题,要求不引入新的数组,实现数组元素交换位置函数,看似挺简单的,却还是花费了我不少时间,这里记录下来,给大家一个简单的...

2908
来自专栏北京马哥教育

Python元编程:控制你想控制的一切

很多人不理解“元编程”是个什么东西,关于它也没有一个十分准确的定义。这篇文章要说的是Python里的元编程,实际上也不一定就真的符合“元编程”的定义。只不过我...

2744
来自专栏AhDung

C#遐想/瞎想

1062
来自专栏HTML5学堂

面向对象系列讲解—认识对象

HTML5学堂:面向对象、原型、继承应该说是属于JavaScript最底层的知识和概念,对于这些知识,在我们没有触碰的时候的确觉得是比较困难的,包括在学习的过程...

2894
来自专栏猿人谷

总结---5

1.语义搜索 所谓语义搜索,是指搜索引擎的工作不再拘泥于用户所输入的关键字,而是准确捕捉到用户所输入语句后面的真正意图,并以此来进行搜索,微软、谷歌和Fac...

19510
来自专栏java学习

Java每日一练(2017/7/25)

最新通知 ●回复"每日一练"获取以前的题目! ●【新】Android视频更新了!(回复【安卓视频】获取下载链接) ●【新】Ajax知识点视频更新了!(回复【学习...

2565

扫码关注云+社区