Java基础学习(七) - 异常处理
1.异常概念
异常指的是程序在执行过程中出现的非正常的情况,导致JVM的非正常停止。在Java中,异常是一个类,产生异常就是创建异常对象并抛出一个异常对象。
异常指的并不是语法错误,语法错误,编译不会通过,而是编译通过后,程序执行异常。
异常的作用是帮助我们找到程序中的问题。
2.异常产生过程解析
public class TestException {
public static void main(String[] args){
int[] arr = {1,2,3};
System.out.println(arr[3]);
}
}

运行过程解析:
- 在 arr 数组中提取索引 3,由于数组没有索引3,导致了运行异常,JVM对这个异常做了识别,并抛出异常给 main 方法。
- 由于 main 方法并没有异常处理,main 方法又把异常返回给 JVM。
- JVM 收到异常后,打印异常详细信息到控制台,同时中断程序。
3.异常类
java.lang.Throwable 是异常的根类。
Throwable 体系:
- java.lang.Error:严重错误,不在我们处理范围内。
- java.lang.Exception:平时所说的异常是此类。我们可以通过修改代码纠正错误,使程序能正常运行。异常又分为checked异常(编译异常)和runtime异常(运行异常)。
Throwable 常用方法:
- public void printStackTrace():打印异常的详细信息。
- public String getMessage():获取异常发生的原因。

4.异常处理
Java 异常处理的五个关键字: try、catch、finally、throw、throws。
- throw 抛出异常。
- throws 声明异常。
- try...catch...finally 捕获异常。
throw:
public class TestException {
public static void main(String[] args){
int[] arr = {1,2,3};
int index = 3;
if (index < 0 || index > arr.length -1){
throw new ArrayIndexOutOfBoundsException("数组越界");
}
System.out.println(arr[index]);
}
}
throws 用于方法声明之上,表示当前方法不处理异常,并提醒该方法的调用者来处理异常。
若该方法可能有多种异常情况产生,那么在throws后面可以写多个异常类,用逗号隔开。
public class TestException {
public static void getIndex(int index) throws ArrayIndexOutOfBoundsException{
int[] arr = {1,2,3};
if (index < 0 || index > arr.length -1){
throw new ArrayIndexOutOfBoundsException("数组越界");
}
}
public static void main(String[] args) throws ArrayIndexOutOfBoundsException{
getIndex(4);
}
}
try-catch 用于对异常有针对性的语句进行捕获,可以对出现的异常进行制定方式处理。finally代码块无论有无捕获异常都会执行。
public class TestException {
public static void main(String[] args){
int[] arr = {1,2,3};
//捕获数组越界异常
try{
System.out.println(arr[4]);
}catch (ArrayIndexOutOfBoundsException e){
e.printStackTrace();//获取异常详细信息
}finally{
System.out.println("程序继续执行");
}
//继续执行
System.out.println(arr[2]); }
}
可以写多个catch 捕获多个异常。需要注意的是catch捕获异常不能相同,异常子类一般要写在异常父类上面,否则异常被父类捕获,子类无法捕获详细异常。
在继承关系当中,如果父类抛出异常,那么子类重写父类方法时,抛出和父类相同的异常或者不抛出异常。如果父类没有抛出异常,子类重写父类该方法时也不可抛出异常,若该子类方法产生异常,只能捕获不能声明抛出。
5.自定义异常类
原理:自定义异常类继承 Exception 根类。
//自定义异常类
class CustomException extends Exception{
//无参构造方法
public CustomException(){};
//有参
public CustomException(String msg){
super(msg);//继承Exception 构造方法
}
}
//测试
public class TestCustomException {
public static void main(String[] args){
int[] arr = {1,2,3};
int index = 3;
try{
if (index<0 || index>arr.length-1){
throw new CustomException("数组越界");
}
}catch (CustomException e){
e.printStackTrace();
} }
}

温馨提示
- 如果您对本文有疑问,请在评论部分留言,我会在最短时间回复。
- 如果本文帮助了您,也请评论关注,作为对我的一份鼓励。
- 如果您感觉我写的有问题,也请批评指正,我会尽量修改。
Java基础学习(七) - 异常处理的更多相关文章
- java基础学习总结——异常处理
一.异常的概念 异常指的是运行期出现的错误,也就是当程序开始执行以后执行期出现的错误.出现错误时观察错误的名字和行号最为重要.
- Java基础学习之异常处理(6)
@ 目录 1.异常是什么 1.1.Error 1.2.Exception 2.异常处理机制 2.1.捕获异常 2.2.抛出异常 3.自定义异常 3.1.自定义检查性异常 3.2.自定义运行时异常 1. ...
- 转载-java基础学习汇总
共2页: 1 2 下一页 Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3 Java基础学习总结——Java对象的序列化和 ...
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API
森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397 文章- 0 评论- 78 JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...
- Java基础学习-- 继承 的简单总结
代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...
- Java基础学习中一些词语和语句的使用
在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...
- java基础学习总结——开篇
java是我学习的第一门编程语言,当初学习java基础的时候下了不少功夫,趁着这段时间找工作之际,好好整理一下以前学习java基础时记录的笔记,当作是对java基础学习的一个总结吧,将每一个java的 ...
随机推荐
- 牛客多校第二场B discount 基环内向树
题意: 有n种商品,每种商品有一个价格 p[i] . 每种商品都有2种打折方式: 1. 给你优惠 d[i] 元. 2. 免费送你第 f[i] 种饮料. 现在求每种饮料至少一瓶的最小花费. dp[i][ ...
- CodeForces 474F Ant colony ST+二分
Ant colony 题解: 因为一个数是合法数,那么询问区间内的其他数都要是这个数的倍数,也就是这个区间内的gcd刚好是这个数. 对于这个区间的gcd来说,不能通过前后缀来算. 所以通过ST表来询问 ...
- lightoj 1283 - Shelving Books(记忆化搜索+区间dp)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1283 题解:这题很显然一看就像是区间dp,但是单纯的区间dp好像解决不了问题可 ...
- 2017ACM总结
首先对自己表示强烈的谴责, 这个时间应该是打cf的时间, 没有想到我又秀到了自己, 放弃了CF, 23333, 菜鸡wxk. 高中刚毕业的时候,听大学生们跪求老师不要给挂科,当时想的是,哇上了大学就不 ...
- codeforces 454 E. Little Pony and Summer Sun Celebration(构造+思维)
题目链接:http://codeforces.com/contest/454/problem/E 题意:给出n个点和m条边,要求每一个点要走指定的奇数次或者是偶数次. 构造出一种走法. 题解:可能一开 ...
- 牛客网暑期ACM多校训练营(第二场) I Car 思维
链接:https://www.nowcoder.com/acm/contest/140/I来源:牛客网 White Cloud has a square of n*n from (1,1) to (n ...
- 【Offer】[10-2] 【青蛙跳阶问题】
题目描述 思路分析 Java代码 代码链接 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路分析 其实就是斐波那契 ...
- Docker搭建disconf环境,三部曲之二:本地快速构建disconf镜像
Docker下的disconf实战全文链接 <Docker搭建disconf环境,三部曲之一:极速搭建disconf>: <Docker搭建disconf环境,三部曲之二:本地快速构 ...
- 项目案例模板之jdbc两种连接方式
项目案例模板之jdbc两种连接方式 第一种连接方式 JDBCUtils.java package jdbc; import org.junit.jupiter.api.Test; import ...
- tomcat启动抛出异常
2018-5-26 15:55:47 org.apache.catalina.startup.VersionLoggerListener log信息: Server version: Apache T ...