Java学习路线-10:异常

简介: Java学习路线-10:异常

第27 章 : 异常的捕获及处理

116 认识异常对程序的影响

出现错误后,程序中断执行

为了保证程序出现非致命错误之后,程序依然可以正常完成

异常处理机制保证程序的顺利执行

117 处理异常

语法

try{
} catch(异常类型 异常对象){
    // 处理异常
} catch(异常类型 异常对象){
    // 处理异常
}
...
finally{
    // 不管是否出现异常都会执行
}

异常

System.out.println(2/0);
// java.lang.ArithmeticException: / by zero

异常捕获

try{
    System.out.println(2/0);
}
catch(ArithmeticException e){
    System.out.println(e);
    // java.lang.ArithmeticException: / by zero
}

打印完成的异常信息

printStackTrace()

try{
    System.out.println(2/0);
}
catch(ArithmeticException e){
    e.printStackTrace();
    // java.lang.ArithmeticException: / by zero
    // at Demo.main(Demo.java:4)
}

118 处理多个异常

如果明确知道会发生什么异常,可以使用if做判断

119 异常处理流程

Error 程序还未执行性出现的错误,开发者无法处理

Exception 程序中出现的异常,开发者可以处理

异常体系

Object
    -Throwable
        -Exception

所有异常都可以用 Exception 处理

捕获范围大的异常要放在最后

120 throws关键字

告诉调用者可能会出现的异常

如果主方法继续抛出异常,表示此异常交由JVM处理

class Demo{
    public static int div(int x, int y) throws ArithmeticException{
        return x / y;
    }
    public static void main(String[] args) {
        try{
            int x = div(1, 0) ;
        }catch(ArithmeticException e){
            e.printStackTrace();
        }
    }
}

121 throw关键字

手动抛出异常

try{
    throw new Exception("主动抛出异常");
}catch(Exception e){
    e.printStackTrace();
    // java.lang.Exception: 主动抛出异常
}

区别:throw & throws

throw 在代码块中使用,主动抛出异常对象

throws 在方法定义上使用,明确告诉调用者可能产生的异常

122 异常处理模型

try{
    result = x / y;
} catch(Exception e){
    throw e;
}finally{
    System.out.println("结束...");
}

简化写法

try{
    result = x / y;
} finally{
    System.out.println("结束...");
}

123 RuntimeException

函数定义标注了可能抛出的异常,不过并没有要求强制处理

区别 RuntimeException & Exception

RuntimeException 是 Exception子类

RuntimeException 子类不要求强制处理异常

Exception 必须处理

124 自定义异常类

继承 RuntimeException(可选处理),Exception(必须处理)

// 如果继承自Exception 
// 错误: 未报告的异常错误MyException; 必须对其进行捕获或声明以便抛出
class MyException extends RuntimeException{
    public MyException(String message){
        super(message);
    }
}
class Demo{
    public static void main(String[] args) {
        throw new  MyException("自定义异常");
        // Exception in thread "main" MyException: 自定义异常
    }
}

125 assert断言

JDK >= 1.4

确定代码执行到某行之后,一定是所期待的结果

不一定是准确的,也可能出现偏差,但是这种偏差不应该影响程序的正常执行

Java中的断言需要指定运行参数才生效

int x = 9 ;
assert x == 10;

编译运行没有任何结果

启用断言

java -ea Demo

程序抛出异常

Exception in thread "main" java.lang.AssertionError
相关文章
|
Java 开发者
Java学习路线-10:异常
Java学习路线-10:异常
202 0
|
设计模式 Java 索引
Java学习路线-3:数组(3)
Java学习路线-3:数组
148 0
Java学习路线-3:数组(2)
Java学习路线-3:数组
151 0
Java学习路线-3:数组(1)
Java学习路线-3:数组
185 0
|
设计模式 Java 索引
Java学习路线-3:数组
Java学习路线-3:数组
189 0
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
196 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
221 1
|
3月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
171 0
|
3月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
277 16