概念
异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。
异常的分类
1)所有异常的根类为java.lang.Throwable
注意:RuntimeException:可以不进行捕获处理,但CheckException必须进行处理,否则无法通过编译(异常处理的方式见后面的异常处理方式)
2)几种常见的运行时异常
1.算术异常:java.lang.ArithmeticException
2.输入不匹配异常:java.lang.InputMismatchException
3.空指针异常,试图访问空对象的属性或方法:java.lang.NullPointerException
4.数组下标越界异常: java.lang.ArrayIndexOutOfBoundsException
5.字符串下标越界:java.lang.StringIndexOutOfBoundsException
6.类型转换异常:java.lang.ClassCastException
7.数字转换异常:java.lang.NumberFormatException
异常的处理方式(1)(2)(3)
(1)如何避免运行时异常:通过严谨的判断防止潜在的运行时异常发生(if条件语句)
编写代码及运行结果:
(2)捕获异常
try...catch...finally关键字
1.try...catch
try{
可能出现的异常代码;
}catch(异常代码 e){
异常处理;
}
2.try...finally
try{
可能出现的异常代码;
}finally{
一定会被执行的代码;
}
3. try...catch...finally
try{
可能出现的异常代码;
}catch(异常类型 e){
异常处理;
}finally{
一定会被执行的代码;
}
编写代码:
运行结果:
注意:1.出现的异常和catch中异常一致时,才会打印输出异常处理中的内容
2.finally中的内容一定会被执行
编写代码:
运行结果1:
运行结果2:
注意:3. try...catch...finally的另一种写法
try{
可能出现异常的代码;
}catch(异常类型1|异常类型2...){
异常处理;
} finally{
一定会被执行的代码;
}
编写代码:
运行结果:
(3)声明异常
1)throws和throw
throws
作用: 通过throws声明异常,跟在方法声明的后面,用于告知方法的调用者该方法可能存在异常
如何解决异常:(1)方法的调用者可以使用try..catch...finally捕获异常
(2)通过throws继续将异常声明出去
throw:作用:通过throw抛出异常,放在方法内部,用于抛出具体的异常,经常与throws结合使用
2)throw和throws的区别
1.位置不同:throws跟在方法声明的后面,用于声明异常,提醒调用者该方法可能存在异常,而throw位于方法内部,用于抛出具体的异常
2.类型不同:throws后跟的是异常类型,throw后跟的是具体的异常
3)继承关系中的声明异常
1.父类方法声明了 Exception 类型的异常,子类在重写该方法时,可以声明也可以不声明异常。但是如果子类重写后的的方法使用 super 关键字调用父类的方法,那么要求必须对异常进行处理:给子类中重写的的方法也声明异常
2.如果父类的方法没有异常,并且子类的方法如果一定会有 Exception 或 Checked 异常,要求子类必须自己使用 try-catch 处理,或者给父类方法加上异常的声明
3.如果子类在重写父类的方法时,产生的异常是RuntimeException 异常时,那么可以不用处理
编写代码:
自定义异常
1)为什么需要自定义异常
在程序中,可能会遇到JDK提供的任何标准异常类都无法充分描述清楚我们想要表达的问题,这种情况下可以创建自己的异常类,即自定义异常类。
2)自定义异常的步骤
1.编写一个类继承Exception
2.编写该类的构造方法,并在构造方法中调用父类(Exception)中的构造方法为消息赋值
3.可以通过getMessage()方法获取消息信息
编写代码:
运行结果: