热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

什么是java的异常处理机制,java中异常处理机制的原理和应用

什么是java的异常处理机制,java中异常处理机制的原理和应用本文给大家带来一些java的知识,包括异常处理机制的原理和应用,包括异常和错误,trycatch语法,try

  什么是java的异常处理机制,java中异常处理机制的原理和应用

  本文给大家带来一些java的知识,包括异常处理机制的原理和应用,包括异常和错误,trycatch语法,trycatch执行序列等等。希望对你有帮助。

  如何解决写爬虫IP受阻的问题?立即使用。

  

一、Java异常简介

  大家可能对trycatch不陌生,使用起来都很熟练。

  当程序运行过程中出现错误时,就会抛出异常。抛出一个异常比终止程序要好。

  也可以在知道要出错的时候执行trycatch操作,在异常的时候执行一些特殊的操作。

  

1、Exception和Error

  异常和错误继承自Throwable类。在Java中,只能抛出或捕获Throwable类型的实例,这是异常处理机制的基本组件类型。

  异常是可预测的异常,可以在业务之外获得和处理。

  Error是一个意外的异常,当它发生时,会直接导致JVM无法管理。

  异常可分为检查性异常和非检查性异常。

  要检查性异常,在编写代码时必须使用try catch(例如IOException异常)。

  检查非异常,编译器不会发现这个地方是否会产生一次,比如空指针异常,这是可以在代码编写或使用时通过规范避免的。例如,sts的findbugs函数可以检测代码的空指针异常。

  

2、NoClassDefFoundError 和 ClassNotFoundException 有什么区别?

   NoClassDefFoundError是JVM运行时通过类路径加载类,找不到对应的类时抛出的错误。

  如果这个异常可能在编译期间发生,那么它必须在编译期间抛出。

  NoClassDefFoundError发生的场景:

  该类所依赖的类或jar不存在。但是在不同的域中,总之找不到ClassNotFoundException的发生场景:

  当调用类的forName方法时,指定的类public static void main(string[]args){

  尝试{

  class . for name(“test”);

  } catch(ClassNotFoundException e){

  e . printstacktrace();

  } }

二、trycatch语法

  

1、try语句

   try语句包含一段花括号内的代码,可能会抛出一个或多个异常。

  

2、catch语句

   catch语句的catch参数类似于方法的声明,包括异常类型和异常对象。异常类型必须是Throwable class的子类,指示catch语句处理的异常类型。异常对象由运行时系统在try指定的代码块中生成并捕获,花括号包含对象的处理,其中可以调用对象的方法。

  可以有多个catch语句,用于处理不同类型的异常。Java运行时系统从上到下检测每个catch语句处理的异常类型,直到找到匹配类型的catch语句。在这里,类型匹配意味着catch处理的异常类型与生成的异常对象或其父类的类型完全相同。因此,catch语句的顺序应该是从特殊到一般。

  

3、finally语句

  无论try中是否会引发异常,finally语句中的代码都将被执行。finally语句块最重要的功能应该是释放所请求的资源。

  

4、throws语句

   throws总是出现在函数头之后,以指示此方法可能引发的异常。

  

5、throw语句

  和throws一样,只是位置不同。throw放在catch模块中,执行throw后程序会立即终止。throw之后的代码不执行,finally除外。

  

6、抛出异常

  公共void测试()引发异常{

  抛出新的异常();};

7、捕获异常

  尝试{

  //代码区}catch(异常e){

  log.error(error: {} ,e);}最后{

  //最后必须执行的部分}

三、trycatch的执行顺序

  从try中的第一行代码开始,执行时JVM会创建一个异常对象。

  判断catch是否能捕获jvm创建的异常对象,

  如果被捕获,跳转到catch的代码块,继续按照catch中的代码逻辑执行,不结束程序;

  如果没有,直接打印异常信息,结束程序。

  如果try中没有异常,执行try中的代码,跳过catch,进入finally代码块。

  

四、异常处理原则

  如果需要检测的异常在方法中抛出,必须在方法上声明,否则必须用try-catch在方法中捕获,否则编译会失败。

  如果调用声明异常的函数,要么try-catch要么抛出,否则编译失败。

  什么时候接球,什么时候投球?内容可以解决,但不能用catch解决。用throws告诉打电话的人,打电话的人会解决。

  如果一个函数抛出多个异常,则在调用时必须有相应的多个catch用于目标处理。

  推荐:以上《java教程》是全面掌握java异常处理机制原理及应用的详细内容。更多请关注我们的其他相关文章!



推荐阅读
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
author-avatar
_流星_123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有