1、异常的定义:程序在运行时出现不正常情况。
异常的划分:
Error:严重的问题,对于error一般不编写针对性的代码对其进行处理。
Exception:非严重的问题,对于exception可以使用针对性的处理方式进行处理。
2、异常的处理:(固定格式)
1
2
3
4
5
6
7
8
9
10
11
|
try {需要被检测的代码;} catch (异常类 变量) {处理异常的代码(处理方式);} //这里应当是要有针对性的处理方式 finally {一定会执行的语句;} //通常是关闭资源的代码,因为资源必须得到释放 |
对多异常的处理方式:
1、声明异常时,建议声明更为具体的异常,这样处理起来就更加的具体。
2、对方声明几个异常,就对应及格catch块,不要定义多余的catch块,如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
*在进行catch处理时,catch中一定要定义具体的处理方式。
*catch是用于处理异常,如果没有catch就代表异常没有被处理过,如果该异常是检测时异常,那么必须声明。
Runtime异常:(即运行时异常)
是Exception中一个特殊的子类异常。
如果在函数内抛出该异常,函数上可以不用声明,编译一样通过;如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。
之所以用在函数上声明,是因为不需要让调用者处理。
异常在子父类覆盖中的体现;
1,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
2,如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
3,如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。
如果子类方法发生了异常。就必须要进行try处理。绝对不能抛。
throws 和 throw 的区别:
throws:使用在函数上(小括号和大括号之间),后面跟的是异常类,可以跟多个。中间用“,”(逗号)隔开。
throw: 使用在函数内,后面跟的是异常对象。throw后面不能加语句,因为throw后面的语句无法执行到。
习题练习:
1
2
3
4
5
6
7
8
9
|
/*需求:毕老师用电脑上课。 分析: 先写出正常运行时的代码:电脑开机后上课 分析电脑会出现的问题,如:蓝屏,冒烟 此时需要自定义两个“蓝屏,冒烟“”自定义异常,封装成对象。 蓝屏后,电脑重启,之后继续上课 电脑冒烟后,出现了老师的问题,不能上课了,可以先做练习,毕老师将问题抛给校长。此时抛出的问题不再是电脑冒烟,而应该是老师不能上课了 问题抛给校长后,校长catch后给出解决方案 */ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
class LanPingException extends Exception //自定义蓝屏异常 { LanPingException(String message) { super (message); } } class MaoYanException extends Exception //自定义冒烟异常 { MaoYanException(String message) { super (message); } } class NoclassException extends Exception //自定义不能上课异常 { NoclassException(String message) { super (message); } } class Computer { private int state = 2 ; //硬性规定电脑状态 //问题是在运行时发生的,所以得定义在运行时 public void run() throws LanPingException,MaoYanException //因为有可能出现错误,所以必须先声明 { if (state== 2 ) { throw new LanPingException( "电脑蓝屏了。。。" ); //因为电脑不能自己处理,所以抛给了老师 } if (state== 3 ) { throw new MaoYanException( "电脑冒烟了。。。" ); } System.out.println( "电脑开机,运行中。。。。" ); } public void restart() { System.out.println( "电脑重启。。。。" ); } } class Teacher { private String name; private Computer comp; Teacher(String name) { this .name = name; comp = new Computer(); //初始化时老师就有电脑了 } public void test() { System.out.println( "做练习" ); } public void teach() throws NoclassException //标识应该是抛出去的异常,能够进行处理的 { try { comp.run(); //讲课,要先开启电脑 } catch (LanPingException e) //抛出了两个异常,必须用两个catch { System.out.println(e.getMessage()); comp.restart(); } //这个问题抛给老师的话依旧无法解决,应该抛出对应的问题,这里老师抛出的问题应该是不能上课了 catch (MaoYanException e) { test(); //不能上课,可以先布置练习,这个必须在throw 之前,因为throw之后的语句不会执行 throw new NoclassException(e.getMessage()+ ",无法继续上课" ); } System.out.println(name+ ",上课中。。。。" ); } } class ExceptionTest { public static void main(String[] args) { Teacher t = new Teacher( "毕老师" ); //指定一个老师 try { t.teach(); //老师运行这个方法 } catch (NoclassException e) //抓住对应的抛出的问题 { System.out.println(e.toString()); //打印出问题原因 System.out.println( "自习或者放假" ); //处理办法 } } } |
1
2
3
4
5
6
7
8
9
10
11
|
当电脑状态为 1 时,输出为: 电脑开机,运行中。。。。 毕老师,上课中。。。。 当电脑状态为 2 时,输出为: 电脑蓝屏了。。。 电脑重启。。。。 毕老师,上课中。。。。 当电脑状态为 3 时,输出为: 做练习 NoclassException: 电脑冒烟了。。。,无法继续上课 自习或者放假 <br> |
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
原文链接:http://blog.csdn.net/u012324102/article/details/53535617