Java异常处理和抛出异常

程序中出现异常是难免的,所以很多的语言都设置了处理异常的方法,java也不例外。
对于异常的处理就是:

  • try语句出现异常后抛出异常
  • catch接受异常进行处理

处理异常可以根据需要,但是抛出异常有许多需要注意的地方。

1、main函数中的异常+处理

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就是空指针异常

2、处理

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("空指针异常");
		}
	}
}

然后我们会看到输出:空指针异常

3、抛出

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捕捉处理;如果最终状态还是被抛出的话,由系统自己处理:程序中断。

二、非main函数的异常+处理+抛出

以下面程序为例:

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语句并处理。

所以有两种方法:

  • 设置catch语句自行处理
  • 由函数声明抛出到main函数,由main函数处理
    如下图:
    Java异常处理和抛出异常_第1张图片catch语句的就不说了,比较简单,提一下throws出异常给main函数的
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也没有抛给系统。

下面是对应的两种处理方法:

  • main函数中catch语句处理
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("数据不合法");
		}
	}
}

上面这两种都是正确的解决方法。

你可能感兴趣的:(Java)