# 异常

## 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的结果

Day_15JavaSE 异常相关推荐

  1. Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常

    kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...

  2. JS Uncaught SyntaxError:Unexpected identifier异常报错原因及其解决方法

    最近在写ajax的时候,调用js方法,遇到了Uncaught SyntaxError:Unexpected identifier异常报错,开始搞不清原因,很苦恼. 以为是js方法参数个数和长度的问题, ...

  3. JVM 常见异常及内存诊断

    栈内存溢出 栈内存大小设置:-Xss size 默认除了window以外的所有操作系统默认情况大小为 1MB,window 的默认大小依赖于虚拟机内存. 栈帧过多导致栈内存溢出 下述示例代码,由于递归 ...

  4. java通过异常处理错误,java基础之通过错误处理异常

    我们在编程过程中,通常需要时刻关注可能遇到的问题,此时可以把问题分为两类:普通问题与异常问题.普通问题:我们可以通过从当前环境中获取到的信息来解决这个问题:而异常问题:在当前环境中获取到的信息并不能解 ...

  5. Ajax接收Java异常_java – 处理来自Servlet的Jquery AJAX响应中的异常

    我的servlet代码是 try{ //something response.setStatus(201); out.print("Data successfully saved" ...

  6. 消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

    消除安卓SDK更新时的"https://dl-ssl.google.com refused"异常的方法 消除安卓SDK更新时的"https://dl-ssl.google ...

  7. java 捕获异常并存入数据库_java异常处理,报异常的话怎么处理对象值,并持久化到数据库中...

    展开全部 //没看到有人回e68a843231313335323631343130323136353331333365646233答你,我还没学到框架,不知道那个是不是可以很便捷操作你说的这样过程 / ...

  8. python异常机制

    python异常处理机制 1.1python的内置异常 当我们在运行代码的时候一旦程序报错,就会终止运行,并且有的异常是不可避免的,但是我们可以对异常进行捕获,防止程序终止. python的内置异常是 ...

  9. Bad credentials异常

    在spring-security中出现Bad credentials异常,可能是如下情况: 一.username和password错误 二.访问权限不够 三.密码加密问题,对于密码加密问题可能是如下情 ...

  10. java.lang.NullPointerException异常原因及解决

    java.lang.NullPointerException异常原因是因为创建了一个引用类型的变量却没有指向任何对象而又去通过这个引用类型变量加点的形式去访问非静态的方法及属性. 给出三种情况, 第一 ...

最新文章

  1. FCN、Unet、Unet++:医学图像分割网络一览
  2. Machine Learning week 9 quiz: programming assignment-Anomaly Detection and Recommender Systems
  3. Collection集合常用功能
  4. activiti高亮显示图片_如今透明LED显示屏成为广告橱窗,它们之间有什么关联?...
  5. IT管理者年终总结 | 2021年,IT管理者必须领悟到的7个要点
  6. 计算机老师任课教师寄语,任课老师寄语大全
  7. C++_函数的定义_函数调用_值传递_函数常见的样式_函数声明(重要)_函数分文件编写---C++语言工作笔记022
  8. SSH dao层异常 org.hibernate.HibernateException: No Session found for current thread
  9. mysql随机字符串函数
  10. 整数规划---指派问题
  11. 官网下载Tomcat
  12. C语言单片机串转并,74ls164与单片机的串并转换(串转并\串进并出)
  13. python程序输入两个整数、实现加减乘除_加减乘除
  14. 一句话理解:过拟合和欠拟合
  15. [转] 【幽默搞笑】笑死你,别怪我!(狠逗、狠强)
  16. 入门设计原则C++实现五:依赖倒置原则
  17. 什么是SAP HANA?
  18. 你好法语A1语法单元汇总(unité 7)
  19. 杨世忠:“周转”知识终圆航天梦
  20. Android 插件化学习

热门文章

  1. 机器人控制器编程课程-教案02-基础
  2. word怎么加入html,Word中怎么放入html
  3. 甲骨文裁员的屠刀最终砍向了西雅图
  4. 微信商户平台(商户号)申请流程(仅供参考)
  5. 计算机蓝屏一直重启,笔记本电脑开机蓝屏不断重启问题的解决方法
  6. 如何用SPSS或Excel做中介效应的Sobe检验?
  7. 4种方法解决鼠标反应慢(迟钝)
  8. 前端工程师必备的ps技巧 — 切图
  9. centos6.5安装谷歌浏览器+谷歌浏览器flash插件安装+谷歌浏览器pdf阅读器安装
  10. c语言爬楼梯不用递归,[leetcode]爬楼梯的递归和非递归方法