1.异常概念

异常指的是程序在执行过程中出现的非正常的情况,导致JVM的非正常停止。在Java中,异常是一个类,产生异常就是创建异常对象并抛出一个异常对象。

异常指的并不是语法错误,语法错误,编译不会通过,而是编译通过后,程序执行异常。

异常的作用是帮助我们找到程序中的问题。

2.异常产生过程解析

public class TestException {
public static void main(String[] args){
int[] arr = {1,2,3};
System.out.println(arr[3]);
}
}

运行过程解析:

  1. 在 arr 数组中提取索引 3,由于数组没有索引3,导致了运行异常,JVM对这个异常做了识别,并抛出异常给 main 方法。
  2. 由于 main 方法并没有异常处理,main 方法又把异常返回给 JVM。
  3. 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基础学习(七) - 异常处理的更多相关文章

  1. java基础学习总结——异常处理

    一.异常的概念 异常指的是运行期出现的错误,也就是当程序开始执行以后执行期出现的错误.出现错误时观察错误的名字和行号最为重要.

  2. Java基础学习之异常处理(6)

    @ 目录 1.异常是什么 1.1.Error 1.2.Exception 2.异常处理机制 2.1.捕获异常 2.2.抛出异常 3.自定义异常 3.1.自定义检查性异常 3.2.自定义运行时异常 1. ...

  3. 转载-java基础学习汇总

    共2页: 1 2 下一页  Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3     Java基础学习总结——Java对象的序列化和 ...

  4. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  5. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  6. JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API

    森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397  文章- 0  评论- 78  JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...

  7. Java基础学习-- 继承 的简单总结

    代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...

  8. Java基础学习中一些词语和语句的使用

    在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...

  9. java基础学习总结——开篇

    java是我学习的第一门编程语言,当初学习java基础的时候下了不少功夫,趁着这段时间找工作之际,好好整理一下以前学习java基础时记录的笔记,当作是对java基础学习的一个总结吧,将每一个java的 ...

随机推荐

  1. GRE Words Revenge AC自动机 二进制分组

    GRE Words Revenge 题意和思路都和上一篇差不多. 有一个区别就是需要移动字符串.关于这个字符串,可以用3次reverse来转换, 前面部分翻转一下, 后面部分翻转一下, 最后整个串翻转 ...

  2. lightoj 1086 - Jogging Trails(状压dp)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1086 题解:题目就是求欧拉回路然后怎么判断有欧拉回路只要所有点的度数为偶数.那 ...

  3. 2019 HZNU Winter Training Day 14 Comprehensive Training

    A - Choosing Capital for Treeland CodeForces - 219D 题意:有一颗单向边的树,要选取一个结点作为首都.要求是这个结点到其它结点,总共需要翻转的路径数量 ...

  4. Webstorm 的设置

    背景色

  5. RobotFramework自动化测试框架-MongoDBLibrary库的使用

    笔者接着 RobotFramework自动化测试框架-DatabaseLibrary库的使用(对数据库的操作) 继续分享robotframework 对数据库中的MongoDB的详细操作. Mongo ...

  6. 从“HDU 2005 第几天?”谈起

    在程序设计中,日期时间的处理经常会遇到.在C语言程序设计的一些教材中会出现如下例子或习题. [例1]第几天? (HDU 2005) 给定一个日期,输出这个日期是该年的第几天. Input输入数据有多组 ...

  7. 对line-height的理解

    <html> <head> <style> </style> </head> <body> <!--line-height ...

  8. zookeeper的未授权访问漏洞解决

    zookeeper的基本情况 zookeeper是分布式协同管理工具,常用来管理系统配置信息,提供分布式协同服务.zookeeper官网下载软件包,bin目录下有客户端脚本和服务端脚本.另外还有个工具 ...

  9. IOCAutofac与ORMEntityFramwork的联系--单例模式

    在你阅读之前默认你已经理解了IOC.DI.ORM以及autofac和EF的使用 在我最近写项目的时候我在单步调试时偶然发现的一个问题 先说明我的项目使用.NET MVC 三层架构,运用IOC Auto ...

  10. Hadoop常见重要命令行操作及命令作用

    关于Hadoop [root@master ~]# hadoop --help Usage: hadoop [--config confdir] COMMANDwhere COMMAND is one ...