JAVA系统常见的异常大集合分析
java常见错误以及可能原因集锦

java常见错误以及可能原因集锦java常见错误以及可能原因集锦0、需要标识符a) 不在函数内1、非法表达式开始b) 可能:丢失括号 .2. no data founda) 可能:setInt(1,100)中,没有100这个值3. 找不到符号a) 可能:没导入包4. 指定了无效URLa) 可能:数据库名或IP错误,即连接出错5. 类路径没有找到a) 可能: ClassNotFoundException: oracle.jdbc.driver.OracleDriverb) 原因: 一般是指包名写错,或者没有import包,或者没有在类路径中找到jar文件c) 解决: 没有加载Oracle驱动jar,在.bash_profile中把ojdbc14.jar加进来6. 空指针异常a) 可能: 数据源错误比如数据库名或IP错误7. 不能执行查询a) 可能: 数据库中表的问题,比如列名不存在8. invalid identitya) 可能: 列名出错9. 若在数据库中创建了两个sequence ,运行时出现异常可能是先后执行了多次select 语句,导致与原有的序列号产生冲突10. 表名或列名不存在a) 可能:表不存在或者没有插入数据到表中11. 不支持的类,类的版本错误a) 可能:没有导入jdk5.0,或者编译器仍为1.412. MappingNotFoundExceptiona) Maybe: In the Eclipse Not refersh , or not exist in the dirctory13. HibernateException: /hibernate.cfg.xml not founda) Maybe1: hibernate.cfg.xml not in the root directoryb) Maybe2: Could not parse configuration .c) resolve: database not connect or use another database14. ConstraintViolationExceptiona) Maybe: used a not true database15. 驱动没有找到或者 JDBC Driver not found可能:连接数据库的驱动jar包不存在或者版本不一致,比如将旧的版本换成新的会造成该类错误16. 空指针异常,/doc/e411973287.html,ng.NullPointerExce ptiona) 可能1:数据库连接出错,比如在hibernate.cfg.xml中的数据错误会导致异常。
Java异常(Exception)处理以及常见异常总结

Java异常(Exception)处理以及常见异常总结⽬录前⾔异常简介异常类型总结前⾔很多事件并⾮总是按照⼈们⾃⼰设计意愿顺利发展的,经常出现这样那样的异常情况。
例如:你计划周末郊游,计划从家⾥出发→到达⽬的→游泳→烧烤→回家。
但天有不测风云,当你准备烧烤时候突然天降⼤⾬,只能终⽌郊游提前回家。
“天降⼤⾬”是⼀种异常情况,你的计划应该考虑到这样的情况,并且应该有处理这种异常的预案。
计算机程序的编写也需要考虑处理这些异常情况。
异常(exception)是在运⾏程序时产⽣的⼀种异常情况,已经成为了衡量⼀门语⾔是否成熟的标准之⼀。
⽬前的主流编程语⾔java也提供了异常处理机制。
异常简介Java中的异常⼜称为例外,是⼀个在程序执⾏期间发⽣的事件,它中断正在执⾏程序的正常指令流。
为了能够及时有效地处理程序中的运⾏错误,必须使⽤异常类,这可以让程序具有极好的容错性且更加健壮。
在 Java 中⼀个异常的产⽣,主要有如下三种原因:1. Java 内部错误发⽣异常,Java 虚拟机产⽣的异常。
2. 编写的程序代码中的错误所产⽣的异常,例如空指针异常、数组越界异常等。
3. 通过 throw 语句⼿动⽣成的异常,⼀般⽤来告知该⽅法的调⽤者⼀些必要信息。
Java 通过⾯向对象的⽅法来处理异常。
在⼀个⽅法的运⾏过程中,如果发⽣了异常,则这个⽅法会产⽣代表该异常的⼀个对象,并把它交给运⾏时的系统,运⾏时系统寻找相应的代码来处理这⼀异常。
我们把⽣成异常对象,并把它提交给运⾏时系统的过程称为拋出(throw)异常。
运⾏时系统在⽅法的调⽤栈中查找,直到找到能够处理该类型异常的对象,这⼀个过程称为捕获(catch)异常。
例 1为了更好地理解什么是异常,下⾯来看⼀段⾮常简单的 Java 程序。
下⾯的⽰例代码实现了允许⽤户输⼊ 1~3 以内的整数,其他情况提⽰输⼊错误。
package io.renren.config;import java.util.Scanner;/*** Created by LiYangYong*/public class TestException {public static void main(String[] args) {System.out.println("请输⼊您的选择:(1~3 之间的整数)");Scanner input = new Scanner(System.in);int num = input.nextInt();switch (num) {case 1:System.out.println("one");break;case 2:System.out.println("two");break;case 3:System.out.println("three");break;default:System.out.println("error");break;}}}正常情况下,⽤户会按照系统的提⽰输⼊ 1~3 之间的数字。
Java中的异常现象

