代码之家  ›  专栏  ›  技术社区  ›  DonX

除RuntimeException之外的异常

  •  2
  • DonX  · 技术社区  · 16 年前

    除了Java中的RunTimeExtRebug之外,是否有例外发生的可能性?谢谢。

    3 回复  |  直到 16 年前
        1
  •  6
  •   William Brendel    16 年前

    java.lang包定义了以下不是运行时异常的标准异常类:

    • ClassNotFoundException :引发此异常以指示找不到要加载的类。

    • CloneNotSupportedException :当为不实现可克隆接口因而无法克隆的对象调用clone()方法时,会引发此异常。

    • Exception :为响应在虚拟机级别检测到的错误,将引发此异常的相应子类。如果程序定义了自己的异常类,那么它们应该是异常类的子类。

    • IllegalAccessException :当程序尝试动态加载类(即使用类类类的ForName()方法,或类加载器类的FindSystemClass()或LoadClass()方法),并且当前执行的方法没有访问指定类的权限时,会引发此异常,因为该类在另一个包中且不是公共的。当程序试图创建类的实例(即使用类类类的newInstance()方法)时,如果调用方没有可访问的零参数构造函数,则也会引发此异常。

    • InstantiationException :当尝试使用类类的newInstance()方法实例化抽象类或接口时,引发此异常。

    • InterruptedException :引发此异常的原因是,正在休眠、等待或以其他方式暂停的线程已被其他线程中断。

    • NoSuchFieldException :找不到指定变量时引发此异常。这个异常在Java 1.1中是新的。

    • NoSuchMethodException :找不到指定的方法时引发此异常。

        2
  •  12
  •   Michael Myers KitsuneYMG    16 年前

    是的,有 种类。

    已检查异常

    编译器会让您知道,由于环境中最可能发生的故障,何时可以抛出它们。

    如果程序可以对它们做些什么,那么应该捕获它们,否则最好让它们离开。

    他们中的大多数继承自

    java.lang.Exception
    

    或来自

    java.lang.Throwable
    

    虽然从前者继承更好。

    例如:

    java.io.IOException
    

    表示发生了某种类型的I/O异常。此类是由失败或中断的I/O操作产生的一般异常类。

    错误

    这些是特殊类型的例外。他们 不应该被抓住 因为当它们发生的时候,就意味着真的很糟糕的事情发生了。

    他们都继承自

    java.lang.Error
    

    例如:

    java.lang.OutOfMemoryError
    

    当Java虚拟机无法分配对象时抛出,因为它内存不足,垃圾回收器无法再提供内存。

    java.lang.StackOverflowError
    

    当应用程序循环过深而发生堆栈溢出时引发。

    运行时异常

    用于识别程序员故障,而不是资源故障。

    在编码时可以“正常”避免运行时异常。如果你有一个很可能你做错了什么。

    有时会捕获运行时异常,但是,除非您确切知道自己在做什么和 为什么? 抓住他们是一种不好的做法(同样,除非这正是你需要的)

    他们继承自

    java.lang.RuntimeException 
    

    例如

    java.lang.ArrayIndexOutOfBoundsException
    

    引发以指示已使用非法索引访问数组。索引为负或大于或等于数组的大小

    java.lang.NullPointerException
    

    当应用程序尝试在需要对象的情况下使用空值时引发

    关于最后两个, 大多数 有时,可以通过仔细编程和了解程序的状态(这个数组有5个元素吗?为什么我要尝试进入-1或6。此引用是否为空?为什么要调用null.ToString())

    尽管我和那些声称所有的NPE都应该被抓获的人发生过争执。我能说什么呢?

        3
  •  2
  •   Igor Zelaya    16 年前

    基本上在Java(反对.NET)中,有两种类型的异常:

    • 选中的异常:从异常继承的所有类。客户端代码必须通过try catch或throws子句处理此类异常(在编译器中强制执行)。
    • 未选中的异常:从RuntimeException继承的所有类。客户端代码不必处理此类异常。

    我可以推荐下列的吗 O'Reilly On Java 例外条款。