javase--异常

1、常见的异常

空指针异常:NullPointException
算术异常:AirthmeticException
数组越界异常:IndexOutOfBoundsException
字符串下标越界异常:StringIndexOutOfBoundsException
输入输出异常:IOException
空堆栈异常:EmptyStackException
中断故障异常:InterruptedException

2、 什么是异常

异常是程序运行时产生的错误,异常是一个方法向外输出讯息的除返回值和参数以外的另一种方式,它用于向上级调用者返回错误讯息。

3、 处理异常

1、采用try-catch-finally
通常执行顺序:
try有异常的时候:try-catch-finally
try没有异常的时候:try-finally

public class Test {
	public static void main(String[] args) {
		/*
		 * try 块中存放可能发生异常的代码。
		 * 如果执行完try且不发生异常,则接着去执行finally块和finally后面的代码。
		 * 如果发生异常就会去执行catch的语句,try-catch-finally三者里的局部变量不共享
		 */
		try {
		int i=3;
		System.out.println(i/0);
	}
	/*
	*可以存在多个catch语句,每一个catch语句用于捕获并处理一个特定的异常     
	*/
		catch (Exception e) {
		System.out.println(e.getMessage());
	}
		finally{
			System.out.println("不论是否有异常,这个语句一定会执行");
		}
	}
}

输出结果:
在这里插入图片描述
2、throw
throw:抛出异常,一般在函数代码块内部,处理的时候有两种方式,要么自己捕获异常(也就是try catch进行捕捉),要么声明抛出一个异常(就是throws 异常)。注意:throw一旦进入被执行,程序立即会转入异常处理阶段,后面的语句就不再执行,而且所在的方法不再返回有意义的值!

public class Test {
	public static void main(String[] args) {
		People people=new People();
		people.setAge(5960);
		people.getAge();
	}
}
class People{
	private int age;

	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		if(age>=0&&age<18)
			System.out.println("未成年人");
		else if (age>=18&&age<150) {
			System.out.println("成年人");
		}
		else {
			//System.out.println("年龄输入不符...");
//但此时,仍然存在一个缺点,编写Test类的程序员并不能发现错在哪里,应该怎么改,这时,就用到了throw。
		throw new NullPointerException("年龄范围不符合...");
		}
		this.age = age;
	}	
}

在这里插入图片描述
点击at test01.People.setAge(Test.java:28)会到 throw new NullPointerException(“年龄范围不符合…”);的位置,可以看出是什么异常
点击at test01.Test.main(Test.java:7)会到 people.setAge(5960);修改你的异常
3、throws:可能抛出异常的声明,用在声明方法时,表示该方法可能要抛出异常。
为什么要在声明方法抛出异常?
答:方法是否抛出异常与方法返回值的类型一样重要。假设方法抛出异常却没有声明该方法将抛出异常,那么客户程序员可以调用这个方法而且不用编写处理异常的代码。那么,一旦出现异常,那么这个异常就没有合适的异常控制器来解决。

throw与throws的比较
1、throws出现在方法函数头;而throw出现在函数体。
2、throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
3、两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

发布了45 篇原创文章 · 获赞 38 · 访问量 2145

猜你喜欢

转载自blog.csdn.net/qq_44830627/article/details/105116518