第三章 异常

一、异常的理解

1. 异常:程序运行过程中出现的非正常的情况。

2. 异常的分类:

(1) 父类型:Throwable,位于 java.lang包中,Throwable 类是 Java 语言中所有错误或异常的超类(父类)

(2) 子类:Error,代表错误

(3) 子类:Exception,代表异常

二、异常的分类:【企业面试重点 + 考试重点】

1. Throwable:Throwable 类是 Java 语言中所有错误或异常的超类(父类)

(1) 提供的构造方法:   Throwable():无参数的构造方法   Throwable(String message):有参数的构造方法,参数代表异常信息

(2) 提供功能方法:   public void printStackTrace():打印输出异常的详细信息,用于开发人员调整程序应用   public String getMessage():获取字符串类型的异常信息,用于给用户展示提示信息

2. 子类:Error,代表错误

(1) Error 是 Throwable 的子类,用于指示合理的应用程序不应该试图捕获的严重问题

(2) 案例:内存空间不足,或是Java虚拟机方法调用时栈溢出java.lang.StackOverflowError(栈溢出)。

(3) 特点:遇到这样的错误,程序中无法处理。

3. 子类: Exception ,代表异常

(1) 运行时异常:RuntimeException及其子类异常都为运行时异常   a. 特点:编译过程编译器不检测,运行过程中报错   b. 处理:这种异常可以避免,可以处理也可以不处理。   c. 常见的运行时异常:       java.lang.ArrayIndexOutOfBoundsException(数组下标越界)       java.lang.IndexOutOfBoundsException(下标越界-List集合)       java.lang.StringIndexOutOfBoundsException(字符串下标越界)       java.lang.ClassCastException(类型转换异常)       java.lang.NullPointerException(空指针异常)       java.lang.NumberFormatException(数字格式转换异常)

(2) 非运行时异常:和RuntimeException没有任何继承关系的异常类,称为非运行时异常(已检查异常)   a. 特点:编译过程编译器检测,编译过程中报错   b. 处理:必须处理,否则无法运行   c. 案例:Class.forName("hello");   d. 注意:编译报错可能出现的原因:           i. 语法错误   -> 修正 语法代码           ii. 出现非运行时异常-》需要异常处理才能解决

三、异常产生的原因

1. 自动产生异常:

(1) 运行程序时,遇到错误的代码,自动产生异常,程序自动终止

(2) 结果:程序因为异常而被终止

2. 手动产生异常:

(1) 关键字:throw

(2) 位置:必须应用方法内部

(3) 语法:throw new 异常类名();

(4) 结果:程序会被终止调用

四、异常的传递

异常传递: 按着方法的调用链方向反方向传递,直至JVM,最终导致程序终止。

五、异常的处理【企业开发的重点】

1. 消极处理异常:声明异常

(1) 关键字:throws

(2) 位置:定义在方法的声明

(3) 语法:   修饰符 返回值类型 方法名(形参)throws 异常类名1,异常类名2{}

(4) 作用:消极处理异常可以让非运行时异常编译通过,但是没有从根本上解决问题,只是推卸责任,最终程序还是 因为异常而被终止

(5) 注意:可以利用父类型处理子类型的异常

2. 积极处理异常:捕获异常

(1) 位置:定义在方法的内部

(2) 语法:       try{           // 可能出现异常的语句       }catch(){           // 当异常出现时,执行的语句       }

(3) try后面可以跟多个 catch结构,从上往下依次匹配;借助多态的语法,利用父类型处理子类型的异常,但是子 类在前,父类在后

(4) finally:应用在积极处理异常语法中   i. finally中定义的语句:不管有没有都会执行

ii. try..catch...finally         try{             //可能出现的异常语句         }catch(异常类名 e){               //异常处理语句         }finally{             //在任何情况下都必须执行的代码         }

六、自定义异常类

1. 定义一个类继承 异常类

(1) 定义异常类如果为运行时异常,则需要继承 RuntimeException   class CheckedPasswordException extends RuntimeException{}

(2) 定义异常类如果为非运行时异常,则需要继承 Exception   class CheckedPasswordException extends Exception{}

2. 提供 两个构造方法

(1) 一个无参数的构造方法    

(2) 有参数的构造方法:带有字符串类型参数的构造方法   public CheckedPasswordException(String message){       super(message);   }

// 自定义异常类 class CheckedPasswordException extends Exception{   public CheckedPasswordException(){}   public CheckedPasswordException(String message){       super(message);   } }

七、方法的覆盖【终极版 -- 企业面试重点+企业级开发重点-细节处理+考试重点】

1. 子类的方法名、形参列表、返回值类型 和 父类相同

2. 子类的访问修饰符和父类相同或是比父类更宽

3. 子类不能抛出比父类更多、更宽的异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值