JavaSE详细讲解异常语法

目录
  • 1.异常的概念
  • 2.异常的体系结构
  • 3.异常的处理
    • 3.1抛出异常
    • 3.2处理异常
      • 3.2.1throws
      • 3.2.2try-catch
    • 3.3异常的处理流程
  • 4.自定义异常

1.异常的概念

Java中将程序执行过程中发生的不正常的行为称为异常

比较常见的异常如下:

2.异常的体系结构

Throwable:是异常体系的最顶层的类,它有两个重要的子类,:Error 和 Exception

Exception:我们经常说的异常就是Exception,此类问题可以通过代码进行处理从而使程序可以继续往下运行

Error:指的是Java虚拟机无法解决的严重问题,这类问题就比较严重了,一旦发生想要挽回就很困难了,就像人得了不治之症

异常体系的结构图大致如下:

异常根据发生的时机不同分为编译时异常(受检查异常)和运行时异常(非受检查异常)

RuntimeException以及其子类对应的异常都是运行时异常

注:写代码的时候出现的语法错误不能称之为异常

3.异常的处理

处理异常的两个思想:

LBYL:在操作之前进行充分的检查

EAFP:先进行操作,在遇到问题的时候再来处理

异常处理的核心思想就是EAFP

3.1抛出异常

首先可定是要找出异常的位置

关键字:throw

语法如下;

throw new xxxException("产生异常的原因")

比如写一个获取数组元素的方法

public static int getElement(int[] arr,int index) {
        if(arr==null) {
            throw new NullPointerException("数组为空");
        }
        if(index<0||index>=arr.length) {
            throw new ArrayIndexOutOfBoundsException("下标非法");
        }
        return arr[index];
    }

注:

  • throw必须是在方法内部
  • 抛出的对象必须是Exception类或者其子类对象
  • 如果抛出的是RuntimeException类或者其子类(即运行时异常),可以交给JVM处理
  • 如果抛出的是编译时异常,需要自己处理,否则代码无法通过编译
  • 异常一旦抛出,后面的代码便不会再执行

3.2处理异常

主要有两种方式throws和try-catch

3.2.1throws

throws是声明异常,当方法抛出编译时异常时使用throws将异常抛给方法的调用者来处理。即当前方法不处理异常,提醒方法的调用者处理异常

语法如下:

方法返回值 方法名() throws 异常类型1,异常类型2{......}

之前文章介绍对象进行比较和克隆操作常用的接口的时候有出现过这种用法

原文链接抽象类和接口

使用注意:

  1. throws位置是在方法的参数列表后
  2. 声明的异常必须是Exception类或者其子类
  3. throws后面可以有多个异常,中间用逗号隔开即可,如果是有父子关系的,声明父类即可
  4. 调用声明抛出异常的方法时,调用者必须对该异常进行处理,或者继续使用throws抛出

throw和throws很相像,二者之间的区别需要注意

throw throws

在方法内使用


跟在方法声明后面


一个throw只能抛出一个异常


后面可以跟多个异常类名


抛出的异常由方法内的语句处理


抛出的异常由方法的调用者处理


执行throw是一定出现了某种异常


表示有出现异常的可能性,并不一定就会出现这些异常

3.2.2try-catch

try-catch就是真正的对异常进行处理,语法如下:

  try {
       //可能出现异常的代码放在此处
} catch(xxxException e) {
       //若try抛出的异常被catch捕获到,在此处进行处理
}

try后面可以有多个catch,catch括号中可以写多个异常类型,中间使用“|”隔开

还是以上面的获取数组元素的方法为例,对其进行修改:

 public static int getElement(int[] arr,int index)  {
        return arr[index];
    }
//main方法中使用try-catch
public static void main(String[] args) {
        int[] arr=new int[]{1,2,3,4,5};
        try {
            getElement(null,1);
        } catch(ArrayIndexOutOfBoundsException e) {
            System.out.println("下标越界");
        } catch(NullPointerException e) {
            System.out.println("空数组");
        }
    }

