关于javascript:JavaSE异常的分析

57次阅读

共计 2253 个字符,预计需要花费 6 分钟才能阅读完成。

目录

在日常程序设计当中,咱们的程序难免会呈现各种各样的问题,比方格局谬误、标点符号有误、输出不匹配、数组越界等,其中有的属于语法错误,有的则属于异样。

意识异样

察看以下几种写法,能够看到, 在 Java 中,不同的异样有对应的类进行形容

算术异样:

数组越界:

空指针:

异样的实质

咱们从此图来剖析:咱们所说的异样涵盖着许多类,有 Throwable 类、Exception、RuntimeException 等等。

Throwable:属于异样体系的顶层类,其派生出两个子类:Error 和 Exception;

Error:属于 Java 虚拟机无奈解决的严重错误。如:JVM 外部谬误、资源耗尽等;

Exception:这便是咱们常说的异样,能够由程序员解决的异样,其默认是编译时异样。

异样的分类

异样是依据程序执行的工夫来分类的,次要有程序编译时异样和运行时异样两种,除此之外还有一种自定义异样,在最初解说。

1. 编译时异样

程序在编译时产生的异样,也称为 受查异样

既然是在编译时呈现了异样,那么程序想要执行,咱们就必须想方法解决掉这样的异样。

2. 运行时异样

程序在运行期间呈现的异样,也称为 非受查异样

所有运行时异样的父类都是 RuntimeException

异样的解决

咱们始终在讲异样的呈现,那具体要怎么解决这些异样呢?

异样的解决次要有两种,异样须要捕捉,也能够被动抛出异样,上面将认真分析:

解决形式:

1.LBLY 事先防御型:

在操作之前就做好短缺的筹备,一旦某一步出现异常就须要解决或者终止。

2.EAFP 预先认错型:

try-catch,先将所有流程走完,最初再报出呈现的异样,再依据状况解决或终止;

这种写法的益处是失常流程与异样解决离开,便于浏览,代码清晰。

异样的抛出

当咱们晓得所写的程序中某个局部容易出现异常的时候,能够在执行处被动抛出异样,这样便于察看找到问题。

在 Java 中能够借助 throw 关键字,将异样对象抛给调用者;

  1. throw 必须写在办法体外部;
  1. 抛出的对象必须是 Exception 或者 Exception 的子类对象;
  2. 如果只抛出 Exception,那么默认是受查异样;
  3. 如果抛出的是 RunTimeException 或者 RunTimeException 的子类,则能够不必解决,间接交给 JVM 来解决,然而一旦交给 JVM 解决,程序就会终止;
  4. 如果抛出的是编译时异样,用户必须解决,否则无奈通过编译;
  5. 异样一旦抛出,其后的代码就不会执行;

当须要抛出受查异样时:不能只抛不解决;

解决办法:1.try – catch —— 本人解决;

2. throws 申明 —— 交给 JVM 解决;

异样的申明

当办法中抛出 编译时异样 ,用户不想解决该异样,此时就能够借助 throws 将异样抛给办法的调用者来解决。即以后办法不解决异样,揭示办法的调用者解决异样。

异样的捕捉

应用 try – catch:

try 中存储可能呈现问题的代码;

catch 中捕捉可能呈现的异样;

察看上面实例的执行:

捕捉与抛出异样雷同:

捕捉与抛出异样不同:

如何抉择适合的解决形式:

  • 对于比较严重的问题 (例如领取相干的场景), 应该让程序间接解体, 避免造成更重大的结果;
  • 对于不太重大的问题, 能够记录谬误日志, 并通过监控报警程序及时发送告诉;
  • 对于可能会复原的问题 (和网络相干的场景), 能够尝试进行重试;
  • 在咱们以后的代码中采取的是通过简化的第二种形式. 咱们记录的谬误日志是出现异常的办法调用信息, 能很 疾速的让咱们找到出现异常的地位;

finally 解决

在写程序时,有些特定状况中,不管程序是否产生异样,都须要执行,比方程序中关上的资源:网络连接、数据库连贯、IO 流等,在程序失常或者异样退出时,必须要对资源进行回收。另外,因为异样会引发程序的跳转,可能导致有些语句执行不到,finally 就是用来解决这个问题的。

应用办法:

也能够给 try 前面带上参数:这时候会主动敞开资源

发问:如果 finally 里也有 return,会返回谁?

异样的意义是什么?

1. 精确定位异常情况

2. 不交给 JVM 解决,即是出现异常咱们还能够执行后续代码;

自定义异样类

Java 中内置的异样类型有时无奈满足工程理论须要,此时就须要咱们本人定义适合的异样类。

自定义异样十分重要,假使工程较大,只通过打印查看起来效率是很低的。

  • 自定义异样通常会继承自 Exception 或者 RuntimeException;
  • 继承自 Exception 的异样默认是受查异样;
  • 继承自 RuntimeException 的异样默认是非受查异样;

如何自定义呢?灵感来源于内置类型的写法:

当咱们察看任意一个运行时异样时,会发现它继承了 RuntimeException,公有成员能够不写,其次还有两个构造方法。而受查异样与之不同仅在于继承了 Exception,那么咱们能够间接模拟来写。

1. 自定义运行时异样

2. 自定义受查异样

面试问题:

1. throw 和 throws 的区别?

2. finally 中的语句肯定会执行吗?

3. 异样的解决流程?

  • 程序先执行 try 局部的失常流程——> 如果 try 中出现异常,就会完结 try 局部,从 catch 中寻找是否有匹配异样类,如果找到就执行 catch 中的代码,如果没有找到,就会向上传递到下层调用者——> 如果该调用者仍然匹配不到对应的异样类,就会持续向上传递——> 如果直到 main 办法也没有适合的异样类,就会交给 JVM 来解决,解决后程序终止;
  • 如果有 finally 语句,那么无论是否找到,finally 中的语句肯定会被执行

对文章中内容感兴趣的小伙伴能够搜寻微信公众号:敲代码的老贾,支付相应材料

正文完
 0