【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

相关文章
|
2天前
|
Java UED
JavaSE&异常
JavaSE&异常
|
4月前
|
监控 Java 程序员
|
6月前
|
安全 Java 数据安全/隐私保护
【JavaSE专栏70】自定义异常,用户根据自己的需求创建的异常类
【JavaSE专栏70】自定义异常,用户根据自己的需求创建的异常类
|
7月前
|
存储 监控 Java
【javaSE】 万字带你认识异常
【javaSE】 万字带你认识异常
|
7月前
|
Java 程序员
JavaSE 异常
JavaSE 异常
20 0
|
8月前
|
Java 程序员
JavaSE/异常
JavaSE/异常
|
9月前
|
Java 数据安全/隐私保护
JavaSe-异常
JavaSe-异常
|
9月前
|
算法 Java 开发者
【JavaSE专栏9】Java 注释知多少
【JavaSE专栏9】Java 注释知多少
|
9月前
|
Java 程序员 数据库
【JavaSE】学习异常
【JavaSE】学习异常
|
9月前
|
Java
【JavaSE】Java基础语法(二十五):异常
1. 异常 异常的概述 异常就是程序出现了不正常的情况