JAVA学习DAY-10

目录

一、异常体系

关键字throw和throws

 异常对象中有什么?

Exception和Error的区别

Exception和RuntimeException的区别

常见的异常有哪些

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

一般会在finally块中做什么

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

二、关键字整理

 


 

一、异常体系

异常是一个对象

Java把异常也封装成为了对象

异常体系图:

 

关键字throw和throws

1.throw的作用与return很像

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

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

调用方的代码处于上层,被调用方的代码处于下层

上层代码调用下层代码的时候

下层可以同时有正常返回和异常返回两种返回方式

下层可以没有任何返回

下层可以只有正常返回

下层也可以只有异常返回

下层方法中正常返回用return

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

上层接收下层正常返回的结果的语法是:

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

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

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

 

逐级往上抛异常:

解决方式

 异常对象中有什么?

1.异常信息

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

2.异常发源地的追踪信息

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

err打印出来红色的

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

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中改变了返回的变量的值, 也不会对最终返回值产生影响。

二、关键字整理

.

.final 修饰符 - 最终的

修饰变量,称为常量,值不可以修改
修饰方法,称为最终方法,方法不可以被子类重写
修饰类,称为最终类,类不可以被继承


abstract关键字是否可以与final同时出现或者能不能同时用abstract和final修饰类或者方法

答案是不能,原因是        

        1.abstract修饰的类称为抽象类,抽象类不能被实例化,只能被继承,而final是阻止类被继承

        2.abstract修饰的方法称为抽象方法,抽象方法必须让子类重写,而final是阻止子类重写

final修饰的变量真的不能改变吗?

        如果final修饰的变量是基本数据类型,指向常量池,那么值不可以被修改

        如果final修饰的变量是引用数据类型,指向堆,那么指针不可以修改,但是指针指向的对象内的成员可以修改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值