Java中的异常现象一、基本异常异常情形:指引发阻止当前方法或作用域继续执行的问题.普通问题:在当前环境下能得到足够的信息,总能处理这个错误.而异常情形就不同了.发生了异常后,不能继续下去,因为在当前环境下无法获得必要的信息来解决当前的问题.你所能做的就是从当前环境跳出,并且把问题提交给上一级环境,这一动作就是抛出异常.抛出异常所做的动作:1、用new在堆上创建对象.2、当前执行的程序被终止,从当前环境中弹出对象的引用.此时,由异常处理机制接管程序,并开始寻找一个恰当的地方来执行程序.这个地方就是”异常处理程序”,它的任务就是将程序从错误状态中恢复,以使程序要么换一种方式运行,要么继续运行下去.注意:抛出异常是由方法抛出的.异常也是一个类!并用这个类在堆上建立对象.所有的异常类都有两个构造器:1、缺省的构造器Exception();2、带参数的构造器Exception()的括弧中加上参数.注:要定义自己的异常类,必须从已有的异常类继承。
二、捕获异常如果方法要抛出异常,它必须假定异常将被”捕获”并得到处理.异常处理的好处之一:在一个地方编写解决问题的代码,然后在别的地方处理这些代码的错误。
首先什么是”监控区域”?它是一段可能产生异常的代码.并且后面跟着处理这些异常的代码.也就是try{//可能产生异常的语句放在此处!//在此处捕获异常}三、异常处理程序抛出的异常必须处理,这个地方就是异常处理程序.用catch表示.完整的代码如下:try{}catch(type xx){}异常处理也可以有多个catch!异常处理程序必须紧跟在try块之后,异常处理机制将负责搜索同发生异常的第一个相匹配的程序.一旦catch子句结束,则处理程序的查找过程结束.只有匹配的catch子句才能得到执行.四、终止和恢复异常处理有两种模型:终止:一旦异常抛出,就表明错误无法挽回,也不能继续执行.恢复:异常处理程序可以修正错误.然后重新尝试调用出现问题的方法.(解决办法:将出现异常的语句放在while循环中.)终止模型是今后的重点!而不要考虑恢复模型注意:1:main()作为一个方法也可以有异常说明,这里的异常的类型是Exception,它也是所有”被检查的异常”的基类.通过把它传递到控制台,就不必在main()里写try-catch子句了.尽管很方便,但这不是通用的做法.2:java语言中采用try-catch-finally结构处理异常.一个try-catch-finally结构中,必须有try 语句块,catch语句块.finally语句块不是必须的,但至少要两者取其一.如果3个语句块均存在,一定要按照try/catch/finally的顺序排列.3:catch语句块可以有多个,各catch语句块用于捕获不同的异常.如果try块中的语句在执行时发生异常,则执行从该处中断而进入catch块,根据异常的类型进行匹配,顺序在前的catch块优先进行匹配比较,只要该异常是catch中指定的异常类或其子类就匹配成功,进而执行相应的catch中的内容.4:不管在try语句块中是否抛出异常,也不管catch语句块是否捕获到异常,finally语句块中的内容都将继续被执行.注意,即使try语句块中包含return语句,也会先执行完finally语句块中的代码,再执行return语句返回方法值.5:只有执行System.exit()方法或出现Error错误时,finally语句块才不会获得执行而退出程序.6:如果没有异常出现或异常被捕获、处理,则在退出try-catch-finally结构后,会继续执行后续的代码.7:一个方法抛出异常声明时需分两步,第一步在方法名后采用throws语句声明抛出的异常,如果抛出多个异常,则在各个异常间使用逗号分隔.第二步是在方法体内部采用throw语句抛出异常,以便try语句块捕获.8:ng.Throwable类是所有异常和错误的顶层类.Throwable类有两个直接子类ng.Error和ng.Exception.Error类代表编译期和系统错误,程序员不需要处理它,Exception 类是可以从任何标准java类方法中抛出的基本类型异常,也是程序员需要处理的.注意,ng.RuntimeException异常类是由java虚拟机抛出的,不需要程序员处理.五、java标准异常Throwable这个java类被用来表示任何可以作为异常被抛出的类.它可以分Error用来表示编译时和系统错误,Exception是可以被抛出的基本类型.。
JAVA项目常用异常处理汇总

JAVA项⽬常⽤异常处理汇总我们在进⾏JAVA项⽬开发时,经常会⾯对⼀些常见的异常处理情况,接下来我会根据课下查阅学习的资料,来进⾏⼀些总结。
1.空指针异常(ng.nullpointerexception)发⽣该情况⼀般是字符串变量未初始化,数组未初始化,类对象未初始化等。
还有⼀种情况是当该对象为空时你并没有判断是否为空值,这个错误我在之前的web习题上犯过,因此为了避免这种情况,除了检查是否初始化之外,如有必要则要加上判断是否为null的if语句。
2.指定的类不存在(ng.ClassNotFoundException)出现这个错误的原因之⼀是缺包,这时只要下载并导⼊相应的包即可;当我们已经把包导⼊的时候,⼜报了这种错误的情况下,就需要开启⾃⼰的编辑器去调整设置了;在使⽤tomcat的时候,先检查lib中是否导⼊了jar。
3.字符串转换为数字异常(ng.NumberFormatException)这个错误就是字符串中出现⾮数字型字符时,转换为数字时发⽣异常;除此之外,如果字符串转换为数字时超过了类型的范围(⽐如string转int和string转double),也会出现这个错误。
解决该问题的⽅法就是在转换之前先对字符串进⾏检查。
4.数组下标越界异常(ng.IndexOutOfBoundsException)顾名思义,你想取的数组元素在数组中并没有定义出来,⽐如定义了⼀个长度为5的数组a,当你想取a[6]元素时肯定会出错。
解决这类问题就是要注意数组的长度,有时候为了减少空间浪费我们会使⽤动态数组构建⽅法,这时在对数组进⾏操作时建议先⽤length获取其数组长度,从⽽规避错误。
5.数学运算异常(ng.ArithmeticException)除数为0时会报出该错误,解决⽅法:避免除数为0。
这个错误解读为“出现异常的运算条件”,除了除数为0的情况之外,可能还有其他的异常情况,届时具体情况具体分析。
java中遇到的问题和解决方案

java中遇到的问题和解决方案
目录
1. Java中遇到的问题
1.1 内存溢出问题
1.2 死锁问题
2. 解决方案
2.1 内存溢出问题的解决方案
2.2 死锁问题的解决方案
Java中遇到的问题
在Java编程过程中,经常会遇到各种各样的问题,其中两个比较常见的问题是内存溢出和死锁问题。
内存溢出问题是指程序在运行过程中申请的内存超过了系统能够分配给它的内存大小,导致程序崩溃。
这种问题通常发生在程序中频繁创建大量对象或者持续运行时间过长的情况下。
死锁问题则是指多个线程互相持有对方所需要的资源,导致彼此无法继续执行,进而导致程序无法正常运行。
死锁问题通常发生在多线程编程中,处理不当时很容易出现。
解决方案
针对内存溢出问题,可以通过一些方法来解决,比如增加堆内存大小、优化程序代码以减少内存占用、及时释放不再使用的对象等。
另外,可以使用一些工具来监控程序内存使用情况,及时发现并解决潜在的内存溢出问题。
对于死锁问题,可以通过合理地设计程序逻辑、避免使用过多的同步代码块、避免嵌套锁等方法来预防死锁的发生。
此外,可以使用一些工具来帮助检测程序中潜在的死锁问题,并及时处理。
综上所述,如果在Java编程过程中遇到内存溢出或死锁问题,可以通过上述方法来解决,确保程序的稳定运行。
Java常见异常(RuntimeException)详细介绍并总结

Java常见异常(RuntimeException)详细介绍并总结本⽂重在Java中异常机制的⼀些概念。
写本⽂的⽬的在于⽅便我很长时间后若是忘了这些东西可以通过这篇⽂章迅速回忆起来。
1. 异常机制1.1 异常机制是指当程序出现错误后,程序如何处理。
具体来说,异常机制提供了程序退出的安全通道。
当出现错误后,程序执⾏的流程发⽣改变,程序的控制权转移到异常处理器。
1.2 传统的处理异常的办法是,函数返回⼀个特殊的结果来表⽰出现异常(通常这个特殊结果是⼤家约定俗称的),调⽤该函数的程序负责检查并分析函数返回的结果。
这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在⼀起;由调⽤函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。
1.3 异常处理的流程1.3.1 遇到错误,⽅法⽴即结束,并不返回⼀个值;同时,抛出⼀个异常对象1.3.2 调⽤该⽅法的程序也不会继续执⾏下去,⽽是搜索⼀个可以处理该异常的异常处理器,并执⾏其中的代码2 异常的分类2.1 异常的分类2.1.1 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。
2.1.2 Error和RuntimeException及其⼦类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。
2.2 每个类型的异常的特点2.2.1 Error体系 Error类体系描述了Java运⾏系统中的内部错误以及资源耗尽的情形。
应⽤程序不应该抛出这种类型的对象(⼀般是由虚拟机抛出)。
如果出现这种错误,除了尽⼒使程序安全退出外,在其他⽅⾯是⽆能为⼒的。
java中常见的NullPointerException异常

java中常见的NullPointerException异常下面列出了我们学习java时常出现的NullPointerException异常,以及它的解决办法1,空指针错误ng.NullPointerException 使用基本的JAVA数据类型,变量的值要么已经是默认值,如果没有对其正常赋值,程序便不能通过编译,因此使用基本的JAVA数据类型(double,float,boolean,char,int,long)一般不会引起空指针异常。
由此可见,空指针异常主要跟与对象的操作相关。
下面先列出了可能发生空指针异常的几种情况及相应解决方案:不管对象是否为空就直接开始使用。
(JSP)代码段1:out.println(request.getParameter("username"));描述:代码段1的功能十分简单,就是输出用户输入的表域"username"的值。
说明:看上去,上面的语句找不出什么语法错误,而且在大多数情况下也遇不到什么问题。
但是,如果某个用户在输入数据时并没有提供表单域"username"的值,或通过某种途径绕过表单直接输入时,此时request.getParameter("username")的值为空(不是空字符串,是空对象null。
),out对象的println方法是无法直接对空对象操作,因此代码段1所在的JSP页面将会抛出"ng.NullPointerException"异常。
即使对象可能为空时,也调用ng.Object或Object对象本身的一些方法如toString(), equals(Object obj)等操作。
(JSP)代码段2:String userName =request.getParameter("username");If (userName.equals("root")) {....}描述:代码段2的功能是检测用户提供的用户名,如果是用户名称为"root"的用户时,就执行一些特别的操作。
Java常见问题排查

Java常见问题排查java问题的排查这么多年⼏乎没有什么改进,还是⽼的⽅法;每年查的问题也都很类似,不会有什么太多特殊的问题出现;java⼀些很常见的问题基本可以⽤⼀个模式去解的(⼤部分问题,只是有些问题⽐较复杂)所有的性能优化问题跟排查⼀个故障没有太⼤区别,因为最终都体现在⼀些系统指标上;查java问题要先知道系统的指标,因为所有的异常通常来讲系统指标都会有体现;⼀、排查java问题要先知道的1.系统指标查看1.1 top可以查看实时的每个核的状况1.2 tsvmstat好处是可以查看分钟级,不管是cpu、内存、⽹卡,可以查历史的每⼀分钟的各项指标,对历史问题⾮常有帮助,只是不能看每个核的运⾏状况;这两个是最重要的,所有的性能优化体现在系统上基本上都会体现在某个指标上;如果业务代码还可以,则会把某个硬件指标跑满,如果业务代码有问题,则硬件所有指标都没跑满,应⽤挂了。
2.要关注2.1 cpu2.1.1 us⼤多是应⽤本⾝的消耗java应⽤压⼒越⼤,我们追求的通常是us越⾼越好,这样说明主要消耗都在业务上,才说明业务代码写得还不错;2.1.2 sy 上下⽂切换和内核的消耗java应⽤的cpu的sy不应该太⾼,因为java应⽤主要是线程上下⽂的切换,内核层⾯会有⼀点消耗,但通常不多,如果sy很⾼的话,通常是因为⾼并发程序⼏个线程抢锁抢得⾮常厉害;2.1.3 iowait 磁盘除⾮是⽤java做存储相关,做业务层⾯⼀般不会碰到io问题;2.1.4 si 软中断,通常是⽹卡中断处理通常可以把si压到瓶颈是⽹卡的中断处理,就是⽹卡中断处理不过来,⽬前认为这种在硬件情况下⽆法突破,已经说明你的软件写得⾮常好;2.2 ⽹卡带宽cpu⼏乎可以展现所有的硬件状况,除了⽹卡带宽,⽤专⽤⼯具(tsvmstat)查看,通常不会把⽹卡跑满,除⾮有拉数据。
所以不管是做性能优化还是查问题之前,⼀定要看系统指标;⼆、java常见问题NoSuchMethodException、OutOfMemoryError、CPU us⾼、应⽤没响应、java进程没了有可能本地没碰到NoSuchMethodException,但线上碰到了,这个挺正常的;⼏乎所有java开发⼈员都会碰到OOM,不管是性能优化还是故障排查,通常我们的应⽤最后都会变成围绕CPU us去解决问题;1.NoSuchMethodException1.1 出现这种现象的原因1.1.1 java ClassLoader机制跟类加载有很⼤关系,它不是⼀个很好的机制,它有很多的问题,⽐如说启动完它会分⼏个⽬录分别加载jar包,这样就碰到jar版本冲突问题;1.1.2 java⾥让⼈极度头疼的jar版本冲突问题⼯程引⽤了A和B,A和B⼜都引⽤了C,但引⽤C的版本不同(groupId相同),这种问题maven就能解决,java⾥碰到的通常不是这种,这种编译就搞定了;通常碰到的是很多开源的框架很讨厌,他们的做法是依赖⼀个jar包时,把jar包⾥所有的代码拷贝到⾃⼰的代码⾥,然后打成他们⾃⼰的包,这种情况maven就不可能知道了,这种情况⼏乎所有的开源框架都⼲,这个是java⾥⾯很难解决的问题,因为冲突的问题很正常,⽽且有些根本不是你造成的,⼀旦出现就很容易出现NoSuchMethodException,就是有可能你⽤了⼀个新版本的⽅法,由于它加载了⽼的可能就会找不到,这种情况可能导致⽣产环境发布时发布的环境⼀模⼀样,有⼏台正常,有⼏台却发布失败,是因为java在加载⼀个⽬录下所有jar包的顺序完全取决于OS,⽽linux系统完全取决于inode的顺序,⽽inode的顺序不完全能控制;这个问题太⿇烦了,没⼈去解,理论上正确的解决⽅法是java加载jar包时是带加载⾃⼰的顺序去加载;有时候碰到很诡异的问题都是可以被解释的,也很正常;1.2 同类型的问题ClassNotFoundException/NoClassDefFoundError/ClassCastException1.3 排查⽅法1.3.1 -XX:+TraceClassLoading会打印出类是从哪个jar包加载的,如果有问题的话,就是那个位置不是你想的那个位置,需要修改配置并重启;1.3.2 jar -tvf *.jar如果对应⽤的运⾏机制很清楚,应⽤通常来讲都是tomcat或者jboss,意味着jar包都会从tomcat⾃⼰的rive下或者应⽤的web-inf⽬录下加载,如果你很清楚,你可以解压所有的jar,tvf不会展开只是⼀个列表⽽已,打印出所有的类,查看是否有同样包名同样类名的东西在两个jar包⾥都有,如果他们两个md5 sum出来不⼀样,则说明这两个版本冲突,冲突说明环境⼀直存在风险,全部都存在风险;版本冲突不会死⼈,最多就是⼀点点问题;碰到问题会解就好,通常就直接⽤jar -tvf *.jar看哪个class冲突了;这个时候就可以写个脚本⾃动的查看有没有两个类冲突的问题; 23561.4 解决⽅法1.4.1 mvn pom⾥去除不需要的版本provided;开源⼲的坏事那种只能作⼀个bugfix版本,只能这样;1.4.2 在打包阶段就尽可能避免掉版本冲突问题类加载相关的所有问题在java⾥都不算太难解,虽然不⼤难查问题,但解决起来稍微会有点复杂,就看问题有多⿇烦;2. ng.OutOfMemoryErrorOOM还包括了不报OOM,但GC已经⽐较频繁了这种现象,⽐如说应⽤写得还可以的情况下,压⼒施加上去,瓶颈会出现在gc,gc会⾮常的频繁,但它不会报OOM,jvm源码⾥只有以下七种原因可导致OOM,这七种在java⾥⾯多数都是有解决⽅案的,java⼯具体系⽐很多其他语⾔要成熟:GC overhead limitexceeded、Java Heap Space、Unable to create new native thread、PermGen Space、Direct buffer memory、Map failed、request {} bytes for {}. Out of space?2.1 GC overhead limit exceeded/Java Heap Space最常见的OOM后⾯跟的原因描述通常会是这两种2.1.1出现这两种现象的原因:java heap分配不出需要的内存了java heap(-Xms -Xmx)包括eden/survivor/survivor/OldGen;NewGen(-Xmn,-XX:SurvivorRatio)包括Eden、Survivor0、Survivor1,PermGen(-XX:PermSize,-XX:MaxPermSize)⼀个jvm内存分为java heap和c heap,7(含)以前perm gen还是在java heap中,7以后就移到c heap中了,⼤家更多接触的是java heap.-Xms -Xmx不允许设置成⼀样的值,否则会平⽩⽆故增加⾮常多的GC,⽐如说内存到了⼀定⼤⼩,它觉得不⼤够⽤了,还不到最⼤值,这个时候它会gc,把内存放⼤,它觉得要缩⼩了,也会gc,⽤来缩⼩;2.1.2 排查⽅法(确定不是因为heap size⼤⼩的情况下)既然java heap满了,我们就要知道这个堆被谁⽤掉,如果知道被谁⽤掉,这个问题理论上就可以被解决了,如果要知道堆被谁⽤掉,⾸先要拿到heap dump⽂件,否则谁也⽆法解决问题;这⾥说是oom不是cpu load⾼的问题;a.拿到HeapDump⽂件a.1 -XX:+HeapDumpOnOutOfMemoryError这个启动参数只会在第⼀次OOM时产⽣dump⽂件(⽂件名以.hprof结尾),在target或者⼯作⽬录下,后⾯再报OOM,就不会⽣成了,它认为已经⽣成了,所以有可能第⼀次dump的⽂件没⽤,要后⾯的才⾏,也就是抓不到现场;如果登陆机器时正在OOM(有些应⽤⼀直在OOM),可执⾏jmap -dumpa.2 jmap -dump:file=<⽂件名>,format=b [pid]如果正在执⾏gc,可执⾏此命令,执⾏时会强制执⾏⼀次Full GC(正是由于这个原因,不要在线上随便执⾏这个命令,FullGC耗时很多,可能导致线上应⽤挂掉),但有可能有时dump不出来,碰到了也很正常,那就不⽤强⾏dump了,没什么意思,这时可尝试⼀下⽤gcorea.3 gcore [pid]⽣成c版core dump,再运⾏jmap -dump从core dump提取出java的heap dump,jmap -dump:format=b,file=heap.hprof java路径 core.dump⽂件,最好的做法是⽤gcore,⽽不是jmap -dump,gcore特别快,jmap特别慢,因为jmap -dump除了会引发FullGC也会⽣成⼀个与java heap 同⼤⼩的⽂件,java heap 有8g,⽣成的⽂件就有8g,java heap有100g时OOM就别查了,因为它会⽣成⼀个100g的⽂件,这是java排查问题⼀个致使的弱点,⽬前为⽌,业界也没有很好的解决⽅案;多数OOM的问题重启(绝对⼤招)是可以解决的,只是重启问题在于哪天⼜会出现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
方法不存在错误。当应用试图调用某类的某个方法,而该类的定义中没有该 方法的定义时抛出该错误。
ng.OutOfMemoryError
内存不足错误。当可用内存不足以让 Java 虚拟机分配给一个对象时抛出该 错误。
ng.StackOverflowError
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
方法未找到异常:NoSuchMethodException
ng.InstantiationException
实例化异常。当试图通过 newInstance()方法创建某个类的实例,而该类是 一个抽象类或接口时,抛出该异常。
ng.InterruptedException
被中止异常。当某个线程处于长时间的等待、休眠或其他暂停状态,而此时 其他的线程通过 Thread 的 interrupt 方法终止该线程时抛出该异常。
1. ng.nullpointerexception
这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地 说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在 创 建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错 误等等。对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常 犯 的错误,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化 是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然 是空的, 所以还需要对每个元素都进行初始化(如果要调用的话)
ng.AbstractMethodError
抽象方法错误。当应用试图调用抽象方法时抛出。
ng.AssertionError
断言错。用来指示一个断言失败的情况。
ng.ClassCircularityError
类循环依赖错误。在初始化一个类时,若检测到类之间循环依赖则抛出该异 常。
这个异常相信很多朋友也经常遇到过,异常的解释是"数组下标越界",现在 程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看 自 己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标) 调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还 有 一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声 明的,这个时候,最好先查看一下数组的 length,以免出现这个异常。
Java 系统常见的异常大集合分析
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
ng.IllegalThreadStateException
违法的线程状态异常。当县城尚未处于某个方法的合法调用状态,而调用了 该方法时,抛出异常。
ng.IndexOutOfBoundsException
索引越界异常。当访问某个序列的索引值小于 0 或大于等于序列大小时,抛 出该异常。
6. ng.illegalaccessexception
这个异常的解释是"没有访问权限",当应用程序要调用一个类,但当前的方 法即没有对该类的访问权限便会出现这个异常。对程序中用了 package 的情况下 要注意这个异常。
其他还有很多异常,我就不一一列举了,我要说明的是,一个合格的程序员, 需要对程序中常见的问题有相当的了解和相应的解决办法,否则仅仅停留在写程 序而不会改程序的话,会极大影响到自己的开发的。关于异常的全部说明,在 api 里都可以查阅。
ng.UnsatisfiedLinkError 未满足的链接错误。当 Java 虚拟机未找到某个类的声明为 native 方法的本 机语言定义时抛出。
edClassVersionError
不支持的类版本错误。当 Java 虚拟机试图从读取某个类文件,但是发现该 文件的主、次版本号不被当前 Java 虚拟机支持的时候,抛出该错误。
违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象(O)的 监控器或者通知其他线程等待该对象(O)的监控器时,抛出该异常。
ng.IllegalStateException
违法的状态异常。当在 Java 环境和应用尚未处于某个方法的合法调用状态, 而调用了该方法时,抛出该异常。
违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其 方法,但是又违反域或方法的可见性声明,则抛出该异常。
ng.IncompatibleClassChangeError
不兼容的类变化错误。当正在执行的方法所依赖的类定义发生了不兼容的改 变时,抛出该异常。一般在修改了应用中的某些类的声明定义而没有对整个应用 重新编译而直接运行的情况下,容易引发该错误。
2. ng.classnotfoundexception
这个异常是很多原本在 jb 等开发环境中开发的程序员,把 jb 下的程序包 放在 wtk 下编译经常出现的问题,异常的解释是"指定的类不存在",这里主要考 虑一下类的名称和路径是否正确即可,如果是在 jb 下做的程序 包,一般都是默 认加上 package 的,所以转到 wtk 下后要注意把 package 的路径加上。
类造型异常。假设有类 A 和 B(A 不是 B 的父类或子类),O 是 A 的实例,那 么当强制将 O 构造为类 B 的实例时抛出该异常。该异常经常被称为强制类型转换 异常。
ng.ClassNotFoundException
找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历 CLASSPAH 之后找不到对应名称的 class 文件时,抛出该异常。
ng.NoClassDefFoundError
未找到类定义错误。当 Java 虚拟机或者类装载器试图实例化某个类,而找 不到该类的定义时抛出该错误。
ng.NoSuchFieldError
域不存在错误。当应用试图访问或者修改某类的某个域,而该类的定义中没 有该域的定义时抛出该错误。
ng.CloneNotSupportedException
不支持克隆异常。当没有实现 Cloneable 接口或者不支持克隆方法时,调用 其 clone()方法则抛出该异常。
ng.EnumConstantNotPresentException
枚举常量不存在异常。当应用试图通过名称和枚举类型访问一个枚举对象, 但该枚举对象并不包含常量时,抛出该异常。
3.尽量在同一操作中共享外部资源,以减少该操作对资源的消费,提高程序 的执行效率
ng.ExceptionInInitializerError
初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异常时 抛出。静态初始化程序是指直接包含于类中的 static 语句段。
ng.IllegalAccessError
ng.VerifyError
验证错误。当验证器检测到某个类文件中存在内部不兼容或者安全问题时抛 出该错误。
ng.VirtualMachineError 虚拟机错误。用于指示虚拟机被破坏或者继续执行操作所需的资源不足的情 况。
ng.ArithmeticException
堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错 误。
ng.ThreadDeath
线程结束。当调用 Thread 类的 stop 方法时抛出该错误,用于指示线程结束。
ng.UnknownError
未知错误。用于指示 Java 虚拟机发生了未知严重错误的情况。
ng.NegativeArraySizeException 数组大小为负值异常。当使用负数大小值创建数组时抛出该异常。 ng.NoSuchFieldException 属性不存在异常。当访问某个类的不存在的属性时抛出该异常。 ng.NoSuchMethodException 方法不存在异常。当访问某个类的不存在的方法时抛出该异常。 ng.NullPointerException 空指针异常。当应用试图在要求使用对象的地方使用了 null 时,抛出该异 常。譬如:调用 null 对象的实例方法、访问 null 对象的属性、计算 null 对象 的长度、使用 throw 语句抛出 null 等等。 ng.NumberFormatException 数字格式异常。当试图将一个 String 转换为指定的数字类型,而该字符串 确不满足数字类型要求的格式时,抛出该异常。 ng.RuntimeException 运行时异常。是所有 Java 虚拟机正常操作期间可以被抛出的异常的父类。 ng.SecurityException 安全异常。由安全管理器抛出,用于指示违反安全情况的异常。 ng.StringIndexOutOfBoundsException 字符串索引越界异常。当使用索引值访问某个字符串中的字符,而该索引值 小于 0 或大于等于序列大小时,抛出该异常。 ng.StringIndexOutOfBoundsException 字符串越界错误 等字符串类相关错误 代码段 4: String s_all_power = "1010011";
原因:
1.对系统所访问外部资源,未执行关闭操作,导致外部资源大量浪费,最终 可能导致系统无法正常运行;
2.对系统所访问的外部资源关闭次数太多,外部系统无法正常处理;