异常:
子类继承父类的方法重写时,子类抛出异常不能多于父类抛出的异常。子类抛出的异常需要更具体。也就是父类同名方法子异常。
异常的父类都是:throwable
子类:error,exception;
1、异常(throwable):程序运行过程中出现不正常的现象。
2、子类;error(针对进程,导致jvm停止)、Exception(针对线程)
3、非检查异常(非受检异常、为检查异常)运行时异常:可以避免、不强制处理。共同的父类:RuntimeExpction。
自定义异常可以选择继承 RuntimeExpction ,然后选择重写RuntimeExpction的方法。在try(){
throws new XXException(自定义的异常,继承于RuntimeExpction或者Expction)
}catch(Exception e){
e.重写的RuntimeExpction里面的方法名,有异常时就可以显示我们想要的异常信息
}
try {
if (age < 0) {
throw new AgeLTOException();
}else if (age>150) {
throw new AgeGT150Exception();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
// catch (AgeGT150Exception e) {
// // TODO: handle exception
// e.printStackTrace();
// }
常见的RuntimeExpection有:
NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常
4、检查异常(受检异常、已检查异常)一般异常:不可避免,强制处理。提前预期处理,否则不能通过编译。javac。
5、异常都是继承throwable类。
6、处理异常:
(1)、第一种处理方式,在可能出现异常的方法后面用throws Expection抛出异常,若有有多个,则用逗号隔开。
如果异常最初出现的方法利用throws抛出异常,并没有真正处理异常,那么调用他的方法时要处理异常或者抛出异常。
(2)、try{
}catch(Expection e){
catch可以有多个。。。。
}catch(Expection e){
}………….
新版本处理捕获多个异常;
try(){
}catch(XXExpection | XXXXExpection e){
}
注意:(1)、用throws抛出异常来处理的时候,可以用该异常的父类来代替。
(2)、try{
}catch(Expection e){
}
catch(Expection e){
}finally{
//无论有没有抛出异常,finally都会执行
}
(3)、子类继承父类的方法重写时,子类抛出异常不能多于父类抛出的异常。子类抛出的异常需要更具体。也就是父类同名方法子异常。
7、自定义异常:
继承Expection或者RuntimeExpection
import java.util.Scanner;
/**
* 自定义异常
* @author zhaojw
*
*/
public class MyException {
public static void main(String[] args) {
Division division=new Division();
Scanner scanner=new Scanner(System.in);
System.out.println("请输入被除数x:");
int x=scanner.nextInt();
System.out.println("请输入除数y:");
int y=scanner.nextInt();
try {
int result=division.division(x, y);
System.out.println(x+"除以"+y+"的结果为:"+result);
} catch (NumberException e) {
e.printStackTrace();
}
}
}
class NumberException extends Exception{
private static final long serialVersionUID = 1L;
public NumberException(String message){
super(message);
}
}
class Division{
public int division(int x,int y) throws NumberException{
if (y<0) {
throw new NumberException("输入的数是"+y+",是一个负数,规定负数不能为除数。");
}
if (y==0) {
throw new NumberException("输入的数是"+y+",是零,规定零不能为除数。");
}
return x/y;
}
}