Java异常

1.异常引入

package exception;
@SuppressWarnings({"all"})
/**
 * @Author Blueshadow
 * @Date 2021/7/30 11:01
 * @Version 1.0
 */
public class exception {
    public static void main(String[] args) {
        //通过try...catch...异常处理机制来处理异常,从而保证程序的健壮性
        int a = 10;
        int b = 0;
        int num = 0;
        try {
            num = a / b;//尝试执行
        } catch (Exception e) {//捕获错误
            System.out.println("异常信息是"+e.getMessage());
        }
        System.out.println("程序继续执行");
        System.out.println("num="+num);//程序抛出ArithmeticException异常,程序结束执行

    }
}

2.异常介绍

  • 为基本概念:Java语言中,将程序执行中发生的不正常现象称为异常,语法错误和逻辑错误不是异常。
  • 异常的分类:
  • Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:栈溢出。Error错误是严重错误,程序会崩溃。
  • Exception:其他原因编程错误或偶然的外在因素导致的一般性问题,可以通过针对性的代码进行处理。例如空指针访问,试图读取不存在的文件,网络连接中断等,Exception分为两大类,运行时异常和编译时异常。

3.异常体系

Java异常

4.五大运行时异常(RuntimeException)

4.1NullPointException空指针异常

当程序试图在需要对象的地方使用null时,抛出该异常。

package exception;
@SuppressWarnings({"all"})
/**
 * @Author Blueshadow
 * @Date 2021/7/30 11:01
 * @Version 1.0
 */
public class exception {
    public static void main(String[] args) {
        String name = null;
        System.out.println(name.length());
        //Exception in thread "main" java.lang.NullPointerException
    }
}

4.2ArithmeticException数学运算异常

当出现异常的运算条件的时候,抛出该异常。

package exception;
@SuppressWarnings({"all"})
/**
 * @Author Blueshadow
 * @Date 2021/7/30 11:01
 * @Version 1.0
 */
public class exception {
    public static void main(String[] args) {
        int a = 10;
        int b = 0;
        int count = a/b;
        System.out.println(count);
        //Exception in thread "main" java.lang.ArithmeticException: / by zero
    }
}

4.3ArrayIndexOutOfBoundsException 数组下标越界异常

用非法索引访问数组时抛出的异常。

package exception;
@SuppressWarnings({"all"})
/**
 * @Author Blueshadow
 * @Date 2021/7/30 11:01
 * @Version 1.0
 */
