异常
-
java语言中异常是以什么形式存在的呢?
-
1.异常在java中以类的形式存在,每一个异常类都可以创建异常对象
- 类是模板,对象是实际存在的个体
-
-
java中异常处理机制
- 异常在java中以类和对象的形式存在,那么异常的继承结构是怎样的?
-
可以使用UML图来描述一下继承结构
- 什么是UML?有什么用?
-
uml是一种统一建模语言,一种图标式语言(画图的)
-
uml不是只有java中使用,只要是面向对象的编程语言,都有UML
-
一般画uml图的都是软件架构师或者是系统分析师,这些级别的人员使用的。软件设计人员使用UML
-
在uml图中可以描述类和类之间的关系,程序执行的流程,对象的状态等等
-
- 什么是UML?有什么用?
-
- 异常在java中以类和对象的形式存在,那么异常的继承结构是怎样的?
-
Object下有Throwable(可抛出)
- Throwable下有两个分支:error(不可处理,直接退出JVM),和exception(可处理)
- exception下有两个分支
- exception的直接子类:编译时异常(要求程序员在编写程序阶段必须预先对这些异常进行处理,如果不处理编译器报错,因此得名)
- runtimeexception:运行时异常(在编写程序阶段,程序员可以预先处理,也可以不管,都行)
-
编译时异常和运行时异常,都是发生在运行阶段,编译阶段异常是不会发生的。
-
编译时异常因为什么而得名?
- 因为编译时异常必须在编译(编写)阶段预先处理,如果不处理编译器报错,因此得名。所有异常都是在运行阶段发生的,因为只有程序运行阶段才可以new对象。
-
编译时异常和运行时异常
- 编译时异常一般发生的概率比较高
- 运行时异常一般发生的概率比较低
-
编译时异常还有其他名字
- 受检异常— CheckedException
- 受控异常
-
运行时异常还有其他的名字
- 未受检异常— UnCheckedException
- 非受控异常
-
所有的异常都是出现在运行阶段的
-
java语言中对异常的处理包括2种方式
- 第一种方式:在方法声明的位置上,使用throws关键字
- 第二种方式:使用try … catch… 语句进行异常的捕捉
-
一般不建议在main方法上使用throws,因为这个异常如果真正的发生了,一定会抛给JVM.JVM只有终止
- 异常处理机制的作用就是增强程序的健壮性。怎么能做到,异常发生了也不影响程序的执行,所以一般main方法中的异常建议使用try…catch…进行捕捉。main就不要继续上抛了。
-
深入了解try…catch…
- catch后面的小括号中的类型可以是具体的异常类型,也可以是该异常类型的父类型
- catch可以写多个,建议catch的时候,精确的一个一个处理,这样有利于程序的调试
- catch写多个的时候,从上到下,必须遵守从小到大
-
异常对象有两个非常重要的方法:
- 获取异常简单的描述信息
- String msg = exception.getMessage();
-
打印异常追踪的堆栈信息— 在实际的开发中,建议使用这个
- exception.printStackTrace();
- 获取异常简单的描述信息
-
关于try…catch中的finally子句:
- 在finally子句中的代码是最后执行的,并且是一定会执行的,即使try语句块中的代码出现了异常
-
finally语句通常使用在哪些情况下?
- 通常在finally语句块中完成资源的释放/关闭
- 因为finally中的代码比较有保障,即使try语句中的代码出现异常,finally中的代码依旧可以继续执行。
-
java中的语法规则(有一些规则是不能破坏的,一旦这么说了,就必须这么做)
- java中有一条这样的规则:
- 方法体中的代码必须遵循自上而下顺序依次逐行执行(亘古不变的语法)
- java中还有一条语法规则
- return语句一旦执行,整个方法必须结束(亘古不变的语法)
- java中有一条这样的规则:
-
final finally finalize有什么区别
- final是一个关键字,表示最终的,不变的
- final修饰的类无法继承,final修饰的方法无法覆盖
- finally也是一个关键字,和try联合使用,使用在异常处理机制中
- 在finally语句块中的代码是一定会执行的
- finalize()是object类中的一个方法,作为方法名出现,所以finalize是标识符
- finalize()方法是JVM的垃圾回收器负责调用
- final是一个关键字,表示最终的,不变的
-
java中怎么自定义异常呢
- 第一步:编写一个类继承Exception或者RuntimeException
- 第二步:提供两个构造方法,一个无参数的,一个带有String参数的
-
throws:在方法声明位置上使用,表示上报异常信息给调用者
-
throw:手动抛出异常