Java基础知识—异常处理

1.1 finally块中的代码什么时候执行

finally代码块的作用就是为了保证无论出现什么情况,finally中的代码一定会执行,在return前执行。如果try-finally或者catch-finally中都有return,那么finally块中的return语句将会覆盖别处的return语句;

引申:
出现在java中的finally块中的代码不一定会被执行

  • 当程序在进入try语句块之前就出现异常时,会直接结束,不会执行finally块中的代码;
  • 当程序在执行try中强制退出时也不会执行finally块中的代码;

1.2 异常处理的原理是什么?

异常是指程序运行时所发生的非正常情况或错误,当程序违反了语义规则时,JVM就会将出现的错误表示为一个异常并且抛出,这个异常在catch程序块中进行捕获,然后进行处理,异常处理的目的是为了提高程序的安全性与鲁棒性。

Java中把异常当对象来处理,并且定义了一个基类(java.lang.Throwable)作为所有异常的父类,这些异常类分为Error(错误)和Exception(异常)。Error、Exception和RuntimeException都是Throwable,都可以用throw抛出;

违反语义规则包括两种情况:一种是Java类库中内置的语义检查,例如当发生数组越界时,会引发IndexOutOfBoundsException,当访问null对象时,会引发NullPointerException;另一种情况是Java允许开发人员扩展这种语义检查,开发人员可以创建自己的异常类(所有异常都是Java.lang.Throwable的子类),自由选择在何时用throw关键字抛出异常;

1.3 运行时异常和普通异常有什么区别

Java提供了两种错误的异常类,分别是ErrorException,都拥有一个父类——Throwable;

Exception表示可以恢复的异常,是编译器可以捕获的,包含两种类型:检查异常(checked exception)和运行时异常(runtime Exception);

  • checkedException发生在编译时期,必须要使用try…catch(或者throws),否则编译不通过,Java编译器会强制编译器去捕获此类型的异常,把对异常处理的代码放到catch块中,这种异常情况通常是在以下情况中使用:
    1、异常的发生不会导致程序出错,进行处理后还可以继续执行后面的操作;
    2、程序依赖于不可靠的外部条件,例如系统IO;

  • 运行时异常:编译器没有对其进行强制捕获处理,不对其进行处理,会由JVM进行处理。出现运行时异常时,系统会把异常一直往上层抛,直到遇到处理代码为止;多线程就采用Thread.run()方法抛出,单线程就用main()方法抛出;

1.4 常见的异常

NullPointerException(空指针异常)、ClassCastException(类型转换异常)
ArrayIndexOutOfBoundException(数组越界异常)、ArrayStoreException(数组存储异常)
BufferoverflowException(缓冲区溢出异常)、ArithmeticException(算术异常)

1.5 throw和throws有什么区别?

throw关键字用来在程序中明确的抛出异常,throw用来表明方法不能处理的异常。每个方法都必须指定哪些异常不能处理,所以方法的调用者才能够保证可能发生的多个异常,多个异常用逗号间隔。

1.6 java异常体系

java异常体系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值