1、第一个JAVA例程:hello world 实行时的题目:problems Executing Hello
假如你看到上面的错误提醒:
'java' is not recognized as an internal or external command, ...
or
java: Command not found.
那么你大概没有安置java大概在情况变量中并没有设置path途径java\bin目次。
请反省你的java安置以及情况变量的准确设置。
假如你看到:
Exception in thread "main" java.lang.NoClassDefFoundError: hello
(wrong name: Hello) ...
那么你很有大概是由于没有留意巨细写或是把称号中的字母打错了。如:
java hello
键入准确的下令重新运转即可。
假如你看到:
Exception in thread "main" java.lang.NoClassDefFoundError: Hello
/class
那么你必要思索能否去失名字中的.class局部。
2、剖析呈现java.lang.NoClassDefFoundError非常的详细状况
这个题目在下面调试第一个例程呈现过,但假如九游会输出的称号是准确的,仍旧提醒如许的题目时怎样办呢?
装了JDK1.4.0版,并且JAVA_HOME,PATH和CLASSPATH都设置好了。如下
JAVA_HOME=/home/jdk
CLASSPATH=$JAVA_HOME/jre/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jre/lib/:$JAVA_HOME/lib
PATH=$PATH:$JAVA_HOME/bin
用JAVAC下令天生了hello.class,当利用java hello时,仍旧提醒:
Exception in thread "main" java.lang.NoClassDefFoundError:XXX(wrong name:
XXX)
办理提醒:
(1)、Add (current directory) to your classpath或类界说后面加public
(2)、path情况变量中设置的途径中能否有另一个java.exe文件,默许实行的是这个目次下的java.exe,固然版本与JDK下的java.exe分歧,但在此目次下实行就会堕落。
办法:
安置了JDK的状况下,应该删除winnt下的java.exe,确保默许挪用的java.exe是位于jdk中bin目次下的java.exe。
(3)、倘使你利用了packet
那么反省你在编译了没有将指定package包在你文件中的java文件。
3、通常非常捕捉处置:
JAVA中几个根本非常复杂的形貌一下:
ArithmeticException 当呈现非常算术条件时发生
NullPointerException 当使用步伐希图利用必要的工具处为空时发生
ArrayIndexOutOfBoundsException 数组下标越界时发生
ArrayStoreException 当步伐试图存储数组中错误的范例数据时发生
FileNotFoundException 试图拜访的文件不存在时发生
IOException 由于一样平常I/O妨碍而惹起的,如读文件妨碍
NumberFormatException 当把字符串转换为数值型数据失败时发生
OutOfMemoryException 内存不敷时发生
SecurityException 当小使用步伐(Applet)试图实行由于欣赏器的宁静设置而不容许的举措时发生
StackOverflowException 当体系的货仓空间用完时发生
StringIndexOutOfBoundsException 当步伐试图拜访串中不存在的字符地位时发生
上述呈现的非常根本上都是JAVA中九游会大概会遇到的非常。
类Throwable有两个间接子类:Error和Exception。Exception类工具是Java步伐处置或丢弃的工具。Java 提供了两种Exception 的形式,一种是实行的时分所发生的Exception (Runtime Exception),别的一种则是受控制的Exception (Checked Exception)。一切的Checked Exception 均从java.lang.Exception 承继而来,而Runtime Exception 则承继java.lang.RuntimeException 或java.lang.Error (实践上java.lang.RuntimeException 的上一层也是java.lang.Exception)。它有种种差别的子类辨别对应于差别范例的破例。此中类RuntimeException代表运转时由Java假造机天生的破例。
步伐的运作机制上看,Runtime Exception与Checked Exception 纷歧样,从逻辑上看,Runtime Exception 与Checked Exception 在利用的目标上也纷歧样。
一样平常而言,Checked Exception 表现这个Exception 必需要被处置,也便是说步伐设计者应该曾经晓得大概会收到某个Exception(由于要try catch住) ,以是步伐设计者应该能针对这些差别的Checked Exception 做出差别的处置。
而Runtime Exception 通常会表示着步伐上的错误,这种错误解招致步伐设计者无法处置,而形成步伐无法持续实行下去。
Java的可控制非常处置是经过5个要害字来完成的:try,catch,throw,throws,finally。JB的在线协助中对这几个要害字是如许表明的:
Throws: Lists the exceptions a method could throw.
Throw: Transfers control of the method to the exception handler.
Try: Opening exception-handling statement.
Catch: Captures the exception.
Finally: Runs its code before terminating the program.
·try语句
try语句用大括号{}指定了一段代码,该段代码大概会丢弃一个或多个破例。
·catch语句
catch语句的参数相似于办法的声明,包罗一个破例范例和一个破例工具。破例范例必需为Throwable类的子类,它指明白catch语句所处置的破例范例,破例工具则由运转时体系在try所指定的代码块中天生并被捕捉,大括号中包括工具的处置,此中可以挪用工具的办法。
catch语句可以有多个,辨别处置差别类的破例。Java运转时体系从上到下辨别对每个catch语句处置的破例范例举行检测,直到找到范例相婚配的catch语句为止。这里,范例婚配指catch所处置的破例范例与天生的破例工具的范例完全分歧大概是它的父类,因而,catch语句的分列次序应该是从特别到一样平常。
也可以用一个catch语句处置多个破例范例,这时它的破例范例参数应该是这多个破例范例的父类,步伐设计中要依据详细的状况来选择catch语句的破例处置范例。
· finally语句
try所有限的代码中,当丢弃一个破例时,厥后的代码不会被实行。经过finally语句可以指定一块代码。无论try所指定的步伐块中丢弃或不丢弃破例,也无论catch语句的破例范例能否与所丢弃的破例的范例分歧,finally所指定的代码都要被实行,它提供了一致的出口。通常在finally语句中可以举行资源的扫除事情。如封闭翻开的文件等。不论非常能否产生都市实行finally中的语句。
·throws语句
throws总是呈现在一个函数头中,用来标明该成员函数大概抛出的种种非常。对大少数Exception子类来说,Java 编译器会逼迫你声明在一个成员函数中抛出的非常的范例。假如非常的范例是Error或 RuntimeException, 或它们的子类,这个规矩不起作用, 由于这在步伐的正常局部中是不等待呈现的。 假如你想明白地抛出一个RuntimeException,你必需用throws语句来声明它的范例。
· throw语句
throw总是呈现在函数体中,用来抛出一个非常。步伐会在throw语句后立刻停止,它前面的语句实行不到,然后在包括它的一切try块中(大概在下层挪用函数中)从里向外寻觅含有与其婚配的catch子句的try块。一切的办法都利用“throw”语句来抛出一个非常。Throw语句必要一个独自throwable工具,这个工具是恣意Throwable类的子类。
比方:
boolean testEx() throws Exception{ boolean ret = true; try { ret = testEx1(); } catch (Exception e) { System.out.println("testEx, catch exception"); ret = false; throw e; } finally { System.out.println("testEx, finally; return value="+ret); return ret; } }
4、JAVA错误: java.lang.Error
缘故原由:
1)对体系所拜访内部资源,未实行封闭操纵,招致内部资源少量糜费,终极大概招致体系无法正常运转;
2)对体系所拜访的内部资源封闭次数太多,内部体系无法正常处置;
3)体系拜访的内部资源呈现非常状况。
办理方案:
1)拜访内部资源前,起首反省该资源(如数据库)能否可正常毗连或操纵。
2)拜访内部资源时,假如举行了毗连,肯定举行封闭操纵,并仅举行一次封闭操纵。
3)只管即便在统一操纵中共享内部资源,以增加该操纵对资源的消耗,进步步伐的实行服从
5、空指针错误 :java.lang.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页面将会抛出"java.lang.NullPointerException"非常。
即便工具大概为空时,也挪用java.lang.Object或Object工具自己的一些办法如toString(), equals(Object obj)等操纵。
(JSP)代码段2:
String userName = request.getParameter("username");
If (userName.equals("root"))
{....}
形貌:
代码段2的功效是检测用户提供的用户名,假如是用户称号为"root"的用户时,就实行一些分外的操纵。
阐明:
在代码段2中,假如有效户没有提供表单域"username"的值时,字符串工具userName为null值,不克不及够将一个null的工具与另一个工具间接比力,异样,代码段2地点的JSP页面就会抛出(java.lang.NullPointerException)空指针错误。
(JSP)代码段3:
String userName = session.getAttribute("session.username").toString();
形貌:
代码段3的功效是将session中session.username的值取出,并将该值赋给字符串工具 userName。
阐明:
在一样平常状况下,假如在用户曾经举行某个会话,则不会呈现什么题目;但,假如此时使用办事珍视新启动,而用户还没有重新登录,(也大概是用户封闭欣赏器,但仍翻开原来的页面。)那么,此时该session的值就会生效,同时招致session中的session.username的值为空。对一个为null的工具的间接实行toString()操纵,就会招致体系抛出(java.lang.NullPointerException)空指针非常。
办理方案:
为了确保举行操纵或援用的工具非空,倘使九游会要对某工具举行操纵或援用,九游会起首去反省该工具能否曾经实例化且不为空;而且在体系中参加针对工具为空时状况的处置。
如:接纳String工具保管用户提交的后果;在假如触及工具的操纵时,先检测其能否为空后,反省到工具为空后,可再选择举行以下任一种处置方法:
处置方法 1) 反省到工具为空时,设置工具值为空字符串或一个默许值;
处置方法 2) 检测到工具为空时,基本不实行某操纵,间接跳转到其他处置中。
处置方法 3) 反省到工具为空时,提醒用户操纵有错误。
将代码段2按以上方法举行改写,失掉:
方法1:
String userName = request.getParameter("username"); // 该变量值为空时,转化为默许空字符串 If (userName == null) userName = ""; If (userName.equals("root")) {..........}
方法2:
String userName = request.getParameter("username"); // 该变量值为空时,转化为默许空字符串,不实行有关操纵。 If (usreName != null) { If (userName.equals("root")) {..........} }
方法3:
String userName = request.getParameter("username"); // 该变量值为空时,转化为默许空字符串,不实行有关操纵。 If (usreName == null) { // 提醒用户输出信息为空 }
实践中,下面提供到三种处置方法也异样实用于其他非常的处置:
非常处置方法 1) 反省到非常呈现,设置工具值为空字符串或一个默许值;
非常处置方法 2) 检测到非常呈现,基本不实行某操纵,间接跳转到其他处置中。
非常处置方法 3) 反省到非常呈现,提醒用户操纵有错误。
Struts罕见错误汇总
以下所说的struts-config.xml和ApplicationResources.properties等文件名是缺省时利用的,假如你利用了多模块,或指定了差别的资源文件称号,这些名字要做响应的修正。
1、“No bean found under attribute key XXX”
在struts-config.xml里界说了一个ActionForm,但type属性指定的类不存在,type属性的值应该是Form类的全名。大概是,在Action的界说中,name或attribute属性指定的ActionForm不存在。
2、“Cannot find bean XXX in any scope”
在Action里一样平常会request.setAttribute()一些工具,然后在转向的jsp文件里(用tag或request.getAttribute()办法)失掉这些工具并表现出来。这个非常是说jsp要失掉一个工具,但后面的Action里并没有将工具设置到request(也可以是session、servletContext)里。
大概是名字错了,请反省jsp里的tag的一样平常是name属性,或getAttribute()办法的参数值;大概是Action逻辑有题目没有实行setAttribute()办法就先转向了。
另有别的一个大概,地道是jsp文件的题目,比方会指定一个id值,然后在循环里利用这个值作为name的值,假如这两个值差别,也会呈现此非常。(都是一个原理,request里没有对应的工具。)
3、“Missing message for key "XXX"”
短少所需的资源,反省ApplicationResources.properties文件里能否有jsp文件里必要的资源,比方:
< bean:message key="msg.name.prompt"/ >
这行代码会找msg.name.prompt资源,假如AppliationResources.properties里没有这个资源就会呈现本非常。在利用多模块时,要留意在模块的struts-config-xxx.xml里指定要利用的资源文件称号,不然固然什么资源也找不到,这也是一个很容易犯的错误。
4、“No getter method for property XXX of bean teacher”
这条非常信息说得很明确,jsp里要取一个bean的属性出来,但这个bean并没有这个属性。你应该反省jsp中某个标签的property属性的值。比方上面代码中的cade应该改为code才对:
< bean:write name="teacher" property="cade" filter="true"/>
5、“Cannot find ActionMappings or ActionFormBeans collection”待办理。
6、“Cannot retrieve mapping for action XXX”
在.jsp的 标签里指定action='/XXX',但这个Action并未在struts-config.xml里设置过。
7、HTTP Status 404 - /xxx/xxx.jsp
Forward的path属性指向的jsp页面不存在,请反省途径和模块,关于统一模块中的Action转向,path中不该包括模块名;模块间转向,记着利用contextRelative="true"。
8、没有任何非常信息,表现空缺页面
大概是Action里利用的forward与struts-config.xml里界说的forward称号不婚配。
9、“The element type "XXX" must be terminated by the matching end-tag "XXX".”
这个是struts-config.xml文件的款式错误,细心反省它能否是良构的xml文件,关于xml文件的款式这里就不赘述了。
10、“Servlet.init() for servlet action threw exception”
一样平常呈现这种非常在前面会表现一个关于ActionServlet的非常货仓信息,此中指出了非常详细呈现在代码的哪一行。我已经遇到的一次提醒如下:
java.lang.NullPointerException at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1003) at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:955)
为办理题目,先下载struts的源码包,然后在ActionServlet.java的第1003行拔出断点,并对各变量举行监督。很丢人,我居然把struts-config.xml文件弄丢了,因而呈现了下面的非常,应该是和CVS同步时不警惕删除的。
11、“Resources not defined for Validator”
这个是使用Validator插件做验证时大概呈现的非常,这时你要反省validation.xml文件,看内里利用的资源能否的确有界说,form的称号能否准确,等等。
|