Java中测试基本异常1、第一个JAVA例程:hello world执行时的问题:problems Executing Hello如果你看到下面的错误提示:'java' is not recognized as an internal or external command, ...orjava: Command not found.那么你或许没有安装java或者在环境变量中并没有设置path路径java\bin目录。
请检查你的java安装以及环境变量的正确设置。
如果你看到:Exception in thread "main" ng.NoClassDefFoundError: hello(wrong name: Hello) ...那么你很有可能是因为没有注意大小写或是把名称中的字母打错了。
如:java hello键入正确的命令重新运行即可。
如果你看到:Exception in thread "main" ng.NoClassDefFoundError: Hello/class那么你需要考虑是否去掉名字中的.class部分。
2、分析出现ng.NoClassDefFoundError异常的具体情况这个问题在上面调试第一个例程出现过,但是如果我们输入的名称是正确的,仍然提示这样的问题时怎么办呢?装了JDK1.4.0版,而且JAVA_HOME,PATH和CLASSPATH都设置好了。
如下JAVA_HOME=/home/jdkCLASSPATH=$JAVA_HOME/jre/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jre/lib/:$JAVA_ HOME/libPATH=$PATH:$JAVA_HOME/bin用JAVAC命令生成了hello.class,当使用java hello时,仍然提示:Exception in thread "main" ng.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 均从ng.Exception 继承而来,而Runtime Exception 则继承ng.RuntimeException 或ng.Error (实际上ng.RuntimeException 的上一层也是ng.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错误:ng.Error原因:1)对系统所访问外部资源,未执行关闭操作,导致外部资源大量浪费,最终可能导致系统无法正常运行;2)对系统所访问的外部资源关闭次数太多,外部系统无法正常处理;3)系统访问的外部资源出现异常情况。
解决方案:1)访问外部资源前,首先检查该资源(如数据库)是否可正常连接或操作。
2)访问外部资源时,如果进行了连接,一定进行关闭操作,并仅进行一次关闭操作。
3)尽量在同一操作中共享外部资源,以减少该操作对资源的消费,提高程序的执行效率5、空指针错误:ng.NullPointerException使用基本的JAVA数据类型,变量的值要么已经是默认值,如果没有对其正常赋值,程序便不能通过编译,因此使用基本的JAVA数据类型(double,float,boolean,char,int,long)一般不会引起空指针异常。
由此可见,空指针异常主要跟与对象的操作相关。
下面先列出了可能发生空指针异常的几种情况及相应解决方案:不管对象是否为空就直接开始使用。
(JSP)代码段1:out.println(request.getParameter("username"));描述:代码段1的功能十分简单,就是输出用户输入的表域"username"的值。