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. webstorm的live templates快速编辑功能,让你的css JS代码书写速度飞起来

    前言: Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码, 大大提高了HTML/CSS代码编写的速度,比如下面 ...

  2. UGUI_游戏界面开发Demo001

    1.Alt+Stretch:快速拉伸匹配至画布,与父类大小保持一致. 2.Anchors锚点:实现屏幕自适应 图片也可以实现自适应.Target Graphic (目标图),点击的时候,控件的效果用在 ...

  3. 在nginx日志access log可以记录POST请求的参数值

    1)      在nginx日志access log可以记录POST请求的参数值 实现程度:日志中可以显示POST请求所提交的参数值 问题: 日志中文显示十六进制(在配置文件中配置中文也无效) 没有对 ...

  4. golang实现get和post请求的服务端和客户端

    服务端 在golang中,实现一个普通的http接口可以处理get请求和x-www-form-urlencoded类型的post请求,而如果想实现处理json数据的post请求,则需要用另外的方式实现 ...

  5. 记一次往集群添加机器,liveNodes缺少机器的情况

    1.背景 公司线下环境,原本有三台虚拟机组成的集群(cdh5.3.6),由于硬件配置比较低,申请了新的三台机器,8核8G内存,在上面部署了cdh5.11.1,较新的cdh集群. 由于远来的三台还在使用 ...

  6. JAVA多线程高并发面试题总结

    ReadMe : 括号里的内容为补充或解释说明. 多线程和高并发是毕业后求职大厂面试中必问的知识点,自己之前总是面试前才去找相关的知识点面试题来背背,隔段时间又忘了,没有沉淀下来,于是自己总结了下相关 ...

  7. STL中bitset的用法

    终于又来写博客了 == bitset存储的是二进数位,就和一个bool性数组差不多.用法上和数组的操作方式也差不多. 每位只占一个字节,大大优化了空间,可以通过数组形式访问. bitset定义 可以用 ...

  8. 浅谈DanmakuView

      今天简单介绍一下开源的弹幕引擎---danmakuView   使用之前在build.gradle里面添加下面这一条(目前我使用的工具是AndroidStudio 3.1.2)   impleme ...

  9. mysql 函数 存取过程

    1.打开数据库 2.选择函数,点击新建函数,选择过程,点击完成 4.写入自己要添加的sql语句 5.点击CTAL + S 保存,如若报错则语法或函数错误

  10. Oracle之select

    坚持