一、java中的异常体系

  Thorwable类(表示可抛出)是所有异常和错误的超类,两个直接子类为Error和Exception,分别表示错误和异常。其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常,  这两种异常有很大的区别,也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。

1、Error与Exception
    Error是程序无法处理的错误,它是由JVM产生和抛出的,比如OutOfMemoryError、ThreadDeath等。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。
Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。程序中应当尽可能去处理这些异常。
2、运行时异常和非运行时异常
    运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
    非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

3.throw与throws

   throw关键字是用于方法体内部,用来抛出一个Throwable类型的异常。如果抛出了检查异常,则还应该在方法头部声明方法可能抛出的异常类型。该方法的调用者也必须检查处理抛出的异常。如果所有方法都层层上抛获取的异常,最终JVM会进行处理,处理也很简单,就是打印异常消息和堆栈信息。

  throws关键字用于方法体外部的方法声明部分,用来声明方法可能会抛出某些异常。仅当抛出了检查异常,该方法的调用者才必须处理或者重新抛出该异常。当方法的调用者无力处理该异常的时候,应该继续抛出.

二、异常总结

  首要条件还是那句话,如果不能解决到出现异常的情况,那就不要捕获它,更不要吞掉他。

  当然有的时候你会打算记录异常的日志,但是最开始也说过,异常也代表一个消息,就像IndexOutOfBoundsException、IOException本身的名字已经可以表明异常的大部分信息,也就是说通过异常堆栈基本就能得到关于异常部分的信息,但是有些异常堆栈没有的是什么呢,那就是发生异常条件时的外部信息。

  当然在抛出异常的时候,虚拟机本身会尽可能的打印出直接导致异常产生的输入,可是当我们还想获取额外的环境信息的时候,我们就需要捕获异常,然后打印出来。

  就像简单的除0异常,以及字符串转数字异常,本身异常堆栈就会提供基本的信息,但是如果我们在一个用户交互的环境下,假如我们想要知道是哪个用户的输入导致了异常的产生,这个时候系统产生的异常堆栈信息就不能满足我们的要求了,而这个信息在当前类的一个字段中,这时候我们就要主动捕获然后打印出我们想要的。

参考链接:Java异常体系简析

       java异常体系结构详解

java中的异常体系?throw和throws的区别?的更多相关文章

  1. 夯实Java基础系列10:深入理解Java中的异常体系

    目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调 ...

  2. Java面向对象之异常(throw与throws)

    一.基础概念 1.throw和throws的区别: 位置不同:throws用在函数上,后面跟的是异常类,可以跟多个. throw用在函数内,后面跟的是异常对象. 功能不同:throws用来声明异常,让 ...

  3. java异常和throw和throws的区别

    之前在编程中编译完成后,运行时,会遇见一些常见的错误,如NullPointerException,ArrayIndexOutOfBoundsException等等 在今天重新回顾学习了java异常,总 ...

  4. (3)简单说说java中的异常体系

    java异常体系 |--Throwable 实现类描述java的错误和异常 一般交由硬件处理 |--Error(错误)一般不通过代码去处理,一般由硬件保护 |--Exception(异常) |--Ru ...

  5. Java学习之==>异常体系

    一.定义 程序运行时总是会遇到各种各样的问题,Java中的异常体系就是针对这些问题提出的统一的处理方案.在Java中,将这些各种各样的问题进行归类后,统一称为异常. 二.分类 我们先来看看下面这个图: ...

  6. -1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常

      异常   异常:异常就是Java程序在运行过程中出现的错误. 异常由来:问题也是现实生活中一个具体事务,也可以通过java 的类的形式进行描述,并封装成对象. 其实就是Java对不正常情况进行描述 ...

  7. Java中异常关键字throw和throws使用方式的理解

    Java中应用程序在非正常的情况下停止运行主要包含两种方式: Error 和 Exception ,像我们熟知的 OutOfMemoryError 和 IndexOutOfBoundsExceptio ...

  8. JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别

    JAVA之旅(十)--异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别 不知不觉,JAVA之旅这个系列已经更新到第十篇了,感觉如梦如幻,时间 ...

  9. Java中的throw和throws的区别

    Java中的throw和throws的区别 1.throw关键字用于方法体内部,而throws关键字用于方法体部的方法声明部分: 2.throw用来抛出一个Throwable类型的异常,而throws ...

随机推荐

  1. kali安装python2、python3以及对应的pip

    kali自带python2,python3python --version #查看python版本安装pipwget https://bootstrap.pypa.io/pip/2.7/get-pip ...

  2. [c语言]运算符的优先级与结合性

    c语言中运算符的优先级和结合性常常被人混淆一谈,本文目的在于简单谈谈两者的区别.本文举几个简单的例子说明,这些运算符也特别常用. 首先要明白的是:优先级决定表达式中各种不同的运算符起作用的优先次序:而 ...

  3. SpringBoot 实现 excel 全自由导入导出,性能强的离谱,用起来还特优雅

    一.简介 在实际的业务系统开发过程中,操作 Excel 实现数据的导入导出基本上是个非常常见的需求. 之前,我们有介绍一款非常好用的工具:EasyPoi,有读者提出在数据量大的情况下,EasyPoi ...

  4. [iptables] 基于iptables实现的跨网络通信

    描述 在很多业务场景下,会遇上很多诡异的需求,不仅限于文章提及的需求,还有各种五花八门的需求,大部份的这些需求的产生都是来源于以前设计.规划上导致的问题.所以我们都会想尽办法为客户解决问题,维护好客户 ...

  5. AlertDialog的五种样式

    建立DialogActivity.java文件: 1 public class DialogActivity extends AppCompatActivity { 2 private Button ...

  6. Qt:QJsonParseError

    0.说明 QJsonParseError用于JSON解析时报告error. 1.模块和加载项 Header #include<QJsonParseError> qmake QT += co ...

  7. IIS部署遇到问题(没有相关资源/权限不足无法读取配置文件)及解决方法

    1:找不到web.config,如下图: 解决办法: 点击目录浏览--打开功能--启用(应用),再次浏览解决 2:再次预览出现别的错误500.19,权限不足,如下图: 解决办法:(右键编辑权限或者右上 ...

  8. 05-LoadBalancer负载均衡

    1.介绍 目前主流的负载方案分为以下两种: 集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如 Nginx). 客户端根据自己的请求情况做负载 ...

  9. JZ-069-在 O(1) 时间内删除链表节点

    在 O(1) 时间内删除链表节点 题目描述 在 O(1) 时间内删除链表节点. 方案:如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点,再删除下一个节点,时间复 ...

  10. 虚拟机服务启动失败报错npm ERR! code ELIFECYCLE

    可能是由于node_modules模块中缺失或者某些东西冲突引起的,我们可以使用如下的方法解决这个: rm -rf node_modules 删除,不询问 rm package-lock.json 删 ...