`
newleague
  • 浏览: 1508569 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

java运行时异常

阅读更多
Throwable是所有Java程序中错误处理的父类,有两种资类:Error和Exception。 

Error:表示由JVM所侦测到的无法预期的错误,由于这是属于JVM层次的严重错误,导致JVM无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。

Exception:表示可恢复的例外,这是可捕捉到的。

Java提供了两类主要的异常:runtime exception和checked exception。
Java提供了两类主要的异常:runtime exception和checked exception。checked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。

   但是另外一种异常:runtime exception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。

    以前一直没仔细想过出现运行时异常了系统会怎样工作,最近在一个模块排错时,才无意中发现了系统是如何处理运行时异常。出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往我们不对他处理罢了。

    也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。如果程序的退出刚好是你期望的结果,那就万事OK了。

   但最近我在项目却遇的问题,恰恰是这因为没有对运行时异常进行处理,而导致程序在运行一小段时间后就当了。事情是这样的,由于写程序时我对多线程的并发处理不太会,也就把一个模块写成了单线程的,由它来循环处理一个数据队列。但没想到队列里面的数据有一些与预期的格式不一样,处理这样的数据时,程序就抛出了运行时异常。由于没有对异常进行处理,这个异常也就抛到了Thread.run()。最后这个处理线程肯定是被终止了,队列里面的数据也就不会再有程序去处理了。这个结果显然不是我想要的,队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而,影响下面对正常数据的处理啊。

    所以最后我在程序的循环处理模块,里面加了一个catch处理,来扑捉所有的异常,决不让这个处理线程退出,要知道我的所有数据还要依靠他来处理呢 (^_^ )。在这个场景这样处理可能是一个比较好的应用,但并不代表在所有的场景你都应该如此。如果在其它场景,遇到了一些错误,如果退出程序比较好,这时你就可以不太理会运行时异常,或者是通过对异常的处理显式的控制程序退出。

   知道了虚拟机怎么处理运行时异常,也更进一步理解了Sping对Hibernate的封装了。由于Hibernate是和数据库打交道,所以总是要抛出一些乱七八糟的checked异常,平时我们根本不想catch这些异常。因为这些异常总是把代码弄的乱乱的,搞的到处都是try{} catch(){}块,并且常常加了catch块,也并不能把程序从异常中恢复过来(异常处理的目标之一就是为了把程序从异常中恢复出来)。为了通过编译器的检查,程序员被迫加上了catch块,往往这些catch并没有发挥他应有的作用,反而带来了很大的不便。所以Spring对Hibernate封装时就把Hibernate的异常进行了封装,全部封装成运行时异常了。也就是Spring来扑捉Hibernate抛出的异常,然后Spring把异常转换成Spring自己定义的运行时异常再抛出。这样我们在编码时使用Spring来调用Hibernate时,可以不用catch块来处理一些不必要的异常。当然你确实要是想处理,也可以通过添加cathc块去处理异常。不过这个时候,你的Catch就要扑捉运行时异常了,而不是一般的checked异常了。
分享到:
评论

相关推荐

    java 自定义异常-编译异常和运行异常

    java 自定义异常--编译异常和运行异常2种;Java异常机制可以保证程序更安全和更健壮。虽说Java类库已经提供很多可以直接处理异常的类,但是有时候为了更加地捕获和处理异常以呈现更好的用户体验,需要开发者自定义...

    java所有运行时异常以及错误.doc

    Java运行时异常与错误是程序执行过程中可能会遇到的问题,这些异常和错误分为两类:异常(Exception)和错误(Error)。异常是程序设计时可以预见和处理的问题,而错误通常是系统级或者不可预见的问题,通常不建议...

    java常见的运行时异常总结[文].pdf

    以下是几个常见的Java运行时异常的详细解释: 1. **NullPointerException**:当程序试图访问或操作一个null对象引用时抛出此异常。在上述示例中,`toUpper(null)` 方法尝试对一个null字符串调用 `toUpperCase()`,...

    JAVA范例 四)异常处理---编译时异常、运行时异常

    通过配置struts.xml文件或使用注解,可以指定当发生特定异常时,应该转发到哪个结果页面或者执行哪个业务逻辑。 对于"工具",这里可能是指使用IDE(集成开发环境)如Eclipse、IntelliJ IDEA等来辅助进行异常处理。...

    java异常继承何类,运行时异常与一般异常的区别(详解)

    Java 异常继承及运行时异常与一般异常的区别 Java 异常继承结构中, Throwable 是所有异常的根,下面有两个重要的子类:Error 和 Exception。Error 表示程序无法处理的错误,表示运行应用程序中较严重问题。...

    深入理解java异常(异常中的Error+异常中的Exception+检查异常+运行时异常+异常处理+throws关键字等)

    throws 关键字用于在方法签名中声明可能抛出的异常类型,当方法不知道如何处理异常时,可以使用 throws 将异常抛出给调用者处理或者交给 JVM。 在 Java 中,Exception 类提供了一组方法用来获取异常的一些信息,...

    运行时异常与一般异常的区别?

    当出现这种异常时,总是由 JVM 去接管。如:NullPointerException 为最常见的异常之一。出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由 Thread.run()...

    java 异常详解,java异常分类,创建自己的异常

    1. 运行异常:运行异常是指 Java 程序在运行时发现的由 Java 解释抛出的各种异常,包括算术异常、下标异常等等。 2. 非运行时异常:非运行时异常是由编译器在编译时检测是否会发生在方法的执行过程中的异常。 创建...

    java常见的异常

    处理这种异常时,通常需要重新设置中断状态或适当地恢复线程的执行。 10. **SQLException**:处理数据库操作时,如果出现错误,如连接失败、查询语法错误等,都会抛出此检查性异常。使用数据库连接时,应使用`try-...

    java异常处理习题

    Java 异常处理是 Java 编程语言中的一种重要机制,用于处理程序在运行时可能出现的错误或异常情况。下面是关于 Java 异常处理的习题和知识点总结: 一、Java 异常处理关键字 * Java 中用来抛出异常的关键字是 `...

    java内存机制及异常处理

    Java内存机制是Java虚拟机(JVM)的关键组成部分,它管理着程序运行时的数据存储。在Java中,内存主要分为以下几个区域: 1. **Heap(堆)**:这是Java中最主要的内存区域,用于存储所有的类实例和数组。当堆空间...

    java所有运行时异常以及错误.

    15. **初始化程序错误:ExceptionInInitializerError** - 静态初始化块中发生异常时,会抛出此错误。 16. **违法访问错误:IllegalAccessError** - 当尝试访问私有成员或违反访问权限控制时,会抛出此错误。 17. **...

    java applet运行出现异常

    6. **环境配置**:用户的JRE(Java运行环境)版本可能与Applet编译的JDK版本不匹配,也可能缺少必需的库或组件。 7. **网络问题**:如果Applet依赖于远程服务器上的资源,网络连接问题可能导致加载失败。 解决这些...

    java 异常框架CODE

    Java异常框架是Java编程语言中处理程序运行时错误和异常的核心机制。在Java中,异常是一种特殊的对象,用于表示程序运行过程中的不正常状态。Java的异常处理模型基于\"异常处理块\",包括try、catch、finally和throw...

    java异常机制小结

    异常的对象可以是 Java 运行时环境自动抛出的系统生成的异常,也可以是程序员自己抛出的异常。 四、Java 异常的处理 Java 异常处理通过 5 个关键字 try、catch、throw、throws、finally 进行管理。基本过程是用 ...

    Java\课件\JAVA的异常处理机制.ppt

    当程序中出现异常时,Java虚拟机会抛出一个异常对象,然后寻找合适的代码来捕获并处理这个异常。 2. **错误与异常的区别**: - **错误(Error)**:通常是由于系统资源问题或严重编程错误导致的,例如内存溢出、...

    JAVA面试题,基础入门知识,学习从扫盲开始

    Java 面试题中涵盖了 Java 的基础知识点,包括继承、多态、数组、列表、运行时异常、线程和同步机制、垃圾回收器、面向对象编程原则、反射、泛型、Java 8 新特性和大文件处理等方面。以下是对这些知识点的详细解释:...

    java异常 异常的概念 应用

    3. 提供详细的异常信息:在抛出异常时,提供有用的错误信息,方便调试。 4. 使用finally确保资源释放:对于打开的文件、网络连接等资源,finally块是保证它们被正确关闭的好地方。 通过深入理解和熟练应用Java异常...

    Java创建用户异常类

    如果java提供的系统异常类型不能满足程序设计的需求,那么可以设计自己的异常类型。 从java异常类的结构层次...另外一种问题是程序运行错误,java定义为Exception,这种情况下,可以通过程序设计调整来实现异常处理。

Global site tag (gtag.js) - Google Analytics