Java中常见的20个错误及解决方案
9月13日 孤小单投稿 1。类定义未找到错误java。lang。NoClassDefFoundError。
原因分析
由于该程序调用到的JAVA类文件没有正确上传。
JAVA类文件已经上传,但应用服务器并未检测到,建议将JSP页面重新更新。
解决方案
将JAVA类文件重新上传。
将JSP页面更新并上传;或将应用程序服务器进行重新启动。2。解决java。lang。StackOverflowError错误。
错误信息
严重:Exceptioninitializingpagecontext
java。lang。StackOverflowError。。。。。。。。。。。。。。。。。。。。。。。。
原因分析
运行一个程序,JVM会开辟一块内存空间去储存程序进行时的某些信息,当程序运行时需
要储存的信息超过了分配的空间,就会出现那样的问题。比如死循环,递归次数过多,等等。
解决方案
首先从程序代码优化方面着手,检查是否有死循环、递归等程序,如果有,修正、优化
相关代码。3。代码错误分析。
错误信息interfacePlayable{voidplay();}interfaceBounceable{voidplay();}interfaceRollableextendsPlayable,Bounceable{BallballnewBall(PingPang);}classBallimplementsRollable{privateSpublicStringgetName(){}publicBall(Stringname){this。}publicvoidplay(){ballnewBall(Football);System。out。println(ball。getName());}}
解决方案
interfaceRollableextendsPlayable,Bounceable没有问题。interface可继承多个interfaces,所以这里没错。问题出在interfaceRollable里的BallballnewBall(PingPang);。任何在interface里声明的interfacevariable(接口变量,也可称成员变量),默认为publicstaticfinal。即BallballnewBall(PingPang);实际上是publicstaticfinalBallballnewBall(PingPang);。在Ball类的Play()方法中,ballnewBall(Football);改变了ball的reference,而这里的ball来自Rollableinterface,Rollableinterface里的ball是publicstaticfinal的,final的object是不能被改变reference的。因此编译器将在ballnewBall(Football);
这里显示有错。4。解决MyEclipse开发SSH整合时java。lang。NoSuchMethodError方案
环境显示MyEclipse5。5Struts1。2Spring2。0Hibernate3。1Tomcat
错误提示
原因分析
Spring和Hibernate共用的一些jar文件发生了版本冲突。
解决方案
从出错的字面看,肯定与org。objectweb。asm包有关,检查lib下面关于asm的包,发现包含下面的包:asm2。2。3。jarasm。jarasmattrs。jarasmcommons2。2。3。jarasmutil2。2。3。jar
可以从包名猜,asm2。2。3。jar和asm。jar可能是不同版本的,你可以查看包里的类是否差不多。这时,你可以尝试删除其中一个,重启Tomcat,经过尝试,发现把asm2。2。3。jar包删除后,重启后没出现错误提示。5。Java错误java。lang。Error。
原因分析
对系统所访问外部资源,未执行关闭操作,导致外部资源大量浪费,最终可能导致系统无法正常运行;
对系统所访问的外部资源关闭次数太多,外部系统无法正常处理;
系统访问的外部资源出现异常情况。
解决方案
访问外部资源前,首先检查该资源(如数据库)是否可正常连接或操作。
访问外部资源时,如果进行了连接,一定进行关闭操作,并仅进行一次关闭操作。
尽量在同一操作中共享外部资源,以减少该操作对资源的消费,提高程序的执行效率。6。Java调用DLL错误:Exceptioninthreadmainjava。lang。UnsatisfiedLinkError解决。
原因分析
Exceptioninthreadmainjava。lang。UnsatisfiedLinkError,编译没有问题,运行出现问题,如果错误Exceptioninthreadmainjava。lang。UnsatisfiedLinkError后面是某一个类名的话,很可能是java程序调用了有关dll文件而没有找到这样的dll文件造成的。
解决方案
把需要的dll文件放到和该java类相同的目录下即可。7。java。lang。OutOfMemoryError异常处理总结。
原因分析
内存中加载的数据量过于庞大,如一次从数据库取出过多数据。
集合类中有对对象的引用,使用完后未清空,使得JVM不能回收。
代码中存在死循环或循环产生过多重复的对象实体。
使用的第三方软件中的BUG。
启动参数内存值设定的过小。8。java。lang。NoSuchMethodError异常处理。
原因分析
Java程序运行过程中,需要调用某个类的某个方法,但却发现这个方法并不存在,找不到所以会提示这个错误。
解决方案
检查调用的方法名称是否正确,要检查拼写和大小写。
检查调用的类里是否已经有该方法。
检查调用的方法的作用域。
若是调用别人的包里的方法,首先要确认包是可以找到的(如开发工具中导入包、web应用中有该包等),再按上面1、2、3点检查。
某些时候,特别是SSH整合开发,有可能会出现这个异常,一般是包的版本冲突问题,这时候可以尝试更换一下版本。9。类路径没有找到。
原因分析
可能:ClassNotFoundException:oracle。jdbc。driver。OracleDriver,一般是指包名写错,或者没有import包,或者没有在类路径中找到jar文件。
解决方案
没有加载Oracle驱动jar,在。bashprofile中把ojdbc14。jar加进来即可。10。找出以下程序代码中的错误。classSomething{publicvoiddoSomething(){System。out。println(ii);}}
解决方案
finalinti是个final的instantvariable(实例变量,或叫成员变量)。final的instantvariable没有defaultvalue,必须在constructor(构造器)结束之前被赋予一个明确的值。可以修改为finalinti0;或将final去掉也可以,inti属於instantvariable(实例变量,或叫成员变量)。instantvariable有默认值,也就是初始化值会为0。11。如果JSP页面跳转时出现下边的错误信息:
Therequestsentbytheclientwassyntacticallyincorrect(InvalidpathwebshoppingCartwasrequested)。
原因分析
strutsconfig中的actionx写成了actionx。do。
解决方案
将strutsconfig中的actionx。do改成actionx即可。12。常见错误提示tomcat:java。lang。OutOfMemoryError:PermGenspacetomcat:java。lang。OutOfMemoryError:Javaheapspaceweblogic:RootcauseofServletExceptionjava。lang。OutOfMemoryErrorresin:java。lang。OutOfMemoryErrorjava:java。lang。OutOfMemoryError
原因分析
应用服务器提示错误。
Java代码导致错误。
解决方案
把启动参数内存值设置足够大。
重点排查以下几点:
1)检查代码中是否有死循环或递归调用。
2)检查是否有大循环重复产生新对象实体。
3)检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
4)检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。13。错误代码分析publicclassSomething{publicintaddOne(finalintx){}}
原因分析
intx被修饰成final,致使x不能在addOnemethod中被修改。14。java运行时出现错误。
Exceptioninthreadmainjava。lang。NoClassDefFoundError:MyJavaHello(wrongname:Hello)
atjava。lang。ClassLoader。defineClass1(NativeMethod)
解决方案
检查类名拼写是否正确。
类名正确,确认jdk下的tools。jar有没有导进去。
jdk下的tools。jar有没有导进去了,确认导入的jdk是不是有重复。15。在部署Struts时,出现如下错误信息:HTTPStatus404ServletactionisnotavailabletypeStatusreportmessageServletactionisnotavailabledescriptionTherequestedresource(Servletactionisnotavailable)isnotavailable。
原因分析
web。xml文件中未配置ActionServlet。
strutsconfig。xml文件未配置你要访问的Action。
你的jsp文件form标记中action属性的路径名称错误。
非以上三种情况。
解决方案
在web。xml文件中加上ActionServlet的配置信息??????WEBINFstrutsconfig。xml?
在strutsconfig。xml文件检查你要访问的Action配置文件。
检查jsp文件form标记中action属性的路径名称是否与strutsconfig。xml文件中action标记的path属性的路径名称一致。
非以上情况的解决办法就是检查web容器的log日志,如果时tomcat则检查下logs目录下的localhostlog文件,看里边是否记录有错误信息,然后根据错误信息提示将其纠正。16。代码错误分析publicclassPerttyTest{publicstaticvoidmain(String〔〕args){Stringi123,s;sgetStr(i);System。out。println(s);}publicStringgetStr(Strings){StringBuffersbnewStringBuffer();for(intis。length()1;i0;i){sb。append(s。charAt(i));}returnsb。toString();}}
原因分析
定义的getStr方法不是静态方法,需要实例一个对象才能调用。
解决方案
在main下加一行PerttyTestanewPerttyTest();
sgetStr(i)改成sa。getStr(i);
正确的代码如下所示。publicclassPerttyTest{publicstaticvoidmain(String〔〕args){PerttyTestanewPerttyTest();Stringi123,s;sa。getStr(i);System。out。println(s);}publicStringgetStr(Strings){StringBuffersbnewStringBuffer();for(intis。length()1;i0;i){sb。append(s。charAt(i));}returnsb。toString();}}17。couldnotinitializeacollection:〔hibernate。entity。Role。modules32768〕Syntaxerror:Encounteredatline1,column132。
原因分析
红色字部分中为非法字符。
解决方案
将非法字符替换为modulerole。18。错误代码分析publicclassSomething{voiddoSomething(){privateSintls。length();}}
解决方案
局部变量前不能放置任何访问修饰符(private,public,和protected)。final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。19。数据插入异常,GenericJDBCException:couldnotinsert
原因分析
没有建立表或者表中没有任何数据。
插入数据后没有执行提交语句:commit。20。字符串越界错误java。lang。StringIndexOutOfBoundsException等字符串类相关错误
错误信息
Stringsallpower1010011;
Stringsaccesspowersallpower。substring(3,4);
原因分析
以上代码段功能的功能是获取字符串sallpower中的第4个字符。
一般情况下,程序不会有问题,如果由于某种原因,sallpower长度变短,程序就会抛出字符串错误。
解决方案
对字符串进行截取(substring,charAt)、转换为字节数组(getBytes),字符数组转换为字符串(valueOf)操作时,先对操作字符串对象的存在性(是否为空)及长度进行检查后,再进行操作。
改写后的正确代码如下。Stringsallpower1010011;if(sallpower。length4)Stringsaccesspowersallpower。substring(3,4);
当液晶拼接屏出现花屏问题时该如何解决如今,液晶拼接屏作为当前市场上应用非常火热的大屏幕电子显示产品,应用领域越发广阔,被人们纷纷应用在各个领域的诸多场所,为人们解决了很多问题。既然是电子产品,液晶拼接屏必然……
2020年中国移动应用趋势洞察白皮书应用体验变革篇核心摘要:应用载体形态变革:1)移动应用行业环境变化及科学技术进步,催生了轻量化应用。凭借免下载、转化高、省内存等优点,轻量化应用逐步形成与原生应用互补共生的发展局……
加冕设计界奥斯卡!恒大如何步步为营造好车?恒大汽车的产品创新力再获认可。近日,恒驰1凭借惊艳造型,摘得2021年德国红点设计大奖。分析认为,恒驰首次参评便斩获大奖,展现了恒大汽车在汽车造型设计领域的强大实力。近年……
微信称霸天下晚上想给孩子买盒药,骑个小黄车到附近药店买,结果没有卖的,于是想起之前用的叮当卖药,半夜里买药能28分钟送到,比较方便,就打开小程序搜索,一看有药,就想赶紧下单直接送药上门,结……
Java中常见的20个错误及解决方案1。类定义未找到错误java。lang。NoClassDefFoundError。原因分析由于该程序调用到的JAVA类文件没有正确上传。JAVA类文件已经上传……
酷迪熊从品质到服务,小家电增长新通路电商化启示录:始于颜值,专注于服务。作者:贾诗卉一个月内不约酒,这是国庆之后肖仁志推掉的第六个饭局。最近肖仁志很忙,但忙有所得。工厂喜迁新居,5500平方米的……
过去10年,电动汽车价格在中国下降47,但在美国却上涨了38尽管我们都习惯了认为国外购车更加便宜,但在电动汽车市场,过去10年来,中美两国的价格变化却呈现出让我们感到有些惊讶的变化。那就是,美国市场的电动汽车价格不降反升,而中国市场的电……
RedmiNote11有惊喜,最大亮点曝光万众瞩目的RedmiNote11将在2021年10月28日19:00发布,这个月以来,官方陆陆续续发布不少配置和功能,吸引了很多米粉的关注。其中几大亮点值得我们一起来看看!……
B站不放过年轻人的暑假上一个暑假,B站砸下重金收获了月活2亿;这个暑假,B站会错过吗?撰文蓝洞商业赵卫卫一个是年末,一个是暑期。每年年末,B站都有广为人知的跨年晚会最美的夜,每年暑……
鸿蒙系统将至,你的手机更新了吗?华为的荣耀V10用了好多年了,电池也没换过,依然坚挺,除了存储空间不太够,一直都很好用。系统升级到emui9之后很久没有更新了,之前大部分新出手机都升级emui10,荣耀V10……
网友买的6寸电脑更换散热硅脂,重新开机之后效果惊呆了GPDWIN2游戏掌机,网友购买了很久了,最近发现散热没有刚开始那么给力了,决定拆机看看什么情况。打开机器的底壳发现内部电池占了三分之二的空间,其余的处理器内存wifi等……
美国网件公司(NETGEAR)推出全新夜鹰RAXE500三频中国4月21日美国网件公司(NETGEAR)(NASDAQ代码:NTGR),作为全球领先的家用和商用先进联网产品供应商,在CES2021期间,NETGEAR推出了世界上首款Wi……
爱奇艺腾讯视频等14家企业承诺整改PC端弹窗问题品玩10月9日讯,据江苏消保委,10月9日,爱奇艺腾讯视频等14家企业被约谈后,各PC端软件所属企业基本予以了积极的有针对性的回应。各企业整改情况回函包括:1、360浏览器、3……
爱上北斗星男友今日开播千岁张铭恩即将上线星关系3月13日讯由林宏杰、陶声执导,陈祉希监制,徐璐、张铭恩、任言恺、吴昕主演的奇妙甜爱剧《爱上北斗星男友》将于今晚播出。继热播剧《沙海》张铭恩饰演百岁老人张日山之后,张铭恩……
东数西算的背后?东数西算是突然冒出来的吗?顶层设计的思路是什么?从宏观看,东数西算就是共同富裕的战略布局,是产业扶贫的延续,从产业政策看就是科技强国的两手抓两手都要硬,这两手,一手是补短……
重耳传奇今日播出蒲巴甲化身忠义申生谱写乱世传奇星关系3月12日讯由赖水清、赵箭联合执导,王龙华、蒲巴甲、张一山等人主演的古装燃情大剧《重耳传奇》将于今日播出。《重耳传奇》讲述了春秋五霸之一的晋文公重耳流亡复国,苦心励志,最……
只为遇见你2天3吻成亲亲狂魔今晚张铭恩花式追妻星关系3月12日讯由思美观达影视、芒果TV联合出品的都市情感励志剧《只为遇见你》正在湖南卫视金鹰独播剧场、芒果TV和优酷视频持续热播。播出仅2天,戒指夫妇张铭恩、文咏珊就接连上……
发展电商,利国利民首先声明,我这所说的电商是指网购网销这一销售模式,即电子化网络化的商业,不是指某个具体的平台企业,也不是指带货主播,各位反对的就不要混淆概念了。商业网络化是不亚于火药的一大发明……
只为遇见你首播戒指夫妇高能张铭恩文咏珊拽领吻甜翻星关系3月11日讯昨晚,由思美观达影视、芒果TV联合出品的都市情感励志剧国粹挚爱系列《因为遇见你》的姐妹篇《只为遇见你》,在湖南卫视高甜首播。戒指夫妇张铭恩、文咏珊上线后,高能……
大冰小将小将趣味香港深圳行传递冰球文化促进北冰南展星关系3月11日讯由国家体育总局冬季运动管理中心联合浙江卫视制作的国内首档少儿燃动冰雪成长类节目999小儿感冒药《大冰小将》第九期于3月9日(周六)晚20:30如约播出。本周,……
欢乐喜剧人贾冰霸气踢馆魔王空降包袱连甩星关系3月11日讯上周日晚,喜剧演员贾冰参加东方卫视大型喜剧竞演综艺《欢乐喜剧人》第五季魔王踢馆赛。作为第四季总冠军,瘦身成功的贾冰搭档实力笑匠潘斌龙空降喜剧人舞台,冠军团队献……
只为遇见你曝角色特辑张铭恩文咏珊对角色不得不爱星关系3月11日讯3月10日起,由思美观达影视、芒果TV联合出品的都市情感励志剧《只为遇见你》即将正式登陆湖南卫视、芒果TV和优酷视频。明日,电视剧即将在粉丝们的期盼中首播,官……
末代厨娘剧照精致质感创新国剧细节到位星关系3月11日讯由北京橙信传媒有限公司、东台壹尺文化传媒有限公司出品,中国电影股份有限公司、天津猫眼影业有限公司、上海鸣涧影业有限公司联合出品,张国立操刀制作,信伏倩担任总制……
便利蜂首次披露鲜食工厂数字化实践北京商报讯(记者赵述评赵驰)近日,便利蜂资深产品总监郭爽来在全球产品经理大会上,首次披露了数字化驱动在便利蜂鲜食工厂标准化方面的应用。据悉,目前便利蜂在北京和上海共有3座……