欢迎光临散文网 会员登陆 & 注册

Java 异常

2023-02-28 20:31 作者:回到唐朝当少爷  | 我要投稿

异常

在java.lang.Throwable下分为Error和Exception,其中Error是给sun公司用的,是系统出现的问题,我们主要处理的是Exception

Exception:异常,代表程序可能出现的问题,我们通常会用Exception以及他的子类来封装程序出现的问题.

Exception分为RuntimeException的其他异常

  • 运行时异常:RuntimeException以及其子类,编译阶段不会出现异常提醒,运行时出现的异常,如数组索引越界异常

  • 编译时异常:编译阶段就会出现异常提醒的,如日期解析异常

异常体系的最上层的父类是Exception

编译阶段:Java不会运行代码,只会检查语法是否错误,或者做一些性能的优化,提醒程序员检查本地信息

异常的作用:

  1. 查看bug的关键参考信息

  2. 作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况

报错,空指针异常,因为创建的引用类型数组未初始化,默认值为Null,需要创建学生对象放进去Student s1 = new Student(),如果用Null调用getName会引发空指针异常

异常的处理方式

JVM默认的处理方式

  • 把异常的名称,原因及出现的位置等信息输出在控制台

  • 程序停止执行,下面的代码不会再执行了

自己处理(捕获异常)

格式:

目的:当代码出现异常时,可以让程序继续往下执行

  1. 问题1:如果try中没有遇到问题怎么执行?会把try里面所有的代码全部执行完毕,不会执行catch里面的代码,只有当出现了异常才会执行catch里面的代码

  2. 问题2:如果try中可能遇到多个问题,怎么执行?

    要写多个catch与之对应

    如果我们要捕获多个异常,这些异常如果存在父子关系的话,父类一定要写在下面如果两种异常的处理方式一样:可以在catch中的小括号里面用|同时捕获多个异常(JDK7出现)

  3. 问题3:如果try中遇到的问题没有被捕获怎么执行?相当于try...catch的代码白写了,最后还是会交给虚拟机处理,也就是以红色字体打印到控制台并终止执行

  4. 问题3:如果try中遇到了问题,那么try下面的其他代码还会执行吗?

    不会执行了,而是会直接跳转到对应的catch中执行catch里面的语句体 但是如果没有catch与之匹配,那么还是会交给虚拟机进行处理

异常中的常见方法

printStackTrace是最常用的

抛出处理

  • throws:写在方法定义处,表示声明一个异常,告诉调用者,使用本方法可能会有哪些异常

  • 编译时异常:必须要写 运行时异常:可以不写

  • throw:写在方法内,结束方法,手动抛出一场对象,交给调用者,方法中下面的代码不再执行了

小结

  1. 虚拟机默认处理异常的方式:把异常信息以红色字体打印在控制台,并结束程序

  2. 捕获try...catch:一般在调用处,能让代码继续往下执行

  3. 抛出throw throws:在方法中出现异常了,方法就没有继续运行下去的意义了,采用抛出处理,让该方法结束运行并告诉调用者出现了问题

抛出:告诉调用者出错了

捕获:不让程序停止

自定义异常

  1. 定义异常类

  2. 写继承关系

  3. 空参构造

  4. 带参构造

意义:就是为了让控制台的报错信息更加见名知意


Java 异常的评论 (共 条)

分享到微博请遵守国家法律