05_Java异常(Exception)
1. 异常的概念
1.1什么是异常
异常指的是程序运行时出现的不正常情况.
1.2异常的层次
Java的异常类是处理运行时的特殊类,每一种异常对应一种特定的运行错误.所有Java异常类都是系统类库中Exception类的子类,其继承结构如图:

Throwable类为该处理层次的最高层,其中定义了一个异常描述串,以及获取该描述的getMessage()方法.
对于严重的:Error类时JVM系统内部错误,程序中不能对其编程处理. //对Error一般不编写针对性的代码对其进行处理
对于不严重的:Exception类时程序代码中要处理的异常,这类异常发生可能与程序运行时的数据有关. //可进行相应处理
Throwable中的方法
getMessage() 获取异常信息,返回字符串。
toString() 获取异常类名和异常信息,返回字符串。
printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
printStackTrace(PrintStream s) 通常用该方法将异常内容保存在日志文件中,以便查阅。
1.3系统定义的异常
Exception类有若干子类,每个子类代表一种特定的运行错误,这些子类有的是系统事先定义好并包含在Java类库中的,成为系统定义的运行异常,如下表:

2. 异常的处理
2.1 try...catch..finally结构进行捕获
①try
{语句块;}
②catch (异常类名 参变量名) //注意如果没有catch就代表异常没被处理过,如果该异常是检测时异常,则必须声明.
{语句块;}
③finally //定义一定执行的代码:通常用于关闭资源
{语句块;}
1,2 1,3, 1,2,3 三种方式都是合法语句.
(1)一个try可以引导多个catch块。但是不要定义多余的catch块,多个catch块的异常出现继承关系,父类异常catch块放在最后面。
(2)异常发生后,try块中的剩余语句将不再执行。
(3)catch块中的代码要执行的条件是,首先在try块中发生了异常,其次异常的类型与catch要捕捉的一致。 建议声明更为具体的异常,这样处理的可以更具体。
(4)可以无finally部分,但如果存在,则无论异常发生否,finally部分的语句均要执行。即便是try或catch块中含有退出方法的语句return,也不能阻止finally代码块的执行;除非执行System.exit(0)等导致程序停止运行的语句。
2.2 使用throws关键字抛出异常,使用在函数上,后跟一个或多个异常类.
记住:throw单独存在, 下面不要定义语句,因为执行不到. 但是throws是有可能执行或不执行,所以后可跟.
3. 自定义异常(分为编译时检测的异常 和 不被检测异常RuntimeException以及子类,使该异常一发生就停止运算,因此不需声明、不需处理 ]
3.1 自定义异常类设计
通过继承Exception来实现。一般还在构造方法中super进行异常标识, 复写toString()方法.
3.2 抛出异常
通过throw抛出异常. 异常的本质是对象,因为throw关键词后跟的是new运算符来创建的一个异常对象.
3.3 方法的异常声明
如果一个方法有异常抛出,有两种选择:
[1]在方法内对异常进行捕获处理
[2]在方法内不处理异常,而是交给外部调用程序,这是要在方法头使用throws子句列车该方法可能产生的异常.
3.4 继承Exception原因:
异常体系有一个特点:因为异常类和异常对象都可被抛出.他们都具备可抛性,这是Throwable体系中独有特点.只有这个体系中的类和对象才可以被throws和throw操作.
3.5 异常在子类覆盖中的体现:
1.子类覆盖父类时,如果父类的方法抛出的异常,那么子类只能抛出父类异常或该异常的子类.
2.如果父类方法抛出多个异常,那么子类在覆盖方法时,只能抛出父类异常的子集.
3.如果父类或借口的方法中没有异常抛出,那么子类在覆盖方法时,也不可能抛出异常.如果子类方法发生异常,就必须进行try处理,绝对不能抛.
05_Java异常(Exception)的更多相关文章
- Atitit java的异常exception 结构Throwable类
Atitit java的异常exception 结构Throwable类 1.1. Throwable类 2.StackTrace栈轨迹1 1.2. 3.cause因由1 1.3. 4.Suppres ...
- 异常Exception in thread "AWT-EventQueue-XX" java.lang.StackOverflowError
今天太背了,bug不断,检查到最后都会发现自己脑残了,粗心写错,更悲剧的是写错的时候还不提示错. 刚才有遇到一个问题,抛了这个异常Exception in thread "AWT-Event ...
- Sqoop异常:Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONObject
18/12/07 01:09:03 INFO mapreduce.ImportJobBase: Beginning import of staffException in thread "m ...
- 异常 Exception 堆栈跟踪 异常捕获 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 理解Python语言里的异常(Exception)
Exception is as a sort of structured "super go to".异常是一种结构化的"超级goto". 作为一个数十年如一日 ...
- PL/SQL 08 异常 exception
--PL/SQL错误 编译时 运行时 --运行时的出错处理 EXCEPTION --异常处理块DECLARE …BEGIN …EXCEPTION WHEN OTHERS THEN handle ...
- 【马克-to-win】学习笔记—— 第五章 异常Exception
第五章 异常Exception [学习笔记] [参考:JDK中文(类 Exception)] java.lang.Object java.lang.Throwable java.lang.Except ...
- 【异常】Maxwell异常 Exception in thread "main" net.sf.jsqlparser.parser.TokenMgrError: Lexical error at line 1, column 596. Encountered: <EOF> after : ""
1 详细异常 Exception in thread "main" net.sf.jsqlparser.parser.TokenMgrError: Lexical error at ...
- 异常-Exception in thread "main" net.sf.jsqlparser.parser.TokenMgrError: Lexical error at line 1, column 596. Encountered: <EOF> after :
1 详细异常 Exception in thread "main" net.sf.jsqlparser.parser.TokenMgrError: Lexical error at ...
随机推荐
- 【leetcode】Course Schedule(middle)☆
There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...
- codeforces gym 100694 M The Fifth Season (巴什博奕)
题目链接 一直觉得巴什博奕是最简单的博弈遇到肯定没问题,结果被虐惨了,看完标程错了10多遍都没反应过来,当然标程题解和代码的意思也写反了,但是还是想对自己说一句mdzz,傻啊!!!这道题很不错,我觉得 ...
- 解决eclipse Maven 主项目不能刷新maven
项目->.project -> 增加<?xml version="1.0" encoding="UTF-8"?><projectD ...
- 整理 iOS 9 适配中出现的坑(图文)(转)
作者:董铂然 本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iOS9正式版,随着 ...
- php上传文件进度条
ps:本文转自脚本之家 Web应用中常需要提供文件上传的功能.典型的场景包括用户头像上传.相册图片上传等.当需要上传的文件比较大的时候,提供一个显示上传进度的进度条就很有必要了. 在PHP 5.4以前 ...
- yum install 安装 下载好的rpm包 会并依赖包一起安装 zoom电话会议的安装
[root@ok-T Downloads]# rpm -ivh zoom_x86_64.rpm error: Failed dependencies: libxcb-image.so.()(64bit ...
- C#学习笔记----C#中的闭包机制
http://www.cnblogs.com/jiejie_peng/p/3701070.html http://www.cnblogs.com/Ribbon/p/3611457.html “ 若匿名 ...
- SQL语法中的子查询Subqueries
记一下样子. 明白它的应用场景. SELECT account_id, product_cd, cust_id, avail_balance FROM account WHERE open_emp_i ...
- FTP的20、21端口,工作模式
什么是FTP? FTP就是文件传输协议 File Transfer Protocol 的缩写. FTP端口号是多少? 21 FTP的端口号能改吗? 能 ftp的端口号20.21有何区别? 一个是数据端 ...
- Linux系统安装及初始化(ubuntu14.04)
Windows 7下硬盘安装Ubuntu 14.04图文教程 Ubuntu 官方已经发布了正式版的 Ubuntu 14.04 LTS,并宣称这是为云计算准备的版本.该版本在云平台和伸缩环境的可靠性.性 ...