Java异常必备知识点

Java异常框架

这里写图片描述

1.Throwble
    Throwable是Java语言所有错误或者异常的超类。
    Throwable包含两个子类:Error和Exception
2.Exception
    Exception及其子类是Throwable的一种形式,它合理的指出了应用程序想要捕获的条件。
3.RuntimeException
    RuntimeException是那些可能在Java虚拟机正常运行期间抛出的异常的超类。
    编译器不会检查RuntimeException异常。若代码会产生RuntimeException异常,则需要通过修改代码进行避免。
4.Error
    和Exception一样,Error也是Throwable的子类。用于显示合理的程序不应该视图捕获的严重问题,
    大多数这样的错误都是异常条件。编译器也不会检查Error。
5.自定义异常
    在Java中可以自定义异常,但是应该注意:所有的异常都应该是Throwable的子类,若希望是检查性异常类,
    需要继承Exception类,若希望是运行时异常类,则需要继承RuntimeException类。
Java异常机制中的关键字
try、catch、finally、throws、throw
(1)try/catch
try和catch关键字可以捕获异常。try/catch代码块放在异常可能发生的地方,
其代码块中的代码称为保护代码。catch语句中要包含异常类型的声明。当保护代码中
异常会被传递到catch块中。
try{
//程序代码
}catchException e){
//catch块
}
(2)throw/throws
throw关键字可以抛出一个异常,无论是新实例化的还是刚才捕获到的。
throws关键字房子啊方法签名的尾部。若一个方法没有捕获到一个检查异常,
那么该方法必须使用throws关键字来声明。一个方法可以声明抛出多个异常,多个异常之间用“,”分隔。
(3)finally
finally关键字用来创建在try代码块后面执行的代码块。无论是否发生异常,finally代码块中的代码都会执行。
使用了return或throw等终止方法的语句,则就不会跳出执行,直至停止。

注意:catch不能独立于try存在
     在try/catch后面添加finally并不是强制要求
     try代码块后面不能既没有catch也没有finally
异常的分类及常见的异常
异常分为运行时异常(RuntimeException)和非运行时异常。
运行时异常和非运行时异常的区别是运行时异常又被称为非检查异常,非运行时异常指的是检查异常。
运行时异常是指直接或者间接的继承RuntimeException的异常。非运行异常是指除了RuntimeException之外的其他异常,是程序逻辑错误,程序员应该积极的避免其出现的异常。Java编译器要求方法必须声明抛出可能发生的非运行时异常,到那时并不要求声明抛出未被捕获的运行时异常。
常见的运行时异常:
(1)NullPointerException(空指针异常):当操作一个空引用时会出现此异常。
(2)NumberFormatException(数字格式化异常):视图将字符串转化为一种数值类型,但是字符串不能转化为适当格式时,抛出此异常。
(3)ClassCastException(类型转换异常):强制类型转换类型不匹配时出现此异常。
(4)ArrayIndexOutOfBoundsException(数组下标越界异常):当使用一个不存在的数组的下标时出现此异常。
(5)ArithmeticException(数字异常):当出现异常的运算条件时出现的异常。
常见的非运行时异常:
(1)SQLException:提供关于数据库访问错误的异常
(2)IOException:当发生某种I/O异常时,抛出此异常。
(3)ClassNotFoundException:当应用程序试图使用Class类中的forName方法、loadClass方法时,抛出此异常。
Java中检查型异常和非检查型异常有什么区别
检查型异常(Checked Exception):这类异常都是Exception的子类。
非检查型异常(Unchecked Exception):Error和RuntimeException及其子类
主要区别在于其处理方法上。
   检查异常需要使用try,catch和finally关键字在编译期间进行处理,否则会出现编译期报错,
   RuntimeException是程序有逻辑错误,程序员应该避免此类错误的出现。
final、finally、finalize的区别
(1)final是一个修饰符。
如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承,
    因此一个类不能既被声明为abstract又被声明为final;
方法或者变量被声明为final,可以保证其在使用中不被改变;被声明的final变量
    必须在声明时给定初始值,而在以后的引用中只能读取,不可以进行修改;
    被声明为fina的方法同样也只能使用不能重载。
(2)finally用在异常处理时提供finally块来执行任何清理操作;若抛出异常,
    那么匹配的catch子句就会执行,然后控制就会进入finally块中(如果存在)。
(3)finalize是方法名,Java中允许使用finalize()方法在垃圾回收器将对象从
     内存中清理出去之前做必要的清理工作。这个方法是由垃圾收集器在确定对象
     没有被引用时对这个对象调用的。它是Object类中定义的,因此所有的类都继承了它。
     子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。
Java中NullPointerException和ArrayIndexOutOfBoundException区别
这两个异常都是非检查异常,都继承自RuntimeException。
通常在操作一个空引用时会产生NullPointerException,如空引用调用属性或者方法时。
ArrayIndexOutOfBoundException是在使用一个不存在的数组下标时抛出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值