目录
异常的组成:运行异常与编译异常
两者区别:编译异常用来提醒程序员,运行异常大部分是由于参数传递错误导致
异常作用:
作用1:就是平时的报错,方便我们找到报错的来源
作用2:在方法内部将异常返回给调用处,了解底层执行情况:
异常的处理方式:3种
1、默认方式:打印异常信息,并且不再执行下方的所有代码
2、自己处理(捕获异常):代码出现异常后,也可以继续执行下面的代码
利用格式:
示例2:
注意点:
关于自己处理的四个问题:
1、如果try中没有遇到问题,如何执行?
2、如果try中遇到很多问题,如何执行?
为什么要把父类异常对象放最后? 和多态有关
多种异常采用一种捕捉方式时,可以这样写:"|"
3、try中遇到的异常没有被捕获,怎么执行?
4、try中如果遇到问题,try下面的代码还会执行吗?(可以结合问题2看)
3、抛出异常的格式:throw和throws
示例:
异常中的常见方法:第三个最常用
关于第三条的细节:
1、只是打印异常信息,并不会终止程序
2、printStackTrace源码中:
自定义异常:针对具体异常的自定义,使得异常更加清晰
以一道例题展开说明:
自定义什么?
自定义异常:
一般命名:
一般只重写继承父类异常的前两个方法,一个空参一个带参
解题过程:
如果不采取自定义,采用广义的运行异常的对象RuntimeException e:
异常的组成:运行异常与编译异常
两者区别:编译异常用来提醒程序员,运行异常大部分是由于参数传递错误导致
异常作用:
作用1:就是平时的报错,方便我们找到报错的来源
作用2:在方法内部将异常返回给调用处,了解底层执行情况:
如:我要输入学生年龄,限制在18-40,可以进行如下操作:throw一个异常对象,让调用处知道已经出错,方便后面利用try,catch进行异常获取,进行下面第二个图的操作,可自主进行选择
异常的处理方式:3种
1、默认方式:打印异常信息,并且不再执行下方的所有代码
示例1:
2、自己处理(捕获异常):代码出现异常后,也可以继续执行下面的代码
利用格式:
示例2:
注意点:
关于自己处理的四个问题:
1、如果try中没有遇到问题,如何执行?
会只把try中代码执行完毕,不会执行catch中的代码(只有出现异常时,才会进入catch)
2、如果try中遇到很多问题,如何执行?
try中出现很多问题,会写多个catch与之对应,保证其中任何一个问题出现,都可以被捕获,但是,当一个异常出现后,将不再执行这个异常后面的其他语句异常,跳出try,执行catch对应的异常捕获。因为代码中可能存在多个不同的异常情况,这个多个catch的主要目的是为了:捕获这段代码中出现了异常的这种现象,而不是要把所有异常都捕获出来,捕获出其中一个异常后,他的目标就已经实现了。
为什么要把父类异常对象放最后? 和多态有关
catch多重异常时,子异常类必须在它们任何父类之前。因为运用父类的catch语句将捕获该类型及其所有子类类型的异常。这样,如果子类在父类后面,子类将永远不会到达。你想写也不行,系统会报编译错误。
多种异常采用一种捕捉方式时,可以这样写:"|"
3、try中遇到的异常没有被捕获,怎么执行?
没有被捕获,说明try中的异常和catch中的异常对象不相同,此时相当于白写了这个try..catch,直接采用JVM默认方法
4、try中如果遇到问题,try下面的代码还会执行吗?(可以结合问题2看)
3、抛出异常的格式:throw和throws
示例:
异常中的常见方法:第三个最常用
关于第三条的细节:
1、只是打印异常信息,并不会终止程序
2、printStackTrace源码中:
自定义异常:针对具体异常的自定义,使得异常更加清晰
以一道例题展开说明:
自定义什么?
长度在3-10间,年龄在18-40岁间这些显然不是RuntimeException里面定义好的异常,如果触发了这些异常,为了更加清晰表明到底是哪种,需要自定义异常。
自定义异常:
一般命名:
一般只重写继承父类异常的前两个方法,一个空参一个带参
解题过程:
定义年龄异常:
public class NameFormatException extends RuntimeException{
public NameFormatException() {
super();
}
public NameFormatException(String message) {
super(message);
}
}
定义名字异常:
public class AgeOutOfBoundsException extends RuntimeException{
public AgeOutOfBoundsException() {
super();
}
public AgeOutOfBoundsException(String message) {
super(message);
}
}
在javabean文件中:调用并抛出
实现类: