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入门到精通教程
查看: 303|回复: 0

Java 异常基本结构

[复制链接]
  • TA的每日心情
    奋斗
    2024-9-22 15:19
  • 签到天数: 795 天

    [LV.10]以坛为家III

    2050

    主题

    2108

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    724084
    发表于 2021-7-15 00:53:12 | 显示全部楼层 |阅读模式

    异常的定义:阻止当前方法或作用域继续执行的情况,即程序无法正常执行下去称之为异常。

    异常的基本结构:

    所有不正常的类都继承与Throwable类,包括Error类和Exception类

    Error一般是JVM抛出的错误,比如StackOverFlowError,OutOfMemoryError,这些错误是无法挽回的,只能结束当前Java进程的执行;

    Exception异常是Java应用抛出的,分为编译时期可检测的异常(如IOException)运行时期的异常(NullPointerException)

    编译时期可检测的异常必须要处理,否则编译器会报错误,

    运行时期的异常RuntimeException不需要强制处理,Exception异常一般可以通过捕获处理以后,程序可以继续正常执行。

     

    java异常常用的解决语句:

    栗子一:

    try  catch  finally 语句:

    public static void main(String[] args) { int []arr=new int[5]; try { arr[5]=0; System.out.println(5); }catch (ArrayIndexOutOfBoundsException e){ System.out.println("下标越界啦!"); System.out.println("e.getMessage()"+e.getMessage()); System.out.println("e.getCause()"+e.getCause()); System.out.println("e.toString()"+e.toString()); }finally {
     System.out.println("finally执行了");
    }
    }

    运行结果:

    下标越界啦! e.getMessage()5 e.getCause()null e.toString()java.lang.ArrayIndexOutOfBoundsException: 5
    finally执行了

    try语句块通常包括可能发生异常的代码,try语句块发生异常时,不再继续执行,try语句不能单独使用

    catch用来捕获异常并且发出警告:提示、检查配置、网络连接,记录错误等。

    每一个catch块用于处理一个异常。异常匹配是按照catch块的顺序从上往下寻找的,只有第一个匹配的catch会得到执行。匹配时,不仅运行精确匹配,也支持父类匹配,因此,如果同一个try块下的多个catch异常类型有父子关系,应该将子类异常放在前面,父类异常放在后面,这样保证每个catch块都有存在的意义。

    finally最终执行的代码,用于关闭和释放资源。

    异常的常用方法

    e.toString()获取的信息包括异常类型和异常详细消息,

    e.getCause()获取产生异常的原因

    e.getMessage()只是获取了异常的详细消息字符串。

    栗子二:

    throw是用于抛出异常。

    public static void main(String[] args) {
            int[] arr = new int[5];
            int i = 5;
            if (i > arr.length - 1) throw new ArrayIndexOutOfBoundsException("数组下标越界");
            System.out.println(arr);
        }
    }

    throws用在方法签名中,用于声明该方法可能抛出的异常,方法的调用者来处理异常

       public static void main(String[] args) { try { test(); }catch (Exception e){ System.out.println("捕获异常"); } } private static void test() throws ArrayIndexOutOfBoundsException{ int[] arr = new int[5]; int i = 5; if (i > arr.length - 1) throw new ArrayIndexOutOfBoundsException("数组下标越界"); System.out.println(arr); }

     注意的点:    1、不管有木有出现异常或者try和catch中有返回值return,finally块中代码都会执行;

                         2、finally中最好不要包含return,否则程序会提前退出,返回会覆盖try或catch中保存的返回值。

                         3.  如果方法中try,catch,finally中没有返回语句,则会调用这三个语句块之外的return结果

               4. 在try语句块或catch语句块中执行到System.exit(0)直接退出程序

                     

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-10-6 03:45 , Processed in 0.062387 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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