面试再也不怕 try catch finally 了

try catch finally 三兄弟

一、try:

  一旦产生异常,则系统会自动产生一个异常类的实例化对象。当我们觉得该语句会发生异常时,我们就放到try{ }中。

try{
//可能会发生异常的语句
}


二、catch:

  当我们的try{ }中发生了异常,我们就需要捕获它,不能什么都不做吧,至少处理一下,比如:“哈哈,我捕获到啦!!!”。处理异常就需要用到catch{ }了。

try{
//可能会发生异常的语句
} catch(Throwable e){
//处理异常e
System.out.println("哈哈,我捕获到啦!!!");
}


三、finally:

  在进行异常的处理之后,在异常的处理格式中还有一个finally语句,那么此语句将作为异常的统一出口,不管是否产生了异常,最终都要执行此段代码
  有时在try-catch语句中会占用一些非Java资源,如:打开文件、网络连接、打开数据库连接和使用数据结果集等,这些资源并非Java资源,不能通过JVM的垃圾收集收,需要程序员释放。为了确保这些资源能够被释放可以使用finally{ }

try{
//可能会生成异常语句
} catch(Throwable e1){
//处理异常e1
} finally{
//释放资源
}

  finally{ }是异常的统一出口,必然执行,面试中只要记得finally{ }肯定肯定会执行的就好了。当然啦,万事无绝对,有一种情况,finally{ }不会执行,当程序关闭的时候finally{ }就不会执行,什么时候程序会关闭呢,比如电脑停电,内存清空了,或者执行某条语句退出了,比如下面的代码:

try{
//可能会生成异常语句
} catch(Throwable e1){
	System.exit(0);//退出JVM
} finally{
//不会执行到
}


四、讨厌的return:

  面试的时候,经常会出现关于returnfinally代码块的关系,我在这也摔了不少跟头,所以我总结了以下的内容,只要记住一点还有下面的三道例题,我相信,以后再出现类似的题目,基本就是送分题来的了,哈哈哈哈哈。。。
  首先记住一点,只要不断电,fianlly代码块肯定执行。

1、例题1:return的类型是基本数据类型

public abstract class Test {
	public static void main(String[] args) {
		int a = haha();
		System.out.println(a);
	}

	private static int haha() {
		int a = 10;
		try {
			return a;//先备份a的内容,也就是10,虽然fianlly改了a,但不影响备份的内容。
		}catch(Exception e) {
			
		}finally {
			a = 20;
		}
		System.out.println("haha");
		return 0;
	}
}

  答案是10。因为先备份了a的内容,也就是10,虽然fianlly改了a,但不影响备份的内容。注意:异常块中有return或者抛出异常,则不会往下继续执行。


2、例题2:return的类型是引用

public abstract class Test {
	public static void main(String[] args) {
		Person p = new Person();
		p = haha(p);
		System.out.println(p.age);
	}

	private static Person haha(Person p) {
		p.age = 10;
		try {
			p.age = 20;
			return p; //备份的是地址
		}catch(Exception e) {
			return null;
		}finally {
			p.age = 30;	
		}
	}
}
class Person{
	int age;
}

  答案是30。因为备份的是Person对象的引用,也就是地址,fianlly改了age,影响了对象的内容。


3、例题3:finally代码块中有return

public abstract class Test {
	public static void main(String[] args) {
		int a = haha();
		System.out.println(a);
	}

	private static int haha() {
		int a = 10;
		try {
			return a;
		}catch(Exception e) {
			
		}finally {
			a = 20;
			return a;
		}
	}
}

  答案是20。因为一开始备份的是10,最后备份的是20,所以返回最近备份的值。


总结:具体return的是什么内容,要看return的位置,还有类型,只要搞清楚这两点,再加上fianlly代码块肯定会执行,就OK了。不要忘了停电哦!(◔◡◔)


哪里写得不好或者想讨论的小伙伴欢迎留言哦!

猜你喜欢

转载自blog.csdn.net/Milan_1in/article/details/106029179