JAVASE 学习笔记(面向对象------异常机制)

Error 和Exception的区别

ERROR:程序无法处理,出现时JVM会终止线程。

Exception:通常情况下是可以被程序所处理的,并且在程序中应该尽可能去处理这些异常。

JAVASE 学习笔记(面向对象------异常机制)

JAVASE 学习笔记(面向对象------异常机制)

异常指的是程序运行中出现的不期而至的各种状况如:

1.输入不符合要求

2.文件不存在或者格式不对

3.读取的数据库是空的

4.内部或者硬盘满了......等等

JAVASE 学习笔记(面向对象------异常机制)

需要掌握的三种异常类型:

RuntimeException:编译通过,运行时才会被发现。

一般由程序员写代码时出现的逻辑错误引起的异常,在程序中可以选择捕获处理JAVASE 学习笔记(面向对象------异常机制)

JAVASE 学习笔记(面向对象------异常机制)JAVASE 学习笔记(面向对象------异常机制)

 I/O Exception (非运行时异常)JAVASE 学习笔记(面向对象------异常机制)

JAVASE 学习笔记(面向对象------异常机制)

 ERROR://错误不是异常(编译也能通过,不好预见)

JAVASE 学习笔记(面向对象------异常机制)

ERROR通常由JAVA虚拟机生成并抛出

①Java虚拟机的堆溢出或者栈溢出时,将会出现OutOfMemoryError

②虚拟机执行应用时,类定义错误:NotClassDefFoundError、链接错误(LinkageError)

JAVASE 学习笔记(面向对象------异常机制)

 

异常体系结构:

JAVASE 学习笔记(面向对象------异常机制)

捕获异常和抛出异常:

五个关键词:try、catch、finally、throw、throws

try:

监控区域,里面放的是可能出错的(需要检查异常)的语句

catch:

①捕获异常,并在catch中写报错信息

 e.printStackTrace();语句可以打印出错误的栈信息 ,也可以自己手动用S.out写报错内容。

不过一般处理异常时不会简单的打印出异常,而是在catch中增加代码处理异常

JAVASE 学习笔记(面向对象------异常机制)

②catch中可以用System.exit(1);语句直接来结束程序

JAVASE 学习笔记(面向对象------异常机制)

③catch语句可以写多个来捕获多个异常,但从上到下只能执行一条,所以写的时候范围由小到大

从具体的Exception——>Exception——>Throwable(最大的范围,包含所以异常和错误)

写反了会报错

JAVASE 学习笔记(面向对象------异常机制)

JAVASE 学习笔记(面向对象------异常机制)

finally:

用于处理善后工作,例如在IO流中关闭资源。

其中try和catch是必须要有的,finally可以不写

PS:无论异常是否被捕获,finally都会被执行 

JAVASE 学习笔记(面向对象------异常机制)

throw:(运行时异常)

主动的抛出异常,一般在方法中使用。

假设方法中处理不了这个异常。在方法中抛出异常,让调用该方法的对象来捕获异常。

JAVASE 学习笔记(面向对象------异常机制)

程序本身就会报出异常的类型,用Throw可以选择 异常的类型。

抛出异常时程序就停止了,但是方法中的异常抛出可以在main函数中用try-catch函数接住,处理掉,这样就可以让程序不终止。

throws:

如果方法中的throw在方法中就被try-catch接收,则不需要用throws关键词

而在方法中的异常没有被try-catch接受,则需要在方法方法的声明处通过关键词    throws +要抛出的异常   来给到方法的调用者,然后在方法的调用者中被try-catch接收

JAVASE 学习笔记(面向对象------异常机制)

用try-catch 捕获异常:

例①

除数为0时报出异常.ArithmeticException

JAVASE 学习笔记(面向对象------异常机制)

 JAVASE 学习笔记(面向对象------异常机制)

 JAVASE 学习笔记(面向对象------异常机制)

快捷键:ctrl+alt+t

JAVASE 学习笔记(面向对象------异常机制)

自定义异常:

JAVASE 学习笔记(面向对象------异常机制)

 步骤:JAVASE 学习笔记(面向对象------异常机制)

1.自定义异常类

用toString方法来异常打印信息!!!

JAVASE 学习笔记(面向对象------异常机制)

2.在方法中通过throw关键词抛出异常对象

3.如果在当前抛出异常的方法中处理异常,则使用try-catch语句捕获并处理

    否则在方法的声处通过throws关键词指明要抛出的异常给 方法调用者,继续进行下一步操作

此例中,用的是后者,即用了throws关键词,在方法的调用者中接收异常

 JAVASE 学习笔记(面向对象------异常机制)

4.在出现异常的方法调用者中捕获并处理异常:

 JAVASE 学习笔记(面向对象------异常机制)

a=11时的打印结果:

JAVASE 学习笔记(面向对象------异常机制)

 异常总结:

1.处理Runtime Exception主要靠逻辑去合理规避,同时辅助try-catch处理

2.多重catch块后,可以加一个catch(Exception)来处理可能会被遗漏的异常

3.尽量添加finally语句块去释放占用的资源IO、Scanner

4.尽量去处理异常,而不是简单地调用printStackTrace()去打印输出

JAVASE 学习笔记(面向对象------异常机制)

上一篇:JavaSE代码题:打印Map中的所有Person类


下一篇:JavaSE 参数传递机制 值传递和引用传递