异常
1、复习
2、新内容
异常
一、什么是异常
1、异常的概念:程序中出现的错误
2、生活中的异常:什么是异常,正常的反义词。
赵日天开车去上班,正常情况从家到公司大概30分钟。
一、什么是异常
1、异常的概念:程序中出现的错误
2、生活中的异常:什么是异常,正常的反义词。
赵日天开车去上班,正常情况从家到公司大概30分钟。
异常情况下:堵车、车祸、车子抛锚、没油、碰瓷(很有可能发生,要考虑应对的情况)
异常是不可避免的,所以我们预先有应对的方法。
异常是不可避免的,所以我们预先有应对的方法。
异常发生的时候我们能做什么?不可能一动不动不处理,崩溃在那里?不管怎么样,生活要继续。
堵车---绕路、下车跑去机场。
车祸---报保险、报警
车子抛锚---24小时救援、拖车
没油---搞个瓶子加油去
碰瓷---报警
堵车---绕路、下车跑去机场。
车祸---报保险、报警
车子抛锚---24小时救援、拖车
没油---搞个瓶子加油去
碰瓷---报警
try{
早上起来开车去公司
}catch(堵车异常 d){
d.堵车的具体信息 //输出堵车具体信息,看要怎么处理
System.out.println("绕路吧");
}catch(车祸 h){
h.车祸的具体信息 //输出堵车具体信息,看要怎么处理
System.out.println("报110、120急救");
}
早上起来开车去公司
}catch(堵车异常 d){
d.堵车的具体信息 //输出堵车具体信息,看要怎么处理
System.out.println("绕路吧");
}catch(车祸 h){
h.车祸的具体信息 //输出堵车具体信息,看要怎么处理
System.out.println("报110、120急救");
}
二、异常的分类:异常用try...catch...捕获处理
1、系统错误。(海啸、地震、塘沽大爆炸,O了,啥也不想了,命都没了,你还去啥公司)
(Error) 虚拟机内存溢出,系统崩溃。不能捕获处理。(无法用try...catch...捕获处理)
1、系统错误。(海啸、地震、塘沽大爆炸,O了,啥也不想了,命都没了,你还去啥公司)
(Error) 虚拟机内存溢出,系统崩溃。不能捕获处理。(无法用try...catch...捕获处理)
2、语法错误:(早上起来你疯了、你炸了,还去啥公司,人都不正常,程序都不能运行)
编译时错误(不是异常):语法错误,不能通过编译
(MyEclipse直接以红线的形式提示)(无法用try...catch...捕获处理)
编译时错误(不是异常):语法错误,不能通过编译
(MyEclipse直接以红线的形式提示)(无法用try...catch...捕获处理)
3、程序运行异常:语法没有错误,而运行时违反了java程序的规范而导致程序终止
×××异常,通常意义上指的都是 程序运行异常×××
程序运行异常又可分为:
*系统异常:违反了Java已经定义好的一些规范,如输入不匹配异常,除数为0,数组越界等
java.util.InputMismatchException :输入不匹配异常
Exception in thread "main" java.lang.ArithmeticException: / by zero 算术异常
*自定义异常:违反了程序员自己定义的一些规范,如年龄只能在0-100,输入项只能是1-3等。
三、异常出现的状态(程序运行异常):
程序终止(没运行完就崩溃了),并在控制台显示错误的详细描述信息(车祸,)
System.out.println(1);
int a = 1/0;
System.out.println(2);
程序终止(没运行完就崩溃了),并在控制台显示错误的详细描述信息(车祸,)
System.out.println(1);
int a = 1/0;
System.out.println(2);
四、处理异常的目的:当出现异常时能继续运行程序而不终止,并且控制台显示的方式换成自定义的形式
五、异常处理的一般模式:try catch Exception finally
try :用来监视有可能出现异常的代码块。当出现异常时将异常抛出到catch(可能出现异常的代码)
catch:当出现异常时,负责处理异常的代码块,try中一旦有异常会自动跳转到这里(异常处理)
finally:无论是否有异常,都会执行的代码(清理资源的代码)
try :用来监视有可能出现异常的代码块。当出现异常时将异常抛出到catch(可能出现异常的代码)
catch:当出现异常时,负责处理异常的代码块,try中一旦有异常会自动跳转到这里(异常处理)
finally:无论是否有异常,都会执行的代码(清理资源的代码)
Exception类:异常也是对象,都属于Exception类,抛出到catch块中的就是个异常对象。
使用异常对象来获得异常信息。
使用异常对象来获得异常信息。
6.多重try catch语句
a.运行时异常的常见种类:
数组下标越界 :java.lang.ArrayIndexOutOfBoundsException
除数为0 :java.lang.ArithmeticException
空指针异常:java.lang.NullPointExcpeiton
输入格式错误:java.util.InputMismatchException
连不上网络:
打不开文件:
......
b.异常的继承体系:
见图片文件。
系统异常又可分为运行时异常与资源访问异常(文件操作,数据库读取等)
c.多重catch语句:
当一段代码中可能出现多种类型异常时,可以接上多个catch块分别处理不同类型的异常。系统会自动选择最适合的catch块来处理异常。
可以处理多种异常,但每次只会处理一个。
一般在最后加上处理Exception类型的异常表示其他未知错误。
d.try catch 可以嵌套使用
a.运行时异常的常见种类:
数组下标越界 :java.lang.ArrayIndexOutOfBoundsException
除数为0 :java.lang.ArithmeticException
空指针异常:java.lang.NullPointExcpeiton
输入格式错误:java.util.InputMismatchException
连不上网络:
打不开文件:
......
b.异常的继承体系:
见图片文件。
系统异常又可分为运行时异常与资源访问异常(文件操作,数据库读取等)
c.多重catch语句:
当一段代码中可能出现多种类型异常时,可以接上多个catch块分别处理不同类型的异常。系统会自动选择最适合的catch块来处理异常。
可以处理多种异常,但每次只会处理一个。
一般在最后加上处理Exception类型的异常表示其他未知错误。
d.try catch 可以嵌套使用
总结:1、程序员对Error无能为力,只能处理Exception。
2、对异常的处理关系的程序的健壮性。
3、使用try...catch...finally来处理可能出现异常的代码。
2、对异常的处理关系的程序的健壮性。
3、使用try...catch...finally来处理可能出现异常的代码。
六、自定义异常的处理
a.自定义异常类,继承与Exception,在构造函数中使用super(String)向父类传递一个表示异常信息的字符串。
b.抛出自定义异常对象的方式:throw new XXXException().
c.处理自定义异常的方式:catch 等同与处理系统异常。
1、throw关键字:年龄、身高负数等Java虚拟机判断不了的异常,自己定义一个异常对象,然后用throw抛出
七、throw和throws关键字
2、throws关键字
a.作用:在Java中允许在一个函数内,如果有异常函数内部不处理而使用throws关键字表示该函数会抛出的异常类型。这些异常将交给调用该函数的其他函数负责处理
b.其他函数调用时则必须处理 或者可以使用throws继续向上层调用者抛出。
c.所有继承于RunTimeException的异常不可用throws抛出,在函数内部必须处理。
2、throws关键字
a.作用:在Java中允许在一个函数内,如果有异常函数内部不处理而使用throws关键字表示该函数会抛出的异常类型。这些异常将交给调用该函数的其他函数负责处理
b.其他函数调用时则必须处理 或者可以使用throws继续向上层调用者抛出。
c.所有继承于RunTimeException的异常不可用throws抛出,在函数内部必须处理。
异常又分为:
uncheck Exception: RuntimeException
check Exception: 极有可能出错必须检查捕捉
选择:1、可以在方法中用try...catch...捕捉处理
2、在方法后用throws声明抛出异常,由调用该方法的其他方法负责处理
选择:1、可以在方法中用try...catch...捕捉处理
2、在方法后用throws声明抛出异常,由调用该方法的其他方法负责处理