java中的异常体系?throw和throws的区别?
一、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中的异常体系?throw和throws的区别?的更多相关文章
- 夯实Java基础系列10:深入理解Java中的异常体系
		
目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调 ...
 - Java面向对象之异常(throw与throws)
		
一.基础概念 1.throw和throws的区别: 位置不同:throws用在函数上,后面跟的是异常类,可以跟多个. throw用在函数内,后面跟的是异常对象. 功能不同:throws用来声明异常,让 ...
 - java异常和throw和throws的区别
		
之前在编程中编译完成后,运行时,会遇见一些常见的错误,如NullPointerException,ArrayIndexOutOfBoundsException等等 在今天重新回顾学习了java异常,总 ...
 - (3)简单说说java中的异常体系
		
java异常体系 |--Throwable 实现类描述java的错误和异常 一般交由硬件处理 |--Error(错误)一般不通过代码去处理,一般由硬件保护 |--Exception(异常) |--Ru ...
 - Java学习之==>异常体系
		
一.定义 程序运行时总是会遇到各种各样的问题,Java中的异常体系就是针对这些问题提出的统一的处理方案.在Java中,将这些各种各样的问题进行归类后,统一称为异常. 二.分类 我们先来看看下面这个图: ...
 - -1-6  java 异常简单介绍  java异常 异常体系  Throwable 分类 throws和throw  异常处理  自定义异常
		
异常 异常:异常就是Java程序在运行过程中出现的错误. 异常由来:问题也是现实生活中一个具体事务,也可以通过java 的类的形式进行描述,并封装成对象. 其实就是Java对不正常情况进行描述 ...
 - Java中异常关键字throw和throws使用方式的理解
		
Java中应用程序在非正常的情况下停止运行主要包含两种方式: Error 和 Exception ,像我们熟知的 OutOfMemoryError 和 IndexOutOfBoundsExceptio ...
 - JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别
		
JAVA之旅(十)--异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别 不知不觉,JAVA之旅这个系列已经更新到第十篇了,感觉如梦如幻,时间 ...
 - Java中的throw和throws的区别
		
Java中的throw和throws的区别 1.throw关键字用于方法体内部,而throws关键字用于方法体部的方法声明部分: 2.throw用来抛出一个Throwable类型的异常,而throws ...
 
随机推荐
- [题解]第十一届北航程序设计竞赛预赛——H.高中数学题
			
题目描述 解题思路 可以求得通项公式:an = 2n + 1,所以问题就变成等差数列求异或和,这个具体为什么对我还不能很好地解释清楚,先挖坑吧. 附:c++代码 1 #include <iost ...
 - 个人站bitlove.cn
			
新启用了个人网站 微爱博客 http://bitlove.cn 有兴趣的可以移步交流
 - iOS 通知扩展插件
			
iOS 通知扩展插件 目录 iOS 通知扩展插件 Notification Service Extension 新建一个target 代码实现 注意事项 UINotificationConentExt ...
 - 从数据源支持、支持方式等角度深入了解Smartbi与Tableau
			
对数据分析来讲,数据源支持是基本功.让数据分析工具与数据保持一个通道,建立会话.用数据分析应用服务器与我们需要分析的业务数据进行连接,拿到需要的数据进行分析.Smartbi.Tableau系统给我们提 ...
 - Django框架表关系外键-多对多外键(增删改查)-正反向的概率-多表查询(子查询与联表查询)
			
目录 一:表关系外键 1.提前创建表关系 2.目前只剩 书籍表和 书籍作者表没创建信息. 3.增 4.删 5.修改 二:多对多外键增删改查 1.给书籍绑定作者 2.删 3.修改 4.清空 三:正反向的 ...
 - 【windows 操作系统】协程
			
◆ 协程 由程序员手动切换. 属于线程,是在线程里面跑的,因此协程又称微线程和线程等.由于不用进行线程上下文切换,因此效率会更高. 资源: 拥有自己的栈空间,大小动态调整. 安全性: 拥有自己的寄存器 ...
 - MySQL 8.0.25 MSI Install 安装过程
			
官网下载地址: https://dev.mysql.com/downloads/mysql 其中web-community需要联网安装,另外一个可以离线安装.我下载的是离线安装包. 1.双击安 ...
 - 安卓Java主页面的编写
			
1 package com.example.first; 2 3 import androidx.appcompat.app.AppCompatActivity; 4 5 import android ...
 - 五、ES6之对象
			
一.对象和属性和方法 JavaScript中对象: var person={name:"Jack",age:20}; 或: var name = "jack"; ...
 - 千万级 PV是什么意思?
			
首先介绍下pv的概念: PV(访问量):即Page View,页面刷新一次算一次. UV(独立访客):即Unique Visitor,00:00-24:00内相同的客户端只被计算一次. IP(独立IP ...