Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 568|回复: 0

Java中异常发生时代码执行流程

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-9-1 16:17:31 | 显示全部楼层 |阅读模式

    异常与错误:
      异常:
      在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员)已经犯了个错误,现在有一个机会来修改它。Java中使用异常类来表示异常,不同的异常类代表了不同的异常。但是在Java中所有的异常都有一个基类,叫做Exception。
      错误:
      它指的是一个合理的应用程序不能截获的严重的问题。大多数都是反常的情况。错误是VM的一个故障(虽然它可以是任何系统级的服务)。所以,错误是很难处理的,一般的开发人员(当然不是你)是无法处理这些错误的,比如内存溢出。 和异常一样,在Java中用错误类来表示错误,不同的错误类代表了不同的错误。 但是在Java中所有的错误都有一个基类,叫做Error。
      综上,我们可以知道异常和错误最本质的区别就是异常能被开发人员处理而错误时系统本来自带的,一般无法处理也不需要我们程序员来处理。
      1.一个异常是在一个程序执行过程中出现的一个事件,它中断了正常指令的运行
      2.错误,偏离了可接受的代码行为的一个动作或实例
      异常的结构分类:
      1、运行时异常(未检查异常)
      2、编译时异常(已检查异常)
      运行异常即是RuntimeException;其余的全部为编译异常
      在Java中异常Exception和错误Error有个共同的父类Throwable。
      Error Exception
      runtimeException几个子类
      1、 java.lang.ArrayIndexOutOfBoundsException
      数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。
      2、java.lang.ArithmeticException
      算术条件异常。譬如:整数除零等。
      3、java.lang.NullPointerException
      空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的
      属性、计算null对象的长度、使用throw语句抛出null等等
      4、java.lang.ClassNotFoundException
      找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出
      该异常。
      对异常的处理:
      try{}catch{}
      try{}catch{}finally{}无论有无异常finally代码块都会被执行
      try{}finally{}也是可以组合使用的但是catch{}finally{}不可以
      注意:在继承关系中,子类覆盖父类的方法,抛出异常的范围不能比父类更宽泛
      异常的使用
      在异常的使用这一部分主要是演示代码,都是我们平常写代码的过程中会遇到的(当然只是一小部分),抛砖引玉吗!

         下面这个例子主要通过两个方法对比来演示一下有了异常以后代码的执行流程。

         

    public class Exception1 {
        public static void testException1() {
            int[] ints = new int[] { 1, 2, 3, 4 };
            System.out.println("异常出现前");
            try {
            System.out.println(ints[4]);
            System.out.println("我还有幸执行到吗");// 发生异常以后,后面的代码不能被执行
            } catch (IndexOutOfBoundsException e) {
            System.out.println("数组越界错误");
            }
            System.out.println("异常出现后");
            }
    
        public static void main(String[] args) {
            testException1();
    
        }
    
    }

    运行结果:

    异常出现前
    数组越界错误
    异常出现后

     

     

     

    public class Exception2 {
        public static void testException2() {
            int[] ints = new int[] { 1, 2, 3, 4 };
            System.out.println("异常出现前");
            System.out.println(ints[4]);
            System.out.println("我还有幸执行到吗");// 发生异常以后,他后面的代码不能被执行
            }
    
        public static void main(String[] args) {
            testException2();
    
        }
    
    }

    运行结果:

    异常出现前Exception in thread "main"
    java.lang.ArrayIndexOutOfBoundsException: 4
    at Exception2.testException2(Exception2.java:6)
    at Exception2.main(Exception2.java:11)

     

     

       总结:首先指出例子中的不足之处,IndexOutofBoundsException是一个非受检异常,所以不用try...catch...显示捕捉,但是我的目的是对同一个异常用不同的处理方式,看它会有什么不同的而结果(这里也就只能用它将就一下了)。异常出现时第一个方法只是跳出了try块,但是它后面的代码会照样执行的。但是第二种就不一样了直接跳出了方法,比较强硬。从第一个方法中我们看到,try...catch...是一种"事务性"的保障,它的目的是保证程序在异常的情况下运行完毕,同时它还会告知程序员程序中出错的详细信息(这种详细信息有时要依赖于程序员设计)。

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 18:49 , Processed in 0.059383 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表