异常父类:
所有异常的最终父类都是Thorwable;
异常在java中,以类和对象的形式存在;
UML:
UML是一种统一建模语言,一种图标式语言(画图的)
UML不只是java语言使用,只要是面向对象编程语言,都有使用,
一般画UML图的,都是软件架构师,或者系统分析师,以及软件设计人员在使用;
在UML图中,可以描述类和类之间的关系,程序的执行流程,以及对象的状态等;
UML图就相当于一种设计图;
画UML的专业工具有很多,例如:Rational Rose(收费的)、starUML等等;
异常的继承结构:
·Error下所有的子类,一旦发送异常,是不可处理的,必须java虚拟机(jvm)终止程序运行/退出jvm;
·Exception下所有子类,发生的异常都是可处理的;
·但不管是Error还是Exception异常,都是可抛出的;
·Exception有两个分支;分别是:ExceptionSubClass和RunTimeException;
·而ExceptionSubClass是Exception的直接子类;该异常被称为编译时异常;
·ExceptionSubClass编译时异常,并不是编译时发生异常,而是必须在编写程序的时候,预先处理;如果不处理,编译器报错;
·而RunTimeException的下面还有很多子类;该异常以及该异常的所有子类都被称之为运行时异常;
·RunTimeException运行时异常,在编写程序阶段,可以选择处理,亦可以选择不处理;
·所有异常都只会在运行阶段发生;因为只要程序运行阶段,才可以new对象;
·其实异常的发生就是在new异常对象;
编译时异常和运行时异常的区别:
·编译时异常一般发生的概率比较高,
·运行时异常一般发生的概率比较低;
异常的其他别称:
·编译时异常:
受检异常;(CheckedException)
受控异常;
·运行时异常:
未受检异常;(UnCheckedException)
非受控异常;
异常的处理方式:
第一种:在方法声明的位置上,使用throws关键字;
第二种:使用try…catch…语句进行异常的捕捉;
在main方法中的异常,一般建议使用try…catch的方式进行捕捉;不建议继续往上抛;
catch写多个的时候,类型必须遵循从小到大的顺序;
注意:在java中,如果异常发生了一直上抛,最终抛给了main方法,main方法也会继续往上抛,抛给调用者JVM,而JVM一旦知道异常发生,只有一个结果,那就是终止程序执行;
异常处理的机制就是增强程序的健壮性;
jdk8的新特性:
catch括号内,支持编写多个异常,异常之间使用“|”隔开,变量名只写一个就可以,
这种写法只在jdk8及以上的版本支持,jdk7是不支持的;
异常对象的常用方法:
getMessage();获取异常简单描述信息;
printStackTrace();打印异常堆栈追踪信息;(实际开发中,建议使用该方法)
finally:
·在finally子句中的代码是最后执行的,并且是一定会执行的,即使try语句块中的代码出现了异常;
·finally子句必须和try一起使用,不能单独使用;(允许可以没有catch分支语句)
·try不能单独使用;
·finally一定会执行的条件不是绝对的,在try中,编写代码有return;finally语句是同样会执行的,而只有一种情况下,才会导致finally语句中的代码不执行;
System.exit();退出JVM;只要try中,被加上了退出java虚拟机的代码,finally就无法执行;
final、finally、finalize之间的区别:
·final是一个关键字,表示最终的,不变的;
·finally是一个关键字,需要与try联合使用,出现在异常处理机制中,在finally语句中的代码是一定会执行的;
·finalize是一个标识符,是object类中的一个方法,作为方法名出现;
Finalize方法是JVM的垃圾回收机制负责调用;
自定义异常:
两个步骤:
第一步:编写一个类继承Exception或者RunTimeException;
第二步:提供两个构造方法,一个无参数的,一个带有String参数的;
Throws和throw的区别:
·throws 是在方法上使用,表示上报异常;
·throw 表示手动抛出异常;

浙公网安备 33010602011771号