注意:

try块内抛出异常位置之后的代码不会被执行

try抛出的异常需要被catch捕获才能处理,如果抛出的异常没有被捕获,则会继续向外抛出,直至JVM中断程序

如果异常之间具有父子关系,一定是子类异常在前先被捕获,父类异常后被捕获

使用try-catch后只会打印自己代码块内的信息,上图中也可以看到,想要异常信息尽可能完整,可使用printStackTrace()方法

此外还有一个关键字:finally

这个关键字需要记住的是:不管程序是否发生异常,finally中的语句都会被执行

基于此特点,所以finally一般是用来进行一些资源清理的扫尾工作

还有,不建议在finally中放入return语句,比如下面代码

 public static int fc() {
        try {
            retrun 1;
        } catch(ArithmeticException e) {
            System.out.println("算数异常");
        }  finally {
            return 10;
        }
    }

结果返回的是10,try中的1因为fianlly的存在是无法返回的

3.3异常的处理流程

在JVM中有一块内存空间叫做"虚拟机栈" ,这块空间是专门用来存储方法之间的调用关系的,这种调用关系用“调用栈”来描述

当代码中出现异常而又没有对应的处理方式的时候,就会沿着调用栈向上传递,直到传递到JVM终止程序

异常的处理流程如下:

  • 优先执行try中的代码抛出异常
  • 若catch捕获到异常,则处理异常,否则向上传递
  • 如果一直到 main 方法也没有合适的代码处理异常, 就会交给 JVM 来进行处理, 此时程序就会异常终止

4.自定义异常

虽然Java本身就已经有很多异常类,但在实际的开发中仍然会遇到一些Java中没有包含的异常,此时就需要自定义异常

具体实现方式如下:

  • 自定义一个类,继承Exception(编译时异常)或RunTimeException(运行时异常)
  • 类里面实现一个带有String类型参数的构造方法,String是为了说明出现异常的原因

