博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java进阶7——异常
阅读量:2351 次
发布时间:2019-05-10

本文共 3182 字,大约阅读时间需要 10 分钟。

异常产生&异常处理

异常概述

  • 异常的体系结构
Throwable(最顶层)    Error:出现的不能够处理的严重问题    Exception:可以处理的问题

就是java程序在运行时期发生的问题。

在Java中,把异常信息封装成了一个类。当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置、原因等)。
在Java中使用Exception类来描述异常。
这里写图片描述
Exception类继承自Throwable这个类,Throwable类也是异常的最顶层类,其下有一个和Exception类同级的类Error,Error表示java程序在运行过程中出现的错误,也就是说,只有修改代码才能够解决

异常处理

  • JVM默认处理方式
    如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因还有位置显示在命令行并且还终止了程序,异常后面的代码将不在执行
  • 捕捉处理
try {    // 需要被检测的语句。}catch(异常类 变量) {     // 异常的处理语句}finally {    // 一定会被执行的语句。}

通过try…catch来对一场进行捕捉,将有可能发生异常的代码写入try的代码块中,如果发生异常,则执行catch代码块中的内容,如果try中代码没有发生异常,则不会执行catch代码块中的内容,但是finally代码块中的内容,不论有没有异常发生,都会被执行,按照顺序执行的方式

- try…catch的执行顺序:

首先执行try语句    如果发现异常,异常下面的代码不再执行,直接跳入catch语句中,catch语句结束后,整个try...catch结束    如果没有发现异常,try语句执行结束后,try...catch直接结束, 不再执行catch语句,然后执行finally中内容
  • 抛出处理
    通过throws关键字,将异常抛出
权限修饰符 返回值类型  方法名(形参列表) throws 异常类型1,异常类型2….{}
  • 多异常处理
    A:对代码进行异常检测,并对检测的异常传递给catch处理。对每种异常信息进行不同的捕获处理。
void show() { // 不用throws     try{        throw new Exception();// 产生异常,直接捕获处理    }catch(XxxException e){        // 处理方式     }catch(YyyException e){        // 处理方式     }catch(ZzzException e){        // 处理方式     }}

注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。

Throwable常用方法&自定义异常

Throwable常用方法

String getMessage(); // 返回此 throwable 的详细消息字符串String toString(); // 返回此 throwable 的简短描述void printStackTrace(); // 打印异常的堆栈的跟踪信息
public static void main(String[] args) {    try {        System.out.println(2 / 0);    } catch (ArithmeticException e) {        // String getMessage() : 原因        System.out.println(e.getMessage());        // 打印结果:/ by zero        // String toString() 类型和原因        System.out.println(e.toString());        // 打印结果:java.lang.ArithmeticException: / by zero        // void printStackTrace():类型原因和位置        e.printStackTrace();        /* 打印结果:java.lang.ArithmeticException: / by zero        *          at com.bsw.exceptionDemo.ExceptionDemo.main(ExceptionDemo.java:6)        */    }}

finally的概述和应用场景

  • finally使用格式:
try {    代码} catch(异常类型 异常变量) {    异常处理语句} finally {   //释放资源的代码}

编译时异常&运行时异常

  • 编译时异常
    编译时异常出现在书写代码的时候,是Exception的子类,非RuntimeExcpetion的子类,一般的编程工具就会报错,程序是无法被运行起来的,有两种处理方式,一种抛出,一种捕捉,如果不处理,程序就运行不成功
  • 运行时异常
    当程序运行时出现的异常,只有程序运行起来才会发现,RuntimeException和他的所有子类异常,都属于运行时期异常,简单来说,能在控制台显示的异常都是运行时异常,运行时异常一旦出现,必须修改源代码,否则无法解决。

自定义异常

  • 自定义一个异常类
    写一个类去继承Exception或者RuntimeException,然后实现多个构造即可
public static void main(String[] args) throws MyExecption, MyExecption2 {    int i = 10;    if (i < 0) {        throw new MyExecption("这个值小于0");    } else {        throw new MyExecption2("这个值大于0");    }}// 自定义异常类2public class MyExecption2 extends Exception {
public MyExecption2(String string) { System.out.println(string); }}// 自定义异常类1public class MyExecption1 extends Exception {
public MyExecption1(String string) { System.out.println(string); }}

递归

递归的概述

  • 递归,指在当前方法内调用自己的这种现象
public void method(){    System.out.println(“递归的演示”);    // 在当前方法内调用自己    method();}
  • 案例:求5的阶乘
public static void main(String[] args) {    System.out.println(jiecheng(2));}public static int jiecheng(int i) {    if (i == 1) {        return 1;    } else {        return i * jiecheng(i - 1);    }}
  • 递归注意事项:
    递归一定要有出口,内存溢出
    递归次数不宜过多,内存溢出
你可能感兴趣的文章
Apache Kylin 2.3 样例分析
查看>>
Apache Kylin 2.3 JDBC Java API 示例
查看>>
An internal error occurred during: "Initializing Java Tooling". java.lang.NullPointerException
查看>>
ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
查看>>
IntelliJ IDEA 2018 基本配置
查看>>
Spring+Mybatis+多数据源(MySQL+Oracle)
查看>>
Mybatis读取Oracle数据库Blob字段,输出原文件
查看>>
信用卡反欺诈
查看>>
线性回归
查看>>
浏览器以只读方式打开PDF
查看>>
CDH和HDP下载地址
查看>>
MysqlDataTruncation: Data truncation: Incorrect string value: '\xF0\x9D\x90\xB6"#...' for column
查看>>
.MysqlDataTruncation: Data truncation: Data too long for column 'content' at row 1
查看>>
com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1146177 > 1048576).
查看>>
Elasticsearch 7.x生产配置
查看>>
AccessDeniedException: /opt/elasticsearch-7.0.0/config/elasticsearch.keystore
查看>>
bootstrap-table 父子表 联动表 完整例子
查看>>
Spring Cloud 2.x完整入门Demo样例(Greenwich版本)
查看>>
Spring Cloud 2.x学习笔记:2、feign改进(Greenwich版本)
查看>>
SpringCloud 2.x学习笔记:3、Hystrix(Greenwich版本)
查看>>