上一篇,我们介绍了Throws抛出异常,也使用了throw语句,这篇先来看看两者区别,然后在看看finally关键字的基本用法。
1.throw的概述
在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,用throw把异常对象抛出。看看下面代码的throw后面跟的是一个new Exception对象。
public void setAge(int age) {
if(age>0 && age < 150) {
this.age = age;
} else {
throw new RuntimeException("年龄非法");
}
}
主要throw后面抛出的是异常对象。
2.throws和throw的区别
观察下面代码,来总结下throws和throw的区别。
public void setAge(int age) throws Exception {
if(age>0 && age < 150) {
this.age = age;
} else {
throw new Exception("年龄非法");
}
}
throws:
1)用在方法声明后面,跟的是异常类名。
2)可以跟多个类名,用逗号隔开
3)表示抛出异常由该方法的调用者来处理。
throw:
1)在方法体内,跟的是异常对象名。
2)只能抛出一个异常对象名
3)表示抛出异常由该方法体内语句处理。
3 finally使用
1)finally的特点
--被finally控制的语句体一定会被执行
--特殊情况,在执行到finally之前,JVM退出了,例如System.exit(0)
2) finally的作用
--用来释放资源,在文件IO流和数据库操作经常使用。
3) 代码演示
package exception;
public class Demo1_Finally {
public static void main(String[] args) {
try {
System.out.println(1/0);
} catch (Exception e) {
System.out.println("除数为零了");
} finally {
System.out.println("看看我是否执行了");
}
}
}
运行结果:
除数为零了
看看我是否执行了
然后把1/0改成10/2,然后继续测试运行代码。
5
看看我是否执行了
所以,不管是否出现了异常,在finally的代码块一定会被执行。
package exception;
public class Demo1_Finally {
public static void main(String[] args) {
try {
System.out.println(10/0);
} catch (Exception e) {
System.out.println("除数为零了");
System.exit(0);
} finally {
System.out.println("看看我是否执行了");
}
}
}
当执行走catch分支的时候,在里面添加了退出JVM操作,结果finally就不会被执行。