到此这篇关于JavaSE详细讲解异常语法的文章就介绍到这了,更多相关Java异常内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java十分钟精通异常处理机制

    目录 异常处理机制的底层原理 异常的继承关系图 异常的处理 一.try-catch-finally结构 二.多catch处理不同的异常: 三.throws声明异常/throw抛出异常: 四.自定义异常: 五.常见的异常 异常处理机制的底层原理 抛出异常,在执行一个方法时,如果发送了异常,则这个方法生成代表该异常的一个对象,停止当前执行的 路径,并把异常提交给jre. 捕获异常:jre得到该异常后,虚招相应的代码来处理该异常.jre在方法的调用栈中查找,从生成异常的 方法开始回溯,直到找到相应的异

  • java基础详细笔记之异常处理

    目录 异常概述 常见异常的举例 空指针异常NullPointerException 数组角标越界异常ArrayIndexOutOfBoundsException 异常的抛出与捕捉 抛出异常 捕捉异常 在方法中抛出异常 使用throws关键字抛出异常 使用throw关键字抛出异常(自定义异常) 异常的使用原则 总结 异常概述 在Java中,这种在程序运行时可能出现的一些错误称为异常.异常是一个在程序执行期间发生的事件,它中断了正在执行的成宿的正常指令流. 视频笔记:  Java程序执行时遇到的异常

  • Java 超详细讲解Spring MVC异常处理机制

    目录 异常处理机制流程图 异常处理的两种方式 简单异常处理器SimpleMappingExceptionResolver 自定义异常处理步骤 本章小结 异常处理机制流程图 系统中异常包括两类: 预期异常 通过捕获异常从而获取异常信息. 运行时异常RuntimeException 主要通过规范代码开发.测试等手段减少运行时异常的发生. 系统的Dao.Service.Controller出现都通过throws Exception向上抛出,最后SpringMVC前端控制器交由异常处理器进行异常处理,如

  • Java常见踩坑记录之异常处理

    目录 一.Java异常类层次结构 二.Throwable类常用方法 三.try-catch-finally 四.使用 try-with-resources 来代替try-catch-finally 五.自定义异常 总结 一.Java异常类层次结构 Java中,所有的异常都来源于java.lang包中的Throwable类,它有两个重要的子类,Exception(异常)和Error(错误). Exception :程序本身可以处理的异常,可以通过 catch 来进行捕获.Exception 又可以

  • Java超详细梳理异常处理机制

    目录 一.异常概述与异常体系结构 1. 异常概述 引入 概念 2. 分类 2.1 Error vs Exception 2.2 编译时异常vs运行时异常 3. 常见异常 3.1 分类 3.2 代码演示 二.异常处理机制 1. 概述 2. 异常处理机制一之try-catch-finally 2.1 语法格式 2.2 使用 2.3 代码演示 3. 异常处理机制二之声明抛出异常throws 3.1 语法格式 3.2 使用 4. try-catch-finally与throws的区别 5. 手动抛出异常

  • Java异常处理try catch的基本使用

    目录 1. 异常 1.1 try…catch异常处理 1.2 多catch并行处理 1.3 throw和throws 关键字的使用 1.4 finally代码块 1.5 RuntimeException异常 1.6 自定义异常 总结 1. 异常 1.1 try…catch异常处理 try catch的异常处理的格式写法 : try{ 被检测的代码 可能发生异常的代码 }catch(异常类的类名 变量名){ 异常的处理方式 : 写什么都可以 定义变量,创建对象,调用方法,循环,判断... 只要写了

  • Java 超详细讲解异常的处理

    目录 1.异常的概念和体系结构 1.1异常的概念 1.2异常的体系结构及分类 2.异常的处理 2.1防御式编程 2.2异常地抛出 2.3异常的捕获 (1)异常声明throws (2)try-catch捕获并处理 (3)finally 2.4异常的处理流程 3.自定义异常类 1.异常的概念和体系结构 1.1异常的概念 Java中,在程序执行过程中发生的不正常行为称为异常.比如之前一直遇到的: (1)算数异常 System.out.prinntln(10/0); (2)数组越界异常 int[] ar

  • Java异常处理机制深入理解

    目录 1.初识异常 2.异常的基本用法 异常处理流程 3.为什么要使用异常? 异常应只用于异常的情况 4. 异常的种类 4.1 受查异常 解决方案: 4.2非受查异常 5.如何使用异常 避免不必要的使用受查异常 6.自定义异常 1.初识异常 我们在写代码的时候都或多或少碰到了大大小小的异常,例如: public class Test { public static void main(String[] args) { int[] arr = {1,2,3}; System.out.println

  • JavaSE详细讲解异常语法

    目录 1.异常的概念 2.异常的体系结构 3.异常的处理 3.1抛出异常 3.2处理异常 3.2.1throws 3.2.2try-catch 3.3异常的处理流程 4.自定义异常 1.异常的概念 Java中将程序执行过程中发生的不正常的行为称为异常 比较常见的异常如下: 2.异常的体系结构 Throwable:是异常体系的最顶层的类,它有两个重要的子类,:Error 和 Exception Exception:我们经常说的异常就是Exception,此类问题可以通过代码进行处理从而使程序可以继

  • Java详细讲解异常Exception的处理

    目录 1.异常介绍 2.常见的运行时异常 1.空指针异常 2.数学运算异常 3.数组下标越界异常 4.类型转换异常 5.数字格式不正确异常 1.异常介绍 基本概念 程序执行中发生的不正常情况称为异常.(语法错误和逻辑错误不是异常). package com.demo; /** * @version 1.0 * @auther Demo龙 */ public class exception01 { public static void main(String[] args) { int num1

  • 超详细讲解Java异常

    目录 一.Java异常架构与异常关键字 Java异常简介 Java异常架构 1.Throwable 2.Error(错误) 3.Exception(异常) 4.受检异常与非受检异常 Java异常关键字 二.Java异常处理 声明异常 抛出异常 捕获异常 如何选择异常类型 常见异常处理方式 1.直接抛出异常 2.封装异常再抛出 3.捕获异常 4.自定义异常 5.try-catch-finally 6.try-with-resource 三.Java异常常见面试题 1.Error 和 Excepti

  • Java详细讲解不同版本的接口语法和抽象类与接口的区别

    目录 什么是接口? 接口的语法: (JDK7.0) 接口的语法: (JDK8.0) 接口的语法: (JDK9.0)—(私有方法) 接口的分类 常量接口: 空接口: 函数式接口: 什么是接口? 说到接口,USB大家肯定不陌生~接口是一种标准.规范.注意:接口一旦制定好,使用者和实现者都必须遵循的标准. 接口的语法: (JDK7.0) (1) 关键字:interface (2) 语法:  interface 接口名{} (3) 接口编译之后会生成对应的 .class文件 (4) 接口不能创建对象,但

  • Java异常Exception详细讲解

    目录 1.异常中最大的父类Throwable 2.try-catch-finally三条语句注意的问题 3.final-finally-finalize的各作用 4.throws关键字 5.throws和throw的区别 1.异常中最大的父类Throwable Throwable可以分为两种: Error Exception: 运行时异常(非受检异常) 非运行时异常(受检异常) Error错误:Error是程序无法处理的错误,它是由jvm产生抛出的,比如OutOfMemoryError,Thre

  • Java 超详细讲解抽象类与接口的使用

    目录 一.抽象类 1.抽象类的语法 2.抽象类的特性 3.抽象类的作用 二.接口 1.接口的概念 2.接口使用 3.接口特性 4.实现多个接口 5.接口间的继承 6.常用的接口 (1)Comparable接口 (2)Cloneable接口 三.Object类 一.抽象类 在Java中,如果一个类被abstract修饰称为抽象类,抽象类中被abstract修饰的方法称为抽象方法,抽象方法不用给出方法体. 1.抽象类的语法 //抽象类:被abstract修饰的类 public abstract cl

  • C语言 详细讲解#pragma的使用方法

    目录 一.#pragma 简介 二.#pragma message 三.#pragma once 四.#pragma pack 五.小结 一.#pragma 简介 #pragma 用于指示编译器完成一些特定的动作 #pragma 所定义的很多指示字是编译器特有的 #pragma 在不同的编译器间是不可移植的 预处理器将忽略它不认识的 #pragma 指令 不同的编译器可能以不同的方式解释同一条 #pragma 指令 一般用法: #pragma parameter 注:不同的 parameter

  • Spring超详细讲解面向对象到面向切面

    目录 前言 一.OOP&AOP 二.AOP核心 三.第一个AOP案例 1.环境准备 2.AOP实现步骤 四.切入点表达式 1.语法格式 2.通配符 五.AOP通知类型 环境准备 环绕通知 1.返回后通知 2.异常后通知 前言 Object object = new Object(); 世间万物的本质都可看作类的对象,面向对象(OOP)的模式让程序易维护.易复用.易扩展,而面向切面(AOP)则是面向对象的补充,让对象的功能更加强大 对比前面的日志框架技术二者非常相似,他的特点就是在不影响业务的前提

  • SpringBoot详细讲解视图整合引擎thymeleaf

    目录 1. 支持的视图技术 2. Thymeleaf 2.1 Thymeleaf语法 2.2 标准表达式 1. 变量表达式 ${…} 2. 选择变量表达式 *{…} 3. 消息表达式 #{…} 4. 链接表达式 @{…} 5. 片段表达式 ~{…} 3. 基本使用 3.1 Thymeleaf模板基本配置 3.2 静态资源的访问 3.3 完成数据的页面展示 1. 创建Spring Boot项目 2. 编写配置文件 3. 创建web控制类 4. 创建模板页面并引入静态资源文件 5.效果测试 1. 支

随机推荐