从零双排java之异常
Throwable(所有异常的父类)
* 异常的分类
* 1.运行时异常(程序员犯得错误 代码写错了 比如说越界)
* 2.编译时异常(除了运行时异常 全是编译时异常)
* 为你可能发生的异常 进行一个准备
* 特点:系统强制你去处理这个异常 不处理就报错
出现异常时有两种处理方式:
1.自己处理
* 如何处理异常
* try.....catch....finally
* try 指的是 要被测试的代码(有可能出现异常的代码)
* catch 指的是 要捕获的异常
* finally 指的是 异常处理的要执行的代码
*
* 多catch处理异常
* 由上至下进行匹配 匹配上一个剩下的catch都不走了
* 捕获时 使用的类有小到大 书写
代码示例:
TestException testException = new TestException();
try {
//放可能要发生异常的代码
//返回ArithmeticException对象
int num = testException.fun(10, 0);
System.out.println(num);
}catch (ArithmeticException e) {
//TestException testException = new TestException();
///捕获异常对象(匹配这个异常对象)
//如果捕获成功 会执行catch中的代码
//程序不会被终止
System.out.println("你除了零");
}catch(IndexOutOfBoundsException e) {
System.out.println("数组越界了");
}catch(Exception e) {
System.out.println("Exception异常");
}
System.out.println("你猜我执行了吗?");
* finally(遗言)
* finally中的代码一定会被执行
* finally一般关闭资源 关闭数据库 关闭流
* finally final finalize 之间的区别
* 三者之前没有关系
* final 修饰类 方法 变量
* finally 异常处理中的关键字 可以关闭资源 一定会被执行
* finalize是object 类中的方法是 用来垃圾回收的
* 可以将内存中没有任何引用的垃圾空间回收 并且是系统调用
*/
try {
int num = 10 /2;
return;
} catch (ArithmeticException e) {
System.out.println("你除了零");
}finally {
System.out.println("我是finally中的语句");
}
2.向上级抛出
当一个方法中出现异常时,可以向上级抛出这个异常.谁调用了这个方法就由谁来处理.
当异常在main函数中被抛出时:将由Jvm虚拟机来处理
* JVM默认处理异常方式
* 1.打印错误所在的位置
* 2.打印错误信息 /by zero
* 3.停止你的程序
继承中的异常
class Father{
//如果父类抛出了异常 子类也可以抛出异常 也可以try\--catch处理
public void fun() {
}
}
class Son extends Father{
//重写父类的方法
@Override
public void fun(){
//调用带异常的方法 能不能把异常抛出去处理
//这时只能用try--catch处理
try {
//当父类中的方法没有抛出异常 那么子类在重写父类的这个方法的时候也不能抛出异常
method();
} catch (Exception e) {
}
}
//抛出异常的方法
public void method() throws Exception{
throw new Exception();
}
}