程序中出现异常是难免的,所以很多的语言都设置了处理异常的方法,java也不例外。
对于异常的处理就是:
处理异常可以根据需要,但是抛出异常有许多需要注意的地方。
package excep;
import java.util.ArrayList;
public class example {
public static void main(String[] args) {
ArrayList<Integer> list = null;
list.add(33);
list.add(22);
}
}
以上面的程序为例,list为引用变量,没有使用new进行空间分配,此时使用add()函数会出现异常:
Exception in thread "main" <u>java.lang.NullPointerException</u>
at excep.example.main(<u>example.java:9</u>)
NullPointerException就是空指针异常
package excep;
import java.util.ArrayList;
public class example {
public static void main(String[] args) {
ArrayList<Integer> list = null;
try {
list.add(33);
list.add(22);
}
catch(NullPointerException e){
System.out.println("空指针异常");
}
}
}
然后我们会看到输出:空指针异常
package excep;
import java.util.ArrayList;
public class example {
public static void main(String[] args) {
ArrayList<Integer> list = null;
try {
list.add(33);
list.add(22);
}
catch(NullPointerException e){
System.out.println("空指针异常");
throw e;
}
}
}
加了一个throw e语句
抛出的异常谁来处理呢,异常抛出到最后如果最终被catch且没有再被抛出,那么就是catch捕捉处理;如果最终状态还是被抛出的话,由系统自己处理:程序中断。
以下面程序为例:
package excep;
import java.util.ArrayList;
public class example {
public static void main(String[] args) {
test(4);
test(61);
test(150);
test(-100);
}
public static void test(int result) {
if(result < 60 && result >= 0) {
System.out.println("不合格");
}else if(result >= 60 && result <= 100)
System.out.println("合格");
else {
throw new Exception("数据不合法");
}
}
}
这个程序是不能正常运行的,原因是:自定义的函数中的异常抛在了内部,没有抛给可以处理异常的函数,而且没有用catch语句并处理。
所以有两种方法:
package excep;
import java.util.ArrayList;
public class example {
public static void main(String[] args) {
test(4);
test(61);
test(150);
test(-100);
}
public static void test(int result) throws Exception {
if(result < 60 && result >= 0) {
System.out.println("不合格");
}else if(result >= 60 && result <= 100)
System.out.println("合格");
else {
throw new Exception("数据不合法");
}
}
}
上面这个程序还是依然有问题的,因为虽然异常抛给了main函数,但是main函数并没有处理,main也没有抛给系统。
下面是对应的两种处理方法:
package excep;
import java.util.ArrayList;
public class example {
public static void main(String[] args) {
try {
test(4);
test(61);
test(150);
test(-100);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void test(int result) throws Exception {
if(result < 60 && result >= 0) {
System.out.println("不合格");
}else if(result >= 60 && result <= 100)
System.out.println("合格");
else {
throw new Exception("数据不合法");
}
}
}
-由main函数抛出给系统
package excep;
import java.util.ArrayList;
public class example {
public static void main(String[] args) throws Exception { //此处添加抛出语句
test(4);
test(61);
test(150);
test(-100);
}
public static void test(int result) throws Exception {
if(result < 60 && result >= 0) {
System.out.println("不合格");
}else if(result >= 60 && result <= 100)
System.out.println("合格");
else {
throw new Exception("数据不合法");
}
}
}
上面这两种都是正确的解决方法。