JAVA高级基础(23)---异常的处理(二)

版权声明:如需转载请标明出处 https://blog.csdn.net/yj201711/article/details/84834997

对于异常的默认处理

结束程序执行,并输出异常信息(  异常堆栈信息e.printStackTrace()  ),使用  try{}catch(){ } 当异常发生的时候,执行对异常的处理,程序会继续顺序执行。

在执行多个异常的捕获的时候

在异常捕获时,使用多态

在jdk7的新形式中,不能将异常的子类直接和exception进行相或处理,可以使用传统的多个catch块来进行处理

返回越小的异常类型应该尽可能的处于最上的位置;返回越大的异常类型应该处于后边的位置

package org.lanqiao.exception.demo;

public class ExceptionDemo1 {
	public static void main(String[] args) {
		int[] arr = {2,1,3,5,7};
		int a = 10;
		int b = 0;
		System.out.println("除法运算开始");
		try {
			System.out.println(arr[2]);
			System.out.println("除法运算的结果为:" + a/b);
		}/*catch(ArithmeticException |ArrayIndexOutOfBoundsException e ) {
			if(e instanceof ArrayIndexOutOfBoundsException) {
				System.out.println("数组下标越界");
				
			}else if(e instanceof ArithmeticException) {
				System.out.println("除数不能为0");
				
			}
			
		}*/
		catch(ArithmeticException e) {
			
			System.out.println("除数不能为0");
		}catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("数组下标越界");
			
		}catch(Exception e) {
			
			
		}
		
		System.out.println("除法运算结束");
	}
}

finally块

无论程序是否发生异常,都需要执行的代码。

  1. 在通过程序去链接数据库的时候,无论访问是否成功,都需要将链接释放掉
  2. 在IO操作中,最终都需将IO流关闭

当在  try{}catch(){}finally{} 结构中,如果 try 块 中存在  return语句,那么finally块还会执行吗?如果执行,实在return之前还是return之后呢?(面试题)

答:(没有异常发生)finally一定会执行,并且时在return之前执行。
       (如果发生了异常) finally 一定会执行 但是return不会执行了
       (当异常发生之后,发生异常的语句之后(在同一个try{}之内的)的语句都不会执行)

package org.lanqiao.exception.demo;

public class FinallyDemo {
	public static void main(String[] args) {
		int a = 10;
		int b = 0;
		int c = 0;
		try {
			
			c = a / b ;
		}catch(ArithmeticException e) {
			String message = e.getMessage();
			System.out.println(message);
			//e.printStackTrace();
			/*
			 * java.lang.ArithmeticException: / by zero
				at org.lanqiao.exception.demo.FinallyDemo.main(FinallyDemo.java:10)
			 */
		}
		
		
		/*System.out.println(c);//标准输出流
		System.err.println(c);//就是错误输出流
*/		
	}
}

猜你喜欢

转载自blog.csdn.net/yj201711/article/details/84834997