Day-8

目录

异常体系整理

      异常类型反应了“什么”被抛出

      异常堆栈跟踪反应了“在哪”抛出

      异常信息反应了“为什么”会抛出

Java异常体系类图

Exception和Error的区别

Exception和RuntimeException的区别

常见的异常有哪些

什么是NPE, 为什么会发生NPE

NPE指空指针异常(NullPointerException),

什么是OOM, 为什么会发生OOM

OOM指内存溢出(OutOfMemoryError),

throw和throws的区别

throw和return的区别

try-catch-finally语法中那一部分可以省略

一般会在finally块中做什么

try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗


异常体系整理

什么是异常处理

  1. 异常是被调用方向调用方传递错误信息的一种途径, 当被调用方的方法在执行过程中出现了问题, 可以通过抛出异常对象, 让调用方捕捉从而实现错误信息的传递。
  2. 使用异常机制可以保证程序代码更加优雅,并提高程序健壮性。
  3. 被调用方抛出的异常对象能清晰的向调用方反应what, where, why这3个问题:

      异常类型反应了“什么”被抛出

      异常堆栈跟踪反应了“在哪”抛出

      异常信息反应了“为什么”会抛出

Java异常体系类图

Exception和Error的区别

Exception和Error同属于Throwable的直接子类, 是2个体系

Exception 体系的错误是可以在应用程序中进行捕获并处理的,通常遇到这种错误,应对其进行处理,使应用程序可以继续正常运行。

Error体系的错误通常为虚拟机相关错误,如系统崩溃,内存不足,堆栈溢出等,编译器不会对这类错误进行检测, 我们也不需要对这类错误进行捕获处理(因为你捕捉了也没用), 一旦这类错误发生, 应用程序会被终止。

Exception和RuntimeException的区别

RuntimeException是Exception的子类

Exception是受检的, 称为编译时异常

RuntimeException是不受检的, 称为运行时异常

PS: 这题的问法也可能是 "受检异常和不受检异常的区别是什么"

答: 受检异常指的是在编译时接受编译器的检查, 如果没有处理异常则不能通过编译, Exception类及其子类都属于受检异常, RuntimeException类受检: 接受编译器的检查

常见的异常有哪些

Error错误(不受检)

Exception 编译时异常 (受检)

RuntimeException运行时异常 (不受检)

内存溢出

OutOfMemoryError

数据库异常

SQLException

空指针异常

NullPointerException

栈溢出

StackOverflowError

类找不到异常

ClassNotFoundException

类型转换异常

ClassCastException

IO流异常

IOException

算术异常

ArithmeticException

文件找不到异常

FileNotFoundException

索引越界异常

IndexOutOfBoundsException

输入不匹配异常

InputMismatchException

数字转换异常

NumberFormatException

什么是NPE, 为什么会发生NPE

NPE指空指针异常(NullPointerException),

本身引用的内容是空的,比如获取一个对象的值,但是这个对象在逻辑中没拿到值,变成了null

什么是OOM, 为什么会发生OOM

OOM指内存溢出(OutOfMemoryError),

自身原因: 比如虚拟机本身可使用的内存太少。外在原因: 如应用使用的太多, 且用完没释放, 浪费了内存。此时就会造成内存泄露或者内存溢出。

throw和throws的区别

Throw:

  1. 作用在方法内,表示抛出具体异常,由方法体内的语句处理。
  2. 具体向外抛出的动作,所以它抛出的是一个异常实体类。若执行了Throw一定是抛出了某种异常。

Throws:

  1. 作用在方法的声明上,表示如果抛出异常,则由该方法的调用者来进行异常处理。
  2. 主要的声明这个方法会抛出会抛出某种类型的异常,让它的使用者知道捕获异常的类型。
  3. 出现异常是一种可能性,但不一定会发生异常。

throw和return的区别

return 的作用是方法返回,并且可以根据返回值类型返回相应的变量

throw 的作用也是方法返回,但是只能返回异常对象,也就是说throw后面跟的对象必须是Throwable的子类创建的.

try-catch-finally语法中那一部分可以省略

try不可以省略

catch可以省略  

finally可以省略

catch和finally不可以同时省略

try-catch: try中发生的异常被catch捕捉, 程序可以继续往后运行

try-finally: try中发生的异常没有被程序捕捉, 程序会立即退出, 但退出之前会执行finally

try-catch-finally: try中发生异常, 异常代码后面的代码不会执行, 直接进入catch, try中没有发生异常, 不会进入catch, 无论是否发生异常, finally都会执行

一般会在finally块中做什么

在try-catch-finally语法中, 无论执行try还是catch, 最终都会执行finally, 所有我们一般把在try中打开的资源放在finally中进行释放

例如: 在try中创建了数据库连接, 在finally中关闭

         在try中创建的IO流, 在finally中关闭

try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗

finally会在return之前执行, 但是finally中无法改变返回值的结果

可以理解为执行return的时候, 先确定下了返回值, 但方法还没有出栈, 然后执行finally, 如果finally中改变了返回的变量的值, 也不会对最终返回值产生影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值