常见 Java 异常解释:(译者注:非技术角度分析。阅读有风险,理解需谨慎:)
1. java.lang
java.lang软件包是java语言的核心部分,它提供了java中的基础类。 java.lang.Object,这是java.lang的根类,也是所有java类的超类。
java.lang |
|
ArithmeticException 出现异常的运算条件时,抛出此异常。例如,一个整数"除以零" |
你正在试图使用电脑解决一个自己解决不了的数学问题,请重新阅读你的算术表达式并再次尝试。 |
ArrayIndexOutOfBoundsException 用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引 |
请查看 IndexOutOfBoundsException。不同之处在于这个异常越界的元素不止一个。 |
ArrayStoreException 向数组中存放与声明类型不兼容对象而产生的异常 |
你已用光了所有数组,需要从数组商店中购买更多的数组。 |
ClassCastException 类型转换错误,通常是进行强制类型转换时候出的错误。 |
你需要呆在自己出生的种姓或阶级。Java 不会允许达利特人表现得像刹帝利或者高贵种族的人假装成为工人阶级。为了保持向前兼容,Java 1.0中把Caste误写为Cast保留到了现在。 |
ClassNotFoundException 异常是找不到某个类。 有可能是创建对象的时候没加包名,或是没导jar包。 在java当中,执行的所有的类都是ClassLoader加载的,所以如果说没找到类,就应该想到是不是ClassLoader没有在指定的位置load到应该有的类呢? |
你似乎创造了自己的类。这也是目前 Java 还未实现的种姓制度,但是 Java 明显使用了巴厘岛的种姓制度。也就是说,如果你是一个武士,也就相当于印度种姓制度中的第三层——吠舍。 |
CloneNotSupportedException 如果此对象的类并没有实现Cloneable接口,则抛出该异常 |
你是一名克隆人。找到你的原型,告诉他你想做什么,然后自杀。 |
IllegalAccessException 对类的访问被拒绝 ,,一般来说,是由于java在反射时调用了private方法所导致的。 |
你是一个正在运行 Java 程序入室盗窃的小偷,请结束对电脑的盗窃行为,离开房子,然后再试一次。 |
IllegalArgumentException 抛出的异常表明向方法传递了一个不合法或不正确的参数。 |
你试图反对之前的异常。 |
IllegalMonitorStateException 抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程 |
请打开你的电脑屏幕背面。 |
IllegalStateException 在非法或不适当的时间调用方法时产生的异常。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。 |
你来自一个尚未被联合国承认的国家,也许是库尔德斯坦或者巴勒斯坦。拿到真正的国籍后重新编译你的 Java 代码,然后再试一次。 |
IllegalThreadStateException 指示线程没有处于请求操作所要求的适当状态时抛出的异常 |
你电脑的一颗螺丝上到了错误的螺纹孔里,请联系你的硬盘供应商。 |
IndexOutOfBoundsException 指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。 |
你把食指放在了无法接收的地方,重新放置,再试一次。 |
InstantiationException 实例化异常。当试图通过newInstance方法创建某个类的实例,而该类是一个抽象类或者接口时候,抛出该异常。 |
不是每件事都会立即发生,请更耐心一点。 |
InterruptedException 当线程在活动之前或活动期间处于正在等待、休眠或占用状态且该线程被中断时,抛出该异常。 |
告诉你的同事、室友等,当你工作的时候,请勿打扰。 |
NegativeArraySizeException 如果应用程序试图创建大小为负的数组,则抛出该异常。 |
你创建了一个负数长度的数组。这会丢失信息,长期发展将会毁灭宇宙。不过放宽心,Java 发现了你正在做的事,不要再这么干了。 |
NoSuchFieldException 类不包含指定名称的字段时产生的异常。 |
你正试图去一个不存在的区域游览。如果你试图去参观一个事实上不存在,其实已经是最高机密的飞机场时,也会得到这个异常。我可以给你示例,然后不得不杀了你。 |
NoSuchMethodException 无法找到某一特定方法时,抛出该异常。 |
不要使用那个方法!拜托了,就像我们一直做的那样去解决事情吧。 |
NullPointerException 当应用程序试图在需要对象的地方使用
|
你没有狗。请你先找一只狗,比如一只布烈塔尼獵犬,然后再试一次。 |
NumberFormatException 当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。 |
你正在使用过时的测量单位,比如英寸或者品脱。请转换成国际基本单位。有一个已知的 bug 会导致 Java 抛出这个异常,那就是你太矮了或者太高了。 |
RuntimeException
|
你不能跑得足够快,可能因为你太胖了。关掉你的电脑,出门锻炼吧。 |
SecurityException 由安全管理器抛出的异常,指示存在安全侵犯。显然是权限不够 |
你已被认为是国家安全的一个威胁。请你呆在原地别动,然后等着警察来并带你走。 |
StringIndexOutOfBoundsException 此异常由 |
你的内裤和这个地方格格不入。换掉它们,再试一次。另外如果你根本不穿任何内裤,也会得到这个异常。 |
UnsupportedOperationException 当不支持请求的操作时,抛出该异常。 |
因为一些原因,你正试图做一个在道德上不被 Java 支持的手术。包括不必要的截肢,例如割包皮。请停止滥用你的身体,不要移除你的孩子,该死的! |
2. java.util
实用工具类库java.util包。在这个包中,Java提供了一些实用的方法和数据结构。例如,Java提供日期(Data)类、日历 (Calendar)类来产生和获取日期及时间,提供随机数(Random)类产生各种类型的随机数,还提供了堆栈(Stack)、向量 (Vector) 、位集合(Bitset)以及哈希表(Hashtable)等类来表示相应的数据结构。
java.util |
|
ConcurrentModificationException 当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。 |
有人修改了你的 Java 代码。你应该更改密码。 |
EmptyStackException 该异常由 |
为了让 Java 工作,你必须在桌子上放一叠 Java 书籍。当然,如果书很厚的话,一本就够了。 |
MissingResourceException 缺少资源时抛出此异常。可能有什么包没导进去或者工程没有读完就开始运行了。 |
你太穷了,不配使用 Java。换一个更便宜的语言吧(比如 Whitespace、Shakesperre、Cow、Spaghetti 或者 C#)。 |
NoSuchElementException 访问不存在元素出现的异常,比如迭代器越界等等 |
这里只存在四种元素(地球、水、空气、火)。《第五元素》只是部电影而已。 |
TooManyListenersException
|
你被太多秘密机构窃听了,SecurityException 马上就到。 |
3. java.awt
awt是(AbstractWindowToolkit)的缩写,它是java一个抽象窗口工具包,提供了很多图形界面组件类。例如Button、TextField等。
java.awt |
|
AWTException 表示发生了 Absract Window Toolkit 异常。 |
你正在使用AWT,也就是说你的图形界面会很丑。这个异常只是一个警告可以被忽略。 |
FontFormatException 此异常由 |
你的布局很丑陋,或者你选择了一个糟糕的字体,或者太多的字体。请咨询一名专业的设计师。 |
HeadlessException Headless模式是系统的一种配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标。这时候却调用与键盘、显示器或鼠标有关的代码时,被抛出的异常。 |
Java 认为身为一名程序员,你实在是太蠢了。 |
IllegalComponentStateException 当 AWT 组件未处于所请求操作的适当状态时,抛出该异常。 |
你的一个硬件(例如硬盘、CPU、内存)坏掉了。请联系你的硬件供应商。 |
4. java.awt.color
提供用于颜色
java.awt.color |
|
CMMException 图像格式解析错误 |
你的 CMM 坏掉了,真是见鬼了。我经常烧毁自己的房子,然后去一个新的城市重新开始。 |
ProfileDataException 当访问或处理 ICC_Profile 对象出现错误时,抛出此异常。 |
你的个人档案包含可疑信息。如果你不是一名共产主义者、*或者无神论者,请联系 CIA 修正错误。 |
5. java.awt.datatransfer
提供在应用程序之间和在应用程序内部传输数据的接口和类。它定义了 "transferable" 对象的概念,该对象可以在应用程序之间或应用程序内部传输。它是一种通过实现 Transferable 接口标识自身为可传输的对象。
java.awt.datatransfer |
|
MimeTypeParseException 封装与 MimeType 解析相关的异常的类。 |
你的哑剧(Mime)糟透了,没人能够理解你到底想表达什么。尝试一些更简单的事情吧,比如迎风散步,或者被困在一个看不见的盒子里。 |
UnsupportedFlavorException 在此 flavor 中不支持所请求的数据的所产生的异常。 |
你正试图使用一种 Java 不知道的香料。大部分人似乎只知道使用香草和樱桃。 |
6. java.beans
包含与开发 beans 有关的类,即基于 JavaBeansTM 架构的组件。 JavaBeans 一种软件组件结构,扩展了Java语言的功能,能够构造可重用的软件组件。bean(即Java bean)就是Java的类,或者说,就是Java语言的组件,充分体现了Java语言平*立和面向对象编程的优势。
java.beans |
|
IntrospectionException 在 Introspection 期间发生异常时抛出异常。 典型的 cause 包括:无法将字符串类名称映射到 Class 对象、无法解析字符串方法名,或者指定对其用途而言具有错误类型签名的方法名称。 |
你太内向了,你应该变得外向一些。 别再当一个呆子,出门去见见人吧! |
PropertyVetoException 当某一属性的提议更改表示一个不可接受的值时,将抛出的异常 |
你的一部分财产被冻结了。这条信息应该已经告诉你谁干的和原因。如果没看见,你可能也不该询问。 |
7. java.io
Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。
java.io |
|
CharConversionException 用于字符转换出错产生的异常。即字符编码解析失败 |
你一直试图焚烧一些不燃物。也可能是因为你试着把自己变成一条鱼,但这不可能发生。 |
EOFException 当输入过程中意外到达文件或流的末尾时,抛出此异常。 此异常主要被数据输入流用来表明到达流的末尾。注意,其他许多输入操作返回一个特殊值表示到达流的末尾,而不是抛出异常。 |
你得到这条异常是因为你不知道EOF是什么意思。但是,我并不打算告诉你,因为你是一个不学无术的人。 |
FileNotFoundException 当试图打开指定路径名表示的文件失败时,抛出此异常。 在不存在具有指定路径名的文件时,此异常将由 |
一名木匠应该总是知道他的工具放在哪里。 |
InterruptedIOException I/O 操作已中断信号,抛出此异常。抛出 |
你不顾之前的 IOException,一直在使用 IO,然后你的活动就被中断了。 |
InvalidClassException 类不可用。一般可能是jar包出问题,根据异常提示定位到jar,查看错误原因 |
查看 ClassNotFoundException。 |
InvalidObjectException 指示一个或多个反序列化对象未通过验证测试。该参数应该提供失败的原因。 |
反对无效,就像他们在法庭上说的一样。 |
IOException 发生某种 I/O 异常时,抛出此异常。此类是失败或中断的 I/O 操作生成的异常的通用类。 |
IO 代表输入、输出,并且不得不做收发数据的事。IO 是一个安全问题,不应使用。 |
NotActiveException 当序列化和反序列化不活动时,抛出此异常。 |
这个异常意味着两件事。要么是未激活,需要激活;要么是已激活,需要停止。到开始工作为止,激活与未激活都是随机的。 |
NotSerializableException 当实例需要具有序列化接口时,抛出此异常。 |
你正试图把一部电影改成电视剧。 |
ObjectStreamException 特定于 Object Stream 类的所有异常的超类。 |
你提出了一连串的反对(Object)意见。提出新的意见前,请限制自己一下,等待法官作出判决。查看 InvalidObjectException。 |
OptionalDataException 指示对象读取操作失败的异常,原因是无法读取流中的基本数据或已序列化对象的数据末尾。以下两种情况都可能抛出此异常:
|
你似乎认为一些可选数据是必须的。不要让事情变得复杂。 |
StreamCorruptedException 当从对象流中读取的控制信息与内部一致性检查相冲突时,抛出此异常。 |
你的数据流被损坏了,这意味着它已经被截包,并在黑市上贩卖。 |
SyncFailedException 当 sync 操作失败时,抛出此异常。 |
你试图与其他人同步你的失败,然后被证明比他人更加失败。去找一些跟你同等水平的人吧。 |
UnsupportedEncodingException 不支持字符编码。 |
如果你想在网上发送自己的代码,必须与美国国家安全局核对你的加密密匙。如果不这么做,将把你视为*,并以适当方式处理。如果你得到这个异常,能跑多快跑多快。 |
UTFDataFormatException 在数据输入流中或由实现该数据输入接口的任何类中以 UTF-8 修改版格式读取错误字符串时,抛出此异常。有关读取和写入 UTF-8 修改版字符串的格式,请参阅 |
UTF 代表通用传输格式,是一种无论你使用哪种格式都会用到的数据传输方式。你试图通过 UTF 传输错误格式的数据。 |
WriteAbortedException |
你需要在程序中的某处写上“aborted”。这通常没什么意义,但你就得这样做。 |
8. java.net
为实现网络应用程序提供类。
java.net |
|
BindException 引起这个异常的原因主要是由于客户端和服务器端有一端突然断开,导致另一端抛出这个异常。可能是端口占用 |
Java编程和束缚不能混为一谈。 |
ConnectException 该异常发生的原因是或者具有ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由),或者是该ip存在,但找不到指定的端口进行监听。 出现该问题,首先检查客户端的ip和port是否写错了,如果正确则从客户端ping一下服务器看是否能ping通,如果能ping通(服务服务器端把ping禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动。 |
你正试图与一个不能连接的事物建立连接。试着连接其他事物吧。也许可以通过一个特殊的连接对象实现你想要的连接。 |
MalformedURLException 抛出这一异常指示出现了错误的 URL。或者在规范字符串中找不到任何合法协议,或者无法解析字符串 |
你正在制作一个形状错误的壶(例如一个“L”状),或者你有拼写错误的单词“urn”(例如“url”)。 |
NoRouteToHostException 试图将套接字连接到远程地址和端口时发生错误的情况下,抛出此异常。通常为无法到达远程主机,原因是防火墙干扰或者中间路由器停机。 |
没有通往主机的“道路”,请联系公路管理员。 |
PortUnreachableException 在连接的数据报上已接收到 ICMP Port Unreachable 消息时,抛出该异常。 |
港口必须正确地放置在水边。如果在内陆,它们将会无法接触。 |
ProtocolException
|
这是一个严重违反规定的结果(例如在你主机上的“puk韓g”)。解决方法很简单:不要那样做! |
SocketException 抛出此异常指示在底层协议中存在错误,如 TCP 错误。 引起这个异常的原因主要是由于客户端和服务器端有一端突然断开,导致另一端抛出这个异常。 |
你把电脑连接到了错误的电源插座。大部分情况下你不得不寻找其它插座,但一些电脑背部有一个开关,可以设置电源插座类型。 |
SocketTimeoutException 如果在读取或接受套接字时发生超时,则抛出此异常。 |
你的电脑连接了一个带计时器的电源插座,并且时间已经走完。只有烙铁和相似的东西才会使用这种插座。 |
UnknownHostException |
你的父母没有教过你不要和陌生人说话么? |
UnknownServiceException 如果在创建到远程主机的连接以便进行远程方法调用时发生 |
你正试图进入接近一个未知服务。众所周知,未知服务或许是特工组织。 |
URISyntaxException 抛出经过检查的指示字符串不能解析为 URI 引用的异常。 |
“You are I”是一个语法错误的句子。将其改为“You are me”,别管那到底啥意思。 |
9. java.rmi
提供 RMI 包。RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。
远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样。
优点:
(1)这种机制给分布计算的系统设计、编程都带来了极大的方便。
(2)只要按照RMI规则设计程序,可以不必再过问在RMI之下的网络细节了,如:TCP和Socket等等。
(3)任意两台计算机之间的通讯完全由RMI负责。调用远程计算机上的对象就像本地对象一样方便。
java.rmi |
|
AccessException 指示调用方不允许执行该方法调用所请求的操作。如果该方法从非本地主机调用,则抛出 |
你正在使用“Microsoft Access”。请不要这样做。 |
AlreadyBoundException 果试图将注册表中的对象绑定到已具有相关绑定的名称上,则抛出 |
不管在 java.net.BindException 的描述中是什么状况,RMI 都提供捆绑服务。然而,你不能绑一个已经被捆绑的人。 |
ConnectException 如果拒绝远程主机对连接的远程方法调用,则抛出 |
你正试图与一个不能连接的事物建立连接。试着连接其他事物吧。也许可以通过一个特殊的连接对象实现你想要的连接。 |
ConnectIOException 如果在连接到远程主机以便进行远程方法调用时发生 |
你正试图通过 IO 与另一个不能被连接的事物建立连接。尝试连接其他事物吧。或许你可以通过一个特殊的连接对象实现想要的连接。 |
MarshalException 此异常指示在执行提供者无法恢复的编组操作时发生错误。 |
你的“marshal”出问题了。你应做的事取决于我们正在讨论的是哪种“marshal”。他可以是陆军元帅、警察、消防队员或者只不过是一名普通的司仪。注意这个异常与马绍尔群岛*没有任何关系,也称为 RMI。 |
NoSuchObjectException 如果试图调用远程虚拟机上已不存在的对象上的方法,则抛出 |
你正试图使用一个不存在的对象。以爱因斯坦之名,创造它或者不要使用它! |
NotBoundException 如果试图在注册表中查找或解绑没有相关绑定的名称,则抛出 |
如果你正在使用奴隶,请确认至少有一个人被绑住了。 |
RemoteException
|
这是一条远程抛出的特殊异常。如果其他人的应用变得不稳定,以致于不能产生一条异常,相反地,你可能会得到这条异常。请找到源头并提醒那位程序员这个错误。 |
RMISecurityException |
马绍尔群岛*变得不稳定了。如果你住在这儿,你最好离开,直到安全得到保障为止都别回来。如果你住在其他地方,可以无视这个异常。 |
ServerException 服务器异常 |
第二发球(或者双发失误同样适用)。 |
ServerRuntimeException |
只要是网球比赛都很长。当你花太长时间发球时,就会得到这条异常。 |
StubNotFoundException |
当你去看电影的时候,你应该一直保留自己的票根。如果不这么做,并且离开了电影院,你就不能重新进去,不得不去买张新票。所以保留你的票根! |
UnexpectedException 如果远程方法调用的客户机因为该调用而收到一个未经检查的异常(该异常不属于远程接口方法的 |
这个异常对你来说应该会成为一个大惊喜。如果发生了,所有事都变成它应该的样子。 |
UnknownHostException 如果在创建到远程主机的连接以便进行远程方法调用时发生 |
你父母没有教过你不要和陌生人说话吗? |
UnmarshalException 此异常指示在执行阻止 JAXB 提供者完成操作的解组操作时遇到一个错误。 |
.你没有完成一名法律工作人员的职责(例如你曾经的法官工作)。注意这个正确的术语是“曾经”(used to)。你已经被解雇(fire)了(如果你是一名消防队员(firefighter),这可真是讽刺啊)。 |
10. java.security
JDK 安全 API 是 Java 编程语言的核心 API,位于 java.security 包(及其子包)中。该 API设计用于帮助开发人员在程序中同时使用低级和高级安全功能。
java.security |
|
AccessControlException 提示请求的访问(对关键系统资源(如文件系统或网络)的访问)被拒绝。 拒绝访问的原因各不相同。例如,请求的权限可能类型不正确、包含无效值,或者根据安全策略不允许请求访问。在抛出异常时,只要可能,就应给出此类信息。 |
你失去了对 Microsoft Access 的控制。如果你无法重获控制或者通过其他方式停止程序,你应该尽快切断电脑电源。 |
DigestException 此为一般 Message Digest 异常。 |
你应该注意自己的食物,消化不良也能变成严重的问题。 |
GeneralSecurityException 是一个一般安全异常类,可以为所有从其扩展的与安全有关的异常类提供类型安全 |
在某些地方做一些事情并不安全。如果你有足够的权力,你应该随机入侵一个国家(最好在中东地区)。如果你没有那种权力,至少应该有一把枪。 |
InvalidAlgorithmParameterException 用于无效或不合适的算法参数的异常。 |
你向一位残疾人用他不能理解的方式解释你的算法。简单一点! |
InvalidKeyException 当方法参数作为复合数据 的项名称或表格数据 的行索引时,如果其无效,则抛出此运行时异常。 |
这个异常有两种不同的原因:1、你正在使用错误的钥匙。我的建议是在你的钥匙上画不同颜色的小点来帮助你记住哪一把对应哪一个锁。2、 你不能锁住残疾人却不给他们钥匙,如果他们足够聪明发现如何使用钥匙,他们就有*移动的权利。 |
InvalidParameterException 当将无效参数传递给某个方法时抛出此异常,设计该异常供 JCA/JCE 引擎类使用。 |
你使用了蔑视的术语去描述一名残疾人。 |
KeyException 此异常是基本的密钥异常。 |
不要尝试不用钥匙就能开锁。 |
KeyManagementException 此异常是用于所有处理密钥管理的操作的通用密钥管理异常。开发人员可能创建用来给出更多详细信息的 KeyManagementException 子类的示例可能包括:
|
你遗失了自己的钥匙。很可能忘在办公室(如果你正试图进入你家)或者忘在家里(如果你正试图进入办公室)。 |
KeyStoreException 这是一般的 KeyStore 异常。 |
延续之前 KeyManagementException 的解释就是你的钱包有个洞。 |
NoSuchAlgorithmException 当请求特定的加密算法而它在该环境中不可用时抛出此异常。 |
你试图用以前未知的方法解决问题。停止创新吧,用老算法重写一遍。你也可以为自己的想法申请专利,然后等待未来 Java 发布新版本的时候纳入其中。 |
NoSuchProviderException 当请求特定安全性 provider 但它在该环境中不可用时抛出此异常。 |
如果你是一名单亲妈妈,你没法成为家庭主妇。首先,你得为家庭找到一名供养者。 |
PrivilegedActionException 抛出此异常来指示执行的操作抛出了经过检查的异常。可以通过调用 |
你试图采取一个行动,但是没有得到权限。比如,只有名人才可以做到地从谋杀中逃脱,只有天主教神父和耶和华的高级见证人才能做地猥亵儿童,只有在私人企业担任管理职位的人才能被允许地偷钱。 |
ProviderException 用于 Provider 异常(例如误配置错误或不可恢复的内部错误)的运行时异常,Provider 可以为它创建子类以抛出特殊的、特定于 provider 的运行时错误。 |
你是一名妇女并试图供养一个家庭。显而易见,你的丈夫不能成为一名“家庭主妇”,所以你得让他供养个家庭。想象一下,Java固执且不肯改变,事情就是这样工作的,解决它。 |
SignatureException 这是一般的签名异常。 |
要么你是伪造的其他人的签名,要么是无法接受你的签名。一个签名不能太丑陋、太易读或太大。 |
UnrecoverableKeyException 如果 keystore 中的密钥无法恢复,则抛出此异常。 |
该死。你把你的钥匙扔进了下水沟。我唯一能安慰你的就是其他人也无法恢复钥匙,所以倒不是必须换掉你的锁 |
11. java.text
java.text |
|
ParseException 表示解析时出现意外错误。 |
你做的没有任何意义,冷静下来,再试一次。 |