【JavaSE】认识异常(上篇)

简介: 【JavaSE】认识异常(上篇)

✨hello,进来的小伙伴们,大家好呐!✨

🎁🎁系列专栏:【JavaSE】

🍱🍱本篇内容:异常的认识,异常分为几类,如何处理异常等等。

🍮🍮作者简介:一名大二即将升大三的科班编程小白,我很平凡,学会努力!

一、定义

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

实例:1算术异常

   public class TestDemoX {

       public static void main(String[] args) {

           int a = 10;

           System.out.println(a/0);

       }

   }

82aecfe2a7474559bc298a0fe2b14ca9.png

实例2:数组越界异常

   public class TestDemoX {

       public static void main(String[] args) {

           int[] arr = {1,2,3,4,5};

           System.out.println(arr[20]);

       }

   }

500d5784c50048c89b0b35aa1ea7cfea.png

实例3:空指针异常

   public class TestDemoX {

       public static void main(String[] args) {

           int[] arr1 =null;

           System.out.println(arr1.length);

       }

   }


d417f66aaa684c9b91e6602238ec4e33.png

注意这些异常都继承于Exception。

二、 异常的分类

1、编译时异常

   public class Person {

     private String name;

     private String gender;

     int age;

     // 想要让该类支持深拷贝,覆写Object类的clone方法即可

     @Override

     public Person clone() {

       return (Person)super.clone();

    }

   }

2、运行时异常

在程序执行期间发生的异常,称为运行时异常,也称为非受检查异常。

这里我们借助JavaAPI,可以知道RunTimeException以及其子类对应的异常,都称为运行时异常。

image.png

注意:编译时出现的语法性错误,不能称之为异常!

比如我们这里把println写成了prinln 这就称为语法错误,而不是异常了!

       System.out.prinln();

三、异常的处理

1.了解异常

我们刚才提到,当程序出现异常的时候,我们没去处理,那么这个时候程序就终止了,不会再继续下去!

   public class TestDemoX {

       public static void main(String[] args) {

           int a = 10;

           System.out.println(a/0);

           System.out.println("执行后续代码!");

       }

   }

可以发现,后续代码没有被执行! 这个时候异常会交给jvm来处理,程序会立即终止!

73e4540f151646c0bc803e4f4cfb3349.png

2、异常处理

这里我们以一个游戏登录来描述:

try里面存放可能出现异常的代码;

catch里面捕获可能出现的异常;

注意:一个try可以对应多个catch。

   try {

     登陆游戏();

     开始匹配();

     游戏确认();

     选择英雄();

     载入游戏画面();

    ...

   } catch (登陆游戏异常) {

     处理登陆游戏异常;

   } catch (开始匹配异常) {

   处理开始匹配异常;

   } catch (游戏确认异常) {

   处理游戏确认异常;

   } catch (选择英雄异常) {

   处理选择英雄异常;

   } catch (载入游戏画面异常) {

   处理载入游戏画面异常;

   }

我们还是以刚才的算术异常来举例:

   public class TestDemoX {

       public static void main(String[] args) {

           int a = 10;

           try{

               System.out.println(a/0);

           }

           catch (ArithmeticException e){

               System.out.println("出现了算术异常!");

           }

           System.out.println("执行后续代码!");

       }

   }

运行结果:我们发现catch捕获异常之后,后续代码照样执行。

126395b743584cd59b5f811401ac4c05.png

那么我们如何得知出现了何种异常呢?很简单,我们只需要通过(参数)e.printStackTrace();便可以快速的定位异常的位置。

f9858cbb0c2c4ac8bbe66dbbf858098a.png

450973de4a124af58f2e9ef41a4c3067.png450973de4a124af58f2e9ef41a4c3067.png

