java异常(二)

throw:表示也是抛出异常,抛出的一个异常对象 (throw new 异常类名() :匿名对象的方式)
 面试题:
  throws和throw的区别?
  throws:也是表示抛出异常,它后面跟的异常类名,并且可以多个异常类名中间逗号开
  举例:
  public void show() throws IoException,ClassNotFoundException{...}
  在方法上抛出,由调用者处理
  它表示抛出异常的可能性
  throw:抛出的一个异常对象
  在语句体中抛出的,由语句体进行处理

  它表示抛出异常的肯定性

举例:

public class Demo4 {
public static void main(String[] args) {
	//method();
	try {
		methor2();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}
private static void methor2() throws Exception {
	int a=10;
	int b=0;
	if(b==0) {
		throw new Exception();
	}else {
		System.out.println(a/b);
	}
	
}
private static void method() {
	int a=10;
	int b=0;
	if(b==0) {
		throw new ArithmeticException();//后面跟着一个异常对象,相当于匿名对象
	}else {
		System.out.println(a/b);
	}
	
}
}
try...catch...finally
  finally语句体是一定会执行的,除非是Jvm退出了 
 面试题:
  如果catch里面有return 语句,finally中的代码还会执行,是在return语句之前执行还是return后执行?

finally中代码是一定会执行的,是在return前

 举例:

public class Demo5 {
public static void main(String[] args) {
System.out.println(getInt());
}
private static int getInt() {
int a;
	try {
		a=10;
		System.out.println(a/0);
		a=20;
	} catch (Exception e) {
		a=30;
		return a;
	}
	finally {
		a=40;
	}
	return a;
}
}

注释:try的代码出现问题了,执行catch中的语句,30赋值a,
 return 30(已经形成了一个回路径)finally代码一定会执行(除非Jvm) a = 40 ,在fianlly外面

 有return a: a记录回路径的那个a,返回30

异常中的注意事项:
  子类继承父类的时候的注意事项 
  1)子类重写父类的方法的时候,子类的方法的抛出的异常必须要么是父类的方法异常一样,要么是父类方法异常的子类
  2)子类重写父类方法的时候,如果父类中的这个方法没有抛出异常,那么子类重写的这个方法也不能抛出异常,只能try...catch

猜你喜欢

转载自blog.csdn.net/wt5264/article/details/80439205