博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Day_15JavaSE 异常
阅读量:4099 次
发布时间:2019-05-25

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

# 异常

## 1. 列举典型的异常

典型的错误Error:
    方法递归调用,会发生栈内存溢出错误 StackOverflowError
    当不断得向堆中创建对象时,会出现OutOfMemoryError

Exception 异常

    异常是可以捕捉住,然后让程序恢复运行

Error和Exception有共同的父类 Throwable

    A:异常的概述:    异常就是Java程序在运行过程中出现的错误。

    B:异常的分类:    举例:张三骑自行车旅游
    C:异常的继承体系
        异常的基类:    Throwable
            严重问题:    Error    不予处理,因为这种问题一般是很严重的问题,比如: 内存溢出
            非严重问题:    Exception
                            编译时异常:    非RuntimeException
                            运行时异常:    RuntimeException

## 2. 如何处理异常

   ### 2.1 积极处理
    try {
      // 有可能出现异常的代码
     } catch( 异常类型 ) {
      // 捕获异常后的代码
    }

    1. catch能捕捉的异常,要么精确匹配,要么用父类型匹配
    2. 可以用多个catch捕获不同类型的异常
    3. 多个catch块时,子类的catch块要写在前面,父类要写在后面
    4. 1.7 后一个catch块中可以有多个平级的异常

 ### 2.2. 消极处理

     语法: 在方法的声明部分添加 throws 异常类型
     含义: 说明方法在执行时有可能出现的异常
     将异常交给方法的调用者处理
     main 的调用者是jvm,当异常传给jvm时,程序运行就结束了

JVM默认是如何处理异常的

        main函数收到这个问题时,有两种处理方式:
        a:自己将该问题处理,然后继续运行
        b:自己没有针对的处理方式,只有交给调用main的jvm来处理
        jvm有一个默认的异常处理机制,就将该异常进行处理.
        并将该异常的名称,异常的信息.异常出现的位置打印在了控制台上,同时将程序停止运行

## 3. 从异常的行为分类:

   未检查异常(uncheck) 
    RuntimeException或它的子类
    Error和它的子类
   检查异常(check)
    Throwable
    Exception以及他们的子类
  检查异常需要强制地配合try-catch或throws一起使用

## 4. 主动抛出异常

   throw new 异常对象();  // 只能是Exception或是Error的子类对象

## 5. 异常对象的常见方法

  e.getMessage() 获取异常的信息
  e.printStackTrace() 打印异常的跟踪信息

## 6. 异常的传播

  以方法调用的反方向进行传播

## 7. 自定义异常

 ### 1) 创建异常类
  class MyException extends Exception{ // 检查异常
  }
  class MyException extends RuntimeException { // 未检查异常
  }

## 8. 异常使用的经验

 ### 1) 不要吞掉异常
### 2) 与有返回值的方法连用时要注意:
```java
public class Exception5 {
    public static int test(){
        try {
            Scanner scanner = new Scanner(System.in);
            int n = scanner.nextInt();
            int r = 1/n;
            return r;
        } catch (Exception e ) {
            System.out.println(e.getMessage());
            return -1; // 解决方法1: 在catch也写一个return返回结果
//            throw e; // 解决方法2: 把异常重新抛出
        }
    }

    public static void main(String[] args) {

        int r = test();
        System.out.println(r);
    }
}
```
 ### 3) 重写方法与异常声明(throws)
 子类的重写方法,不能抛出比父类更多的异常(检查异常)
 子类的重写方法,可以不抛出异常
 若父类和子类方法throws都是未检查异常不用遵守上述约定

 4) 建议将检查异常转换为未检查异常重新抛出

## 9. finally 
语法:
```java
   try {
      ...
   } catch(Exception e) {

   } finally {

      // 无论出现异常与否,总会被执行的代码
   }
```
如果try catch 以及finally都出现了return语句, 以finally中的return为准
如果try 有return, 但finally中对返回的变量做了修改, 不会影响return的结果

 

 

 

 

 

    

转载地址:http://jqksi.baihongyu.com/

你可能感兴趣的文章
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>
(python版)《剑指Offer》JZ06:旋转数组的最小数字
查看>>
(python版)《剑指Offer》JZ13:调整数组顺序使奇数位于偶数前面
查看>>
(python版)《剑指Offer》JZ28:数组中出现次数超过一半的数字
查看>>
(python版)《剑指Offer》JZ30:连续子数组的最大和
查看>>
(python版)《剑指Offer》JZ02:替换空格
查看>>
JSP/Servlet——MVC设计模式
查看>>
使用JSTL
查看>>
Java 8新特性:Stream API
查看>>
管理用户状态——Cookie与Session
查看>>
最受欢迎的前端框架Bootstrap 入门
查看>>
JavaScript编程简介:DOM、AJAX与Chrome调试器
查看>>
通过Maven管理项目依赖
查看>>
通过Spring Boot三分钟创建Spring Web项目
查看>>
Spring的IoC(依赖注入)原理
查看>>
Java编程基础:static的用法
查看>>
Java编程基础:抽象类和接口
查看>>
Java编程基础:异常处理
查看>>
Spring MVC中使用Thymeleaf模板引擎
查看>>
Spring处理表单提交
查看>>