注意,这里没有同时抛出两个以上的异常的说法,就是catch捕获到异常以后,会执行catch{}里面的内容,写个例子给大家看一下:

   public class TestDemoX {

       public static void main(String[] args) {

           int a = 10;

           try{

               System.out.println(a/0);

               int[] arr = {1,2,3,4};

               arr = null;

               System.out.println(arr[100]);

           }

           catch (ArithmeticException e){

               e.printStackTrace();

               System.out.println("出现了算术异常!");

           }

           catch(ArrayIndexOutOfBoundsException e){

               e.printStackTrace();

               System.out.println("数组越界异常!");

           }

           catch (NullPointerException e){

               e.printStackTrace();

               System.out.println("空指针异常!");

           }

           System.out.println("执行后续代码!");

       }

   }

运行结果:我们发现,捕获到算术异常以后,剩下的代码并没有被执行,这正好验证了没有同时抛出多个异常的说法!


efad44dda1ef47df9cf23c0cfd7c0413.png

相关文章
|
存储 数据可视化 数据安全/隐私保护
使用 Docker Compose 部署 Docker Registry
【1月更文挑战第2天】 在内网环境中,我们期望能够在本地共享镜像。为了解决这一问题,Docker Registry成为了我们的救星。Docker Registry是一个用于存储和管理Docker镜像的开源工具。通过在本地部署Docker Registry,您可以轻松地构建、存储和分享自己的Docker镜像。
850 3
使用 Docker Compose 部署 Docker Registry
|
8月前
|
存储 弹性计算 安全
阿里云服务器付费类型、地域、镜像、存储、带宽和安全组设置与选择注意事项参考
在我们通过自定义购买的方式购买阿里云服务器器ECS时,会有多个选项,有的新手用户可能并不是很清楚这些选项是什么,选择或设置时需要注意什么,本文将从付费类型、地域与可用区、镜像、存储、带宽和安全组等多个方面,为您详细解析云服务器购买过程中各个参数与配置的选择注意事项,以供参考。
470 66
|
机器学习/深度学习 存储 PyTorch
PyTorch深度学习基础:张量(Tensor)详解
【4月更文挑战第17天】本文详细介绍了PyTorch中的张量,它是构建和操作深度学习数据的核心。张量是多维数组,用于存储和变换数据。PyTorch支持CPU和GPU张量,后者能加速大规模数据处理。创建张量可通过`torch.zeros()`、`torch.rand()`或直接从Python列表转换。张量操作包括数学运算、切片和拼接。在深度学习中,张量用于神经网络模型的构建和训练。理解张量对于掌握PyTorch至关重要。
|
机器学习/深度学习 语音技术
AIGC工具——Resemble.AI
【1月更文挑战第18天】AIGC工具——Resemble.AI
565 1
AIGC工具——Resemble.AI
|
存储 缓存 NoSQL
Tair 整体介绍及在阿里集团的应用 | 学习笔记
快速学习 Tair 整体介绍及在阿里集团的应用
Tair 整体介绍及在阿里集团的应用 | 学习笔记
|
存储 运维 Java
分布式定时任务-Quartz
分布式定时任务-Quartz
分布式定时任务-Quartz
|
JSON 前端开发 JavaScript
前后端分离的接口规范
前后端分离的接口规范
前后端分离的接口规范
|
Windows
使用TeXLive+VSCode实现Windows系统本地读写、编译LaTeX文件
本文介绍如何使用TeXLive+VSCode实现Windows系统上可以本地实现对LaTeX文件的操作,包括阅读、编写和编译等。 本文基本使用默认普遍使用的选项进行安装,可能会根据作者对相关功能的理解进行后续更新。
使用TeXLive+VSCode实现Windows系统本地读写、编译LaTeX文件
|
XML 监控 Java
【Spring Boot系列1】一文带你了解Spring Boot(上)
这几天一直没有更新,本来上一篇文章打算写MyBatis和实际项目的应用,当我把项目代码看完后,发现里面很多地方还是不太理解,就先不写了,等过两个月,实力水平提上来后,我再写这块内容。
479 0
【Spring Boot系列1】一文带你了解Spring Boot(上)