JAVA-DAY10(异常体系整理)

异常体系的整理 

  1,什么是异常处理

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

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

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

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

  2,Java异常体系类图

3,Exception和Error的区别

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

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

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

4,Exception和RuntimeException的区别

RuntimeException是Exception的子类

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

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

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

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

5,关键字throw和throws

       1) throw的作用与return相似。

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

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

调用方的代码处于上层,被调用方的代码处于下层。上层代码调用下层代码的时候,下层可以同时有正常返回和异常返回两种方式。下层可以没有任何返回,下层可以只有正常返回,下层可以只有异常返回。

  下层方法中正常返回用return;下层方法异常返回(抛出)用throw

2)throw和throws的区别

区别一:throw 是语句抛出一个异常;throws 是方法抛出一个异常;

区别二:throws可以单独使用,但throw不能;

区别三:throw要么和try-catch-finally语句配套使用,要么与throws配套使用。但throws可以单独使用,然后再由处理异常的方法捕获。

   上层接收下层返回的结果语法是:数据类型  变量=方法{};

 1,变量用于接收下层方法的返回值,它的数据类型必须与下层方法中的返回值类型一样或者兼容

 2,上层接收下层异常抛出的对象语法是: try{

                                                                           数据类型  变量=方法();

                                                                      }catch(数据类型    变量)

     正常返回:下层是返回,上层是接收

     异常返回:下层是抛出,上层是捕捉

 异常对象中有什么?   

1,异常信息

下层代码构造异常对象的时候,可以在构造方法中传入一个String类型的异常信息,这个异常信息会存储在Throwable中的detailMessage成员变量中,上层代码在捕捉到异常对象后可以使用getMessage()读取到下层返回的异常信息

2,打印异常的追踪栈信息

当下层代码构造异常对象的时候,会创建一个栈,存储本次代码执行过程中所涉及到的所有的方法信息,这些信息包括:1.方法入栈执行的先后顺序,2.出异常

 

 

常见的异常有哪些?

  受检:接受编译器的检查

Error错误(不受检)Exception编译时异常(受检)RuntimeException运行时异常(不受检)

内存溢出

OutOfMerroryError

(数据库异常)

SQLException

NullPointerException空指针异常

栈溢出

StackOverflowError

(类找不到异常)ClassNotFoundExceptionClassCastException(类型转换异常)

IO流异常

IOException

IndexOutOfBoundsException(索引越界)

文件找不到异常

FileNotFoundException

ArithmeticException(算术异常)
InputMismatchException(输入不匹配异常)
NumberFormatException(数字转换异常)

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-catch-finally中,如果catch中return了,finally还会执行吗?

   finally会在return之前执行,但是finally中无法改变返回值结果。可以理解为执行return的时候,先确定下了返回值,但是方法还没出栈,然后执行finally改变

     例如:在try中创建了数据库连接 

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

编程语言中的空指针异常。

当程序运行中,试图在需要对象的地方使用某一个对象时,发现对象为 null ,此时抛出该异常。这种情况包括:

  • 调用 null 对象的实例方法。

  • 访问或修改 null 对象的字段。

  • 将 null 作为一个数组,获得其长度。

  • 将 null 作为一个数组,访问或修改其时间片。

  • 将 null 作为 Throwable 值抛出。

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

一、OOM含义:
OOM,全称“OutOfMemory",意思是“内存用完了”。它来源无java.lang.OutofMemoryError
二、为什么会出现 java.lang.OutOfMemoryError:即 OOM;
官方介绍为当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出java.lang.OutOfMemoryError:…(注意:这是个很严重的问题,因为这个问题已经严重到不足以被应用处理)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值