public class exception {
    public static void main(String[] args) {
        int[] a = {1,2,3,4,5};
        for (int i = 0; i

4.4ClassCastException类型转换异常

当试图将对象强制转换为不是实例的子类时,抛出该异常。

package exception;
@SuppressWarnings({"all"})
/**
 * @Author Blueshadow
 * @Date 2021/7/30 11:01
 * @Version 1.0
 */
public class exception {
    public static void main(String[] args) {
        A b = new B();//向下转型
        B b1 = (B)b;//向下转型

        C c2 = (C)b;
        //Exception in thread "main" java.lang.ClassCastException: exception.B cannot be cast to exception.C
    }
}

class A{}
class B extends A{}
class C extends A{}

4.5NumberFormatException数字格式不正确异常

当程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。

package exception;
@SuppressWarnings({"all"})
/**
 * @Author Blueshadow
 * @Date 2021/7/30 11:01
 * @Version 1.0
 */
public class exception {
    public static void main(String[] args) {
        String str = "Hello world";
        int num = Integer.parseInt(str);
        //Exception in thread "main" java.lang.NumberFormatException: For input string: "Hello world"
    }
}

5.常见编译异常

编译异常是指在编译代码期间就必须进行处理的异常,否则代码不能通过编译

常见的编译异常

SQLException//操作数据库时,查询表可能发生异常

IOException//操作文件时发生的异常

FileNotFoundException//当操作文件,而文件不存在时,发生异常

ClassNotFoundException//加载类,而该类不存在时,发生异常

EOFException//操作文件,到文件末尾,发生异常

IIIegalArguementException//参数异常

6.异常处理机制

6.1处理方式

try-catch-finally//在代码中捕获发生的异常,自行处理

throws//将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM

6.2try-catch-finally

try{
    //代码/可能有异常
}catch{
    //捕获到异常
    //当异常发生时
    //当系统将异常封装成Exception对象e,传递给catch
    //得到异常对象后自行处理
}finally{
    //不论是否有异常,一定会执行的代码块
}

6.3throws异常处理

如果一个方法中可能生成某种异常,但并不能确定如何处理这种异常,则此方法应显示声明抛出异常,表明该方法不对这些异常进行处理,而由该方法的调用者进行处理。

在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。

6.4自定义异常

当程序中出现了错误,但是该错误信息并没有在Throwable子类中描述处理,则这个时候可以自己设计异常类,用于描述该错误信息。

package exception;
@SuppressWarnings({"all"})
/**
 * @Author Blueshadow
 * @Date 2021/7/30 11:01
 * @Version 1.0
 *
 * 案例:在接收Person对象的年龄的时候,要求是在18-120岁之间,否则抛出一个自定义异常,
 * 该自定义异常继承RuntimeException
 */
public class exception {
    public static void main(String[] args) {
     int age = 800;
     if (!(age>=18 && age

6.5throw和throws的区别

意义 位置 后面跟的东西 throws 异常处理的一种方式 方法声明处 异常类型 throw 手动生成异常对象的关键字 方法体中 异常对象

Original: https://www.cnblogs.com/nanfengashuai/p/15080500.html
Author: Blueshadow
Title: Java异常

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/588351/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SpringBoot配置文件yml

    SpringBoot配置文件(yml) application.properties key = value application.yml key: value (对空格要求严格…

    Java 2023年6月5日
    070
  • SpringCloud–feign的配置加载

    spring cloud feign我们使用 @FeignClient注解,其中有几个核心属性: java;gutter:true; @AliasFor("name&qu…

    Java 2023年6月7日
    0110
  • 【校招VIP】[Java][一本][6分]按照真实的技能点进行业务描述

    关注【校招VIP】公众号 ,回复【简历 】,添加校招顾问微信,即可获取简历指导! 本份简历是一位21届一本java同学的简历,简历评分6分。 一、学员简历 二、指导意见 简历版式问…

    Java 2023年6月5日
    084
  • Java—多线程入门

    前置知识 什么是进程,什么又是线程?咱不是讲系统,简单说下,知道个大概就好了。 进程:一个可执行文件执行的过程。线程:操作系统能够进行运算调度的 最小单位。它被包含在进程之中,是进…

    Java 2023年6月7日
    074
  • javaWeb-HTML

    HTML 基础标签 字体大小 ( —)*** <h1> 我是h1 h1><h2> 我&#x662…

    Java 2023年6月13日
    099
  • JDK成长记5:LinkedList初探

    LinkedList初探 作为Java工程师,LinkedList你可能用的不多,大多你总是在new ArrayList。面试很多时候总是拿LinkedList和ArrayList…

    Java 2023年6月5日
    092
  • 基于Redisson的延迟队列实现

    package com.dong.mytest.demo.client; import cn.hutool.extra.spring.SpringUtil; import com….

    Java 2023年6月5日
    067
  • 22.1.18 前缀树,贪心算法,暴力递归,堆

    22.1.18 前缀树,贪心算法,暴力递归,堆 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符…

    Java 2023年6月13日
    082
  • Moriis神级遍历!

    Moriis 遍历 Morris 遍历是二叉树遍历的一种方式,传统的递归和非递归遍历的时间复杂的都是O(N),空间复杂度都是O(h)(h为树的高度),而 Morris 遍历可以做到…

    Java 2023年6月8日
    093
  • Redis和Mysql保持数据一致性

    1、简述 在高并发的场景下,大量的请求直接访问Mysql很容易造成性能问题。所以,我们都会用Redis来做数据的缓存,削减对数据库的请求。但是,Mysql和Redis是两种不同的数…

    Java 2023年6月8日
    079
  • ObjectPostProcessor使用与多种用户定义方式(9)

    前面介绍了 ObjectPostProcessor的基本概念。相信读者已经明白,所有的过滤器都由对应的配置类来负责创建,配置类在将过滤器创建成功之后,会调用父类的postProce…

    Java 2023年6月13日
    072
  • 初等数论

    若整数 n > 1,则 n 可以写为一系列的 质数之积 [n=p_1\cdot{p_2}\cdot{p_3}\ldots ] 上述可以拓展为 分解质因数,并且又因为可能存在 …

    Java 2023年6月16日
    066
  • 消息中间件:rabbitmq安装

    转自:https://blog.csdn.net/qq_27384769/article/details/79465954 1、下载Erlangwget http://erlang…

    Java 2023年5月30日
    069
  • 解决问题 Could not obtain transaction-synchronized Session for current thread

    解决问题 Could not obtain transaction-synchronized Session for current thread 问题现象 在使用Hibernat…

    Java 2023年5月30日
    084
  • list对象中的数据如何去重呢?

    下文笔者讲述list对象的去重方法分享,list的实现类是我们存储数据的容器, 当里面存储的对象存在重复值时,我们该如何对其进行去重操作呢? 下文笔者将一一道来,首先我们需了解对象…

    Java 2023年6月15日
    0105
  • 强烈推荐!史上最有深度的Java学习视频,Mybatis、Javaweb、SSM框架项目

    前言 今天给大家带来三个有深度的Java学习视频,在学习Java的进阶之路上,只需10分钟轻松Get教学视频的核心要点。 正文 一、Mybatis 视频介绍 文字内容: 本视频由张…

    Java 2023年6月9日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球