JAVA常见异常
- 格式:pdf
- 大小:174.39 KB
- 文档页数:12
java空指针异常:ng.NullPointException⼀.什么是java空指针异常我们都知道java是没有指针的,这⾥说的"java指针"指的就是java的引⽤,我们不在这⾥讨论叫指针究竟合不合适,⽽只是针对这个异常本⾝进⾏分析。
空指针就是空引⽤,java空指针异常就是引⽤本⾝为空,却调⽤了⽅法,这个时候就会出现空指针异常。
可以理解,成员变量和⽅法是属于对象的(除去静态),在对象中才存在相对应的成员变量和⽅法,然后通过对象去调⽤这些成员变量和⽅法。
对于空指针来说,它不指向任何对象,也就没有所谓的成员变量和⽅法,这个时候⽤它去调⽤某些属性和⽅法,当然会出现空指针异常。
public class Test {private int a=1;private int b=2;public static void main(String[] args) {// TODO Auto-generated method stubTest t1 = new Test();Test t2 = null;System.out.println(t1.a);System.out.println(t2.a);System.out.println(t2.c());}public String c(){return "123";}}我们分析上⾯这段⽰例代码,在Test类中,有两个成员变量a和b,和⼀个⽅法c()。
然后在main()⽅法中,我们创建了两个对象t1和t2,其中t1指向通过构造⽅法实例出的Test对象,⽽t2只是声明,并指向了空,并没有指向实际的对象。
调试的时候,第⼀条输出语句是可以通过编译的,⽽执⾏到第⼆条输出语句的时候,由于空指针调⽤了不属于它的a,程序终⽌,报告空指针异常。
同样,注释第⼆条输出语句,程序在执⾏到第三条输出语句的时候,由于调⽤了不属于它的c()⽅法,会出现⼀样的错误。
算术异常类:ArithmeticExecption空指针异常类:NullPointerException类型强制转换异常:ClassCastException数组负下标异常:NegativeArrayException数组下标越界异常:ArrayIndexOutOfBoundsException违背安全原则异常:SecturityException文件已结束异常:EOFException文件未找到异常:FileNotFoundException字符串转换为数字异常:NumberFormatException操作数据库异常:SQLException输入输出异常:IOException方法未找到异常:NoSuchMethodExceptionng.AbstractMethodError抽象方法错误。
当应用试图调用抽象方法时抛出。
ng.AssertionError断言错。
用来指示一个断言失败的情况。
ng.ClassCircularityError类循环依赖错误。
在初始化一个类时,若检测到类之间循环依赖则抛出该异常。
ng.ClassFormatError类格式错误。
当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。
ng.Error错误。
是所有错误的基类,用于标识严重的程序运行问题。
这些问题通常描述一些不应被应用程序捕获的反常情况。
ng.ExceptionInInitializerError初始化程序错误。
当执行一个类的静态初始化程序的过程中,发生了异常时抛出。
静态初始化程序是指直接包含于类中的static语句段。
ng.IllegalAccessError违法访问错误。
当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。
ng.IncompatibleClassChangeError不兼容的类变化错误。
当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。
JAVA培训教程—Java异常处理异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。
比如说,你的代码少了一个分号,那么运行出来结果是提示是错误ng.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出ng.ArithmeticException的异常。
异常发生的原因有很多,通常包含以下几大类:∙用户输入了非法数据。
∙要打开的文件不存在。
∙网络通信时连接中断,或者JVM内存溢出。
这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。
-要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:∙检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。
例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
∙运行时异常:运行时异常是可能被程序员避免的异常。
与检查性异常相反,运行时异常可以在编译时被忽略。
∙错误:错误不是异常,而是脱离程序员控制的问题。
错误在代码中通常被忽略。
例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
Exception类的层次所有的异常类是从ng.Exception类继承的子类。
Exception类是Throwable类的子类。
除了Exception类外,Throwable还有一个子类Error 。
Java程序通常不捕获错误。
错误一般发生在严重故障时,它们在Java程序处理的范畴之外。
Error用来指示运行时环境发生的错误。
例如,JVM内存溢出。
一般地,程序不会从错误中恢复。
异常类有两个主要的子类:IOException类和RuntimeException类。
在Java 内置类中(接下来会说明),有大部分常用检查性和非检查性异常。
Java 内置异常类Java 语言定义了一些异常类在ng标准包中。
标准运行时异常类的子类是最常见的异常类。
浅析Java异常处理机制及应用摘要:Java异常处理机制是Java编程语言中最为重要的机制之一,它可以在代码中处理各种类型的异常。
本文将对Java异常处理机制进行浅析,并从应用层面探讨一些常见的Java异常处理方法。
关键词:Java,异常处理,应用正文:一、Java异常处理机制Java异常处理机制是Java编程语言中最为重要的机制之一。
在Java语言中,异常是指一个程序运行时产生的意外情况,可以是代码中的错误,也可以是由于外部环境因素导致的错误。
Java提供了一整套异常处理机制,可以帮助开发者处理各种类型的异常。
在Java中,异常通常被定义为继承自Throwable类的任意一个子类。
常见的异常类型包括RuntimeException、IOException、ClassNotFoundException、ArithmeticException等等。
Java中异常的处理主要分为两种方式:try-catch块和throws语句。
try-catch块是一种捕捉异常的方法,其基本语法结构如下:```try {// 可能会抛出异常的代码块} catch (type1 e1) {// 处理type1类型异常的代码块} catch (type2 e2) {// 处理type2类型异常的代码块} finally {// 不管是否发生异常,都会执行的代码块}```throws语句是一种抛出异常的方法,其基本语法结构如下:```public void methodName() throws ExceptionType {// 可能会抛出异常的代码块}```二、Java异常处理的应用Java异常处理机制应用广泛,以下是应用层面探讨一些常见的Java异常处理方法。
1、基于try-catch块的异常处理try-catch块是Java中最基本的异常处理方法。
它可以在程序运行时捕捉异常,并且根据不同的异常类型采取不同的处理方法。
Java内存溢出(OOM)异常完全指南本⽂分析什么情况会导致这些异常出现,提供⽰例代码的同时为您提供解决指南。
Nikita Salnikov-TarnovskiPlumbr Co-Founder and VP of Engineering本⽂内容来源于,对原⽂内容有删减和补充这也许是⽬前最为完整的Java OOM异常的解决指南。
1、ng.OutOfMemoryError:Java heap spaceJava应⽤程序在启动时会指定所需要的内存⼤⼩,它被分割成两个不同的区域:Heap space(堆空间)和Permgen(永久代):JVM内存模型⽰意图这两个区域的⼤⼩可以在JVM(Java虚拟机)启动时通过参数-Xmx和-XX:MaxPermSize设置,如果你没有显式设置,则将使⽤特定平台的默认值。
当应⽤程序试图向堆空间添加更多的数据,但堆却没有⾜够的空间来容纳这些数据时,将会触发ng.OutOfMemoryError: Java heap space异常。
需要注意的是:即使有⾜够的物理内存可⽤,只要达到堆空间设置的⼤⼩限制,此异常仍然会被触发。
原因分析触发ng.OutOfMemoryError: Java heap space最常见的原因就是应⽤程序需要的堆空间是XXL号的,但是JVM提供的却是S号。
解决⽅法也很简单,提供更⼤的堆空间即可。
除了前⾯的因素还有更复杂的成因:流量/数据量峰值:应⽤程序在设计之初均有⽤户量和数据量的限制,某⼀时刻,当⽤户数量或数据量突然达到⼀个峰值,并且这个峰值已经超过了设计之初预期的阈值,那么以前正常的功能将会停⽌,并触发ng.OutOfMemoryError: Java heap space异常。
内存泄漏:特定的编程错误会导致你的应⽤程序不停的消耗更多的内存,每次使⽤有内存泄漏风险的功能就会留下⼀些不能被回收的对象到堆空间中,随着时间的推移,泄漏的对象会消耗所有的堆空间,最终触发ng.OutOfMemoryError: Java heap space错误。
"Test1.java": class Test2 is public; should be declared in a file named Test2.java at line 3, column 1错误解释:"Test1.java": 类Test2是公共类,应该在名为Test2.java的文件中被宣告3行1列处解决方案:1、修改类名或文件名,保证两者一致//////////////////////////////////////////错误提示:"Test1.java": cannot resolve symbol: class Connection in class com.he.Test1 at line 5, column 5错误解释:"Test1.java": 不能识别的标志(类):在类com.he.Test1中的类Connection 5行5列处可能原因:1、没有引包,如java.sql.*2、Connection类名拼写错误//////////////////////////////////////////错误提示:"Test1.java": incompatible types;found : int,required: ng.String at line 6, column 16错误解释:"Test1.java": 数据类型矛盾;发现:int,要求:String 6行16列处可能原因:1、声明类型与赋值类型不一致2、方法声明的返回类型与实际的返回类型不一致3、所调用方法的返回类型与方法调用处的接受变量类型不一致//////////////////////////////////////////错误提示:"Test1.java": cannot resolve symbol: variable a1 in class com.he.Test1 at line 7, column 24错误解释:"Test1.java": 不能识别的标志(变量):在类com.he.Test1中的变量a1 7行24列处可能原因:1、变量未声明2、变量名拼写错误3、在声明的范围之外使用变量,如{}之外//////////////////////////////////////////错误提示:"Test1.java": cannot resolve symbol: method parserInt (ng.String)in class ng.Integer at line 9, column 21错误解释:"Test1.java": 不能识别的标志(方法):在类ng.Integer中的方法parserInt(ng.String) 9行21列处可能原因:1、方法名拼写错误2、方法参数类型不匹配//////////////////////////////////////////错误提示:"Test1.java": '}' expected at line 13, column 2错误解释:"Test1.java": 期望'}' 13行2列处可能原因:1、大括号不匹配//////////////////////////////////////////错误提示:"Test1.java": unreported exception ng.ClassNotFoundException; must be caught or declared to be thrown at line 11, column 11错误解释:"Test1.java": 未报告的异常ng.ClassNotFoundException;必须被捕获或是被声明抛出11行11列处解决方案:1、用try{}catch(){}捕获异常2、在方法声明时用throws ...,... 声明该方法抛出异常特别提示:为便于程序调试时异常定位,强烈建议在进行异常捕获时打印堆栈信息( ex.printStactTrace() )//////////////////////////////////////////错误提示:"Test1.java": non-static variable info cannot be referenced from a static context at line 17, column 24错误解释:"Test1.java": 非静态的变量info不能在静态上下文(环境)中引用17行24列处解决方案:1、声明对象调用其静态变量2、修改方法为非静态方法//////////////////////////////////////////错误提示:"Test1.java": b is already defined in main(ng.String[]) at line 19, column 5错误解释:"Test1.java": (变量)b在(方法)main(ng.String[])中已经被定义*行*列处解决方案:1、修改(变量)名称//////////////////////////////////////////错误提示:"Test1.java": test() is already defined in com.he.Test1 at line 25, column 3错误解释:"Test1.java": (方法)test()在(类)com.he.Test1中已经被定义*行*列处解决方案:1、修改(方法)名称2、修改(方法)参数,即方法重载//////////////////////////////////////////错误提示:"Test.java": Duplicate definition of class com.he.Test1, defined in D:\JavaStudy\TempPro\src\com\he\Test.java and also defined in D:\JavaStudy\TempPro\src\com\he\Test1.java.错误解释:"Test.java":重复定义了类com.he.Test1,在D:\JavaStudy\TempPro\src\com\he\Test.java与D:\JavaStudy\TempPro\src\com\he\Test1.java中都定义了解决方案:1、修改类名特别提示:如果修改后仍然提示该错,可以通过删除对应class文件来解决//////////////////////////////////////////错误提示:"Test1.java": variable d might not have been initialized at line 22, column 22错误解释:"Test1.java":变量d可能还没有被初始化*行*列处可能原因:1、在某种情况下,有可能使用没有被初始化的变量特别提示:[代码]String a;int x=1;if(x>0) a="正数";System.out.println(a);[修改]String a=null;...//////////////////////////////////////////错误提示:"Test1.java": unreachable statement at line 25, column 5错误解释:"Test1.java": 无法到达的语句*行*列处可能原因:1、死循环导致其后的语句没有可能到达2、return 语句导致其后的语句没有可能到达特别提示:[代码]int a=1;if(a>0) {return "正数";}else {return "非正数";}//没有可能到达a=0;//////////////////////////////////////////错误提示:"Test1.java": missing return statement at line 29, column 23错误解释:"Test1.java": (方法)缺失return语句*行*列处解决方案:1、1、确保(方法)在所有可能下都有return语句,如果声明时不是void //////////////////////////////////////////错误提示:"Test1.java": Package D:\JavaStudy\TempPro\src\com\he\Test1.java stated in source com.he1 does not match directoryD:\JavaStudy\TempPro\src\com\he\Test1.java. at line 1, column 13错误解释:"Test1.java": 类的包声明(package ...)与类实际所处包路径不匹配*行*列处解决方案:1、修改包声明,确保与类实际所处包路径一致//////////////////////////////////////////错误提示:"Test1.java": <identifier> expected at line 3, column 14错误解释:"Test1.java": 期望标志符*行*列处可能原因:1、标志符不可法,如类名用数字开头//////////////////////////////////////////错误提示:"Test1.java": call to super must be first statement in constructor at line 6, column 10错误解释:"Test1.java": 在构造函数中调用父类构造函数super(...)必须位于第一句*行*列处解决方案:1、将语句super(...)位于第一句//////////////////////////////////////////错误提示:"Test1.java": 'try' without 'catch' or 'finally' at line 20, column 5错误解释:"Test1.java": 'try'缺失'catch' 或'finally' *行*列处解决方案:1、'try'必须与'catch'和'finally'两者中至少其一进行搭配使用//////////////////////////////////////////错误提示:"Test1.java": illegal character: \65307 at line 4, column 12错误解释:"Test1.java": 非法字符*行*列处可能原因:1、使用了中文的符号,如括号,逗号,分号,冒号等//////////////////////////////////////////错误提示:"Test1.java": reference to Date is ambiguous; both class java.sql.Date in java.sql and class java.util.Date in java.util match at line 6, column 9错误解释:"Test1.java": 对(类)Date的引用不明确;包java.sql中的类java.sql.Date与包java.util中的类java.util.Date都与之相配(即两个包中都有该类) *行*列处解决方案:1、声明或实例化时使用类全名(即包名+类名),如java.util.Date d = new java.util.Date();//////////////////////////////////////////错误提示:"Test1.java": cannot resolve symbol: constructor Integer ()in class ng.Integer at line 6, column 17错误解释:"Test1.java": 不能识别的标志(构造函数):类ng.Integer中的构造函数Integer() *行*列处可能原因:1、调用构造函数时的参数与其原始定义不一致//////////////////////////////////////////.apache.jasper.JasperException: Unable to compile class forJSPAn error occurred at line: -1 in the jsp file: null告诉你的已经很明显了,你不懂英语吗?都是你的jsp文件不存在了,看是不是路径错了Q: 运行javac HelloWorld.java 为何error:cannot read:HelloWorld.java 1 errorA: 首先检查文件名的的拼写,大小写是否正确,再看目录是否正确。
ng.exceptionininitializererror异常的解决方法-回复ng.ExceptionInInitializerError是一个Java异常,常常出现在静态初始化块或静态变量初始化中发生错误的情况下。
在本文中,我们将探讨ExceptionInInitializerError异常的解决方法。
我们将分步解释如何识别异常并提供适当的解决方案。
第一步:识别异常要解决ExceptionInInitializerError异常,首先我们需要确切地了解出现问题的位置。
通常,这个异常被抛出的位置是在类的静态初始化块中。
这是Java类中的一个特殊块,用于对静态变量进行初始化操作。
如果在此过程中发生错误,就会抛出ExceptionInInitializerError异常。
为了找出问题所在,我们可以利用Java的调试工具,例如Eclipse或IntelliJ IDEA。
通过在异常出现的类中设置断点并进行调试,我们可以确定哪些代码导致了异常。
另一种方式是使用日志记录(例如Log4j)来记录异常的堆栈跟踪信息。
这些工具将帮助我们定位异常的位置。
第二步:查看异常的根本原因一旦我们确定了ExceptionInInitializerError异常发生的位置,下一步是查看异常的根本原因。
这意味着需要检查静态初始化块或静态变量初始化中可能导致异常的任何代码段。
在检查代码时,我们应该关注可能导致异常的因素,例如文件读取、网络连接、数据库连接,或者与其他类的交互等。
如果代码中存在此类操作,可能需要进一步检查这些操作是否成功完成。
一个常见的错误是使用了依赖于外部资源的代码,但在初始化时没有正确处理这些资源。
另一个可能的原因是静态初始化块中的代码抛出了其他异常,而我们没有正确捕获和处理这些异常。
这会导致ExceptionInInitializerError异常的抛出,并且根本原因将被隐藏起来。
第三步:解决问题一旦我们确定了ExceptionInInitializerError异常的根本原因,下一步是解决这个问题。
java中的空指针异常情况以及解决⽅案⽬录概述问题描述第⼀种第⼆种第三种问题定位Java空指针异常的若⼲解决⽅案存在NullPointerException的安全⽅法如何避免java空指针异常:ng.NullPointException⼀.什么是java空指针异常⼆.如何解决概述出现空指针异常,常常是因为我们调⽤的对象是空的⽽抛出的异常。
问题描述第⼀种out.println(request.getParameter("username"));如果request⾥⾯并没有username的值,这时⽆法对空对象进⾏操作的,就会抛出异常。
第⼆种String userName = request.getParameter("username"); If (userName.equals("root")) {....}如果没有username值,或者username为null时,是不能将⼀个为null的对象与另外⼀个对象进⾏⽐较的。
If ("root".equals(user Name)) {....}如果返回值与常量进⾏⽐较时,就可以避免调⽤null对象的equals⽅法。
不会抛出异常。
第三种假设有⼀个student类,有属性name。
Student a;String b = ;这个时候就会报错,因为a为空的,解决办法就是让a指向⼀个对象,Student a = new Student();问题定位对于⽇志中的报错信息,在java中抛出异常是从内往外,因此只需要重点关注第⼀⾏报错信息,下⾯的报错都是由于⼀层层传递调⽤该⽅法导致。
Java空指针异常的若⼲解决⽅案Java中任何对象都可以为空,我们可以使⽤若⼲种⽅法来避免产⽣这类异常。
⽐如我们传统的空值检测,编程规范,以及使⽤java中各种⼯具类。
(1)最常⽤的⼀种就是直接对对象进⾏判断⽐如if(Object == null)来对所有⽤到的对象进⾏判断,这个对象也就是我们常⽤的函数参数,返回值,以及类实例的成员变量等。
JAVA常见异常 1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)
2. java.lang.classnotfoundexception 这个异常是很多原本在JB等开发环境中开发的程序员,把JB下的程序包放在WTK下编译经常出现的问题,异常的解释是"指定的类不存在",这里主要考虑一下类的名称和路径是否正确即可,如果是在JB下做的程序包,一般都是默认加上package的,所以转到WTK下后要注意把package的路径加上。
3. java.lang.arithmeticexception 这个异常的解释是"数学运算异常",比如程序中出现了除以零这样的运算就会出这样的异常,对这种异常,大家就要好好检查一下自己程序中涉及到数学运算的地方,公式是不是有不妥了。
4. java.lang.arrayindexoutofboundsexception 这个异常相信很多朋友也经常遇到过,异常的解释是"数组下标越界",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。
5. java.lang.illegalargumentexception 这个异常的解释是"方法的参数错误",很多j2me的类库中的方法在一些情况下都会引发这样的错误,比如音量调节方法中的音量参数如果写成负数就会出现这个异常,再比如g.setcolor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。
6. java.lang.illegalaccessexception 这个异常的解释是"没有访问权限",当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了package的情况下要注意这个异常。 其他还有很多异常,我就不一一列举了,我要说明的是,一个合格的程序员,需要对程序中常见的问题有相当的了解和相应的解决办法,否则仅仅停留在写程序而不会改程序的话,会极大影响到自己的开发的。关于异常的全部说明,在API里都可以查阅。
算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException 文件已结束异常:EOFException 文件未找到异常:FileNotFoundException 字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
方法未找到异常:NoSuchMethodException
java.lang.AbstractMethodError 抽象方法错误。当应用试图调用抽象方法时抛出。 java.lang.AssertionError 断言错误。用来指示一个断言失败的情况。 java.lang.ClassCircularityError 类循环依赖错误。在初始化一个类时,若检测到类之间循环依赖则抛出该异常。 java.lang.ClassFormatError 类格式错误。当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。
java.lang.Error 错误。是所有错误的基类,用于标识严重的程序运行问题。这些问题通常描述一些不应被应用程序捕获的反常情况。
java.lang.ExceptionInInitializerError 初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异常时抛出。静态初始化程序是指直接包含于类中的static语句段。
java.lang.IllegalAccessError 违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。
java.lang.IncompatibleClassChangeError 不兼容的类变化错误。当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。一般在修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。
java.lang.InstantiationError 实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常。
java.lang.InternalError 内部错误。用于指示Java虚拟机发生了内部错误。 java.lang.LinkageError 链接错误。该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况。
java.lang.NoClassDefFoundError 未找到类定义错误。当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误。
java.lang.NoSuchFieldError 域不存在错误。当应用试图访问或者修改某类的某个域,而该类的定义中没有该域的定义时抛出该错误。 java.lang.NoSuchMethodError 方法不存在错误。当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该错误。
java.lang.OutOfMemoryError 内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。 java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。 java.lang.ThreadDeath 线程结束。当调用Thread类的stop方法时抛出该错误,用于指示线程结束。 java.lang.UnknownError 未知错误。用于指示Java虚拟机发生了未知严重错误的情况。 java.lang.UnsatisfiedLinkError 未满足的链接错误。当Java虚拟机未找到某个类的声明为native方法的本机语言定义时抛出。
java.lang.UnsupportedClassVersionError 不支持的类版本错误。当Java虚拟机试图从读取某个类文件,但是发现该文件的主、次版本号不被当前Java虚拟机支持的时候,抛出该错误。
java.lang.VerifyError 验证错误。当验证器检测到某个类文件中存在内部不兼容或者安全问题时抛出该错误。 java.lang.VirtualMachineError 虚拟机错误。用于指示虚拟机被破坏或者继续执行操作所需的资源不足的情况。
java.lang.ArithmeticException
算术条件异常。譬如:整数除零等。 java.lang.ArrayIndexOutOfBoundsException 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。 java.lang.ArrayStoreException 数组存储异常。当向数组中存放非数组声明类型对象时抛出。 java.lang.ClassCastException 类造型异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常。
java.lang.ClassNotFoundException 找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。
java.lang.CloneNotSupportedException 不支持克隆异常。当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常。
java.lang.EnumConstantNotPresentException 枚举常量不存在异常。当应用试图通过名称和枚举类型访问一个枚举对象,但该枚举对象并不包含常量时,抛出该异常。
java.lang.Exception 根异常。用以描述应用程序希望捕获的情况。 java.lang.IllegalAccessException 违法的访问异常。当应用试图通过反射方式创建某个类的实例、访问该类属性、调用该类方法,而当时又无法访问类的、属性的、方法的或构造方法的定义时抛出该异常。
java.lang.IllegalMonitorStateException 违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象(O)的监控器或者通知其他线程等待该对象(O)的监控器时,抛出该异常。
java.lang.IllegalStateException 违法的状态异常。当在Java环境和应用尚未处于某个方法的合法调用状态,而调用了该方法时,抛出该异常。
java.lang.IllegalThreadStateException