1.程序执行过程中发生不正常的情况,而这种不正常的情况叫做异常
2.java语言是很完善的语言,提供了异常的处理方式,程序执行过程中出现了不正常情况,java把异常信息打印输出到控制台,供程序员参考,程序员看到异常信息之后,可以对程序进行修改,让程序更加的健壮
3.异常在java中以类的方式存在,每一个异常类都可以创建一个异常对象
4.UML:
UML是一种统一建模语言。
一种图标式语言(画图的)
UML不是只有java中才使用,只要是面向对象的编程语言,都有UML
一般画UML图的都是软件架构师或者说是系统分析师,这些级别的人员使用的,软件设计人员使用UML
在UML图中可以描述类与类之间的关系,程序执行的流程,对象的状态等
5.所有的错误只要发生,java程序只有一个结果,那就是退出程序的执行,退出JVM,错误是不能处理的
6.不管是错误还是异常都是可抛出的
7.所有EXception的直接子类,都叫做编译时异常,编译时异常是表示必须在编写程序的时候预先对这种异常进行处理,如果不处理,编译器报错
8.所有的RuntimeException及子类都属于运行时异常,运行时异常在编写时可以选择处理,也可以选择不处理
9.
10.编译时异常和运行时异常,都是发生在运行阶段,编译阶段异常不会发生
11.编译时异常必须在编译阶段预先处理,如果不处理编译器报错,因此得名。
12.所有异常都是在运行阶段发生的,因为只有程序运行阶段才可以new对象,所以异常的发生就是new异常对象
13.编译时异常和运行时异常的区别:
编译时异常一般发生的概率比较高
对于一些发生发生概率较高的异常,需要在进行之前对其进行预处理
运行时异常一般发生的概率比较低
14.编译时异常还有其他名字
受检异常:CheckedException;受控异常
15.运行时异常还有其他名字
未受检异常:UnCheckedException;非受控异常
16.java语言对异常的处理方式包括两种方式:
1.在方法声明的位置上,使用throws关键字,抛给上一级
2.使用try...catch语句进行异常的捕捉
17.一般不建议在main方法上使用throws,因为这个异常如果真正的发生了,一定会抛给JVM,JVM终止。异常处理机制的作用就是增强程序的健壮性,所以,一般main方法中的异常建议使用try...catch进行捕捉。main方法就不再上抛了
18.只要异常没有捕捉,采用上报的方式,此方法的后续代码不会执行
19.try语句块中的某一行出现异常,该行后续的代码不会执行,try...catch捕捉之后,后续代码可以执行
20.catch后面的小括号中的异常可以时具体的异常,也可以时该异常的父类
21.catch也可以写多个。建议catch的时候精确的一个一个处理。这样有利于程序的调试
22.catch写多个的时候,从上而下,必须遵守从小到大
23.在开发中,处理编译时异常,如果希望调用者处理,选择throws上报,其他情况使用捕捉的方式
24.异常对象有两个非常重要的方法:
1.获取异常的简单描述信息:
String msg = exception.getMessage;
2.打印异常追踪的堆栈信息:
exception.printStackTrace();
25.获取异常简单描述信息:这个信息实际上就是构造方法上面的String参数
26.java后台打印异常堆栈追踪信息的时候,采用了异步线程的方式打印
27.异常追踪信息,从上往下一行一行看,但是需要注意的是,SUN写的代码就不需要看了,主要的问题是出现在自己编写的代码上
28.关于try...catch中的finally语句:
1.在finally的子句中的代码是最后执行的,并且是一定会执行的,即使是try语句块中的代码出现了异常
2.finally子句必须和try一起出现,不能单独编写
3.通常finally语句块中的完成资源的释放/关闭,因为finally中的代码比较有保障,即使try语句块中的代码出现异常,finally中的代码也会正常执行
29.final,finally,finalize的区别:
- final是一个关键字,表示最终的,不变的
- final修饰的类无法继承
- final修饰的方法无法覆盖
- final修饰的变量不能重新赋值
- finally也是一个关键字,和try联合使用,使用在异常处理机制当中,在finally语句块中的代码是一定会执行的
- finalize()是Object类中的一个方法。作为方法名出现,所以finalize是一个标识符
- 这个方法是由垃圾回收器GC负责调用
30.在实际开发中,有很多业务,这些业务痴线异常之后,JDK中是没有的,和业务挂钩。
31.程序员可以自己定义异常类
1.编写一个类继承Exception或者RuntimeException
2.提供两个构造方法,一个无参数的,一个带有String参数的
32.重写之后的方法不能比重写之前的方法抛出更多(更广泛)的方法,可以更少
33.异常中的关键字:
- 异常捕捉
- try
- catch
- finally
- throws:在方法声明位置上使用,表示上报异常给调用者
- throw:手动抛出异常