Java第十课

Java关键字

Java关键字整理
基本数据类型直接量流程控制修饰符面向对象异常处理其他保留字
选择分支循环其他权限其他类型继承/实现对象其他
bytetrueifdobreakprivatestaticpackageclassextendsnewvoidtrytransientgoto
shortfalseelsewhilecontinueprotectedfinalimportinterfaceimplementsinstanceofcatchvolatileconst
intnullswitchforreturnpublicabstractenumthisfinallynative
longcasesuperthrowsynchronized
floatdefaultthrows
double
char
boolean

异常体系整理

什么是异常处理

  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,查询不到开辟的内存空间,系统会出现NPE

如何防止NPE?

因为NPE出现的关键是指针为null,所以当我们使用指针进行操作的时候,如果不确定指针是否为null,应该对指针做非空判断,判断指针为null时,使用new关键字开辟内存空间,来防止NPE出现

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

内存溢出OutOfMemoryError当jvm进行内存垃圾回收的时候,有的元素数据依然被指针指向导致无法回收,累积下来会导致内存不足溢出,会发生OOM

throw和throws的区别

  1. throw是语句抛出一个异常,当程序出现某种逻辑错误时由程序员主动抛出某种特定类型的异常;throws是方法可能抛出异常的声明(用在声明方法时,表示该方法可能要抛出异常),当某个方法可能会抛出某种异常时用于throws 声明可能抛出的异常,然后交给上层调用它的方法程序处理

  2. throws出现在方法函数头;而throw出现在函数体。

  3. throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。

  4. 两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

throw和return的区别

  1. Throw的作用与return很像

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

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

  4. 正常返回用return;异常抛出用throw

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、付费专栏及课程。

余额充值