关于try…catch中的finally子句:
1.在finally子句中的代码是最后执行的,并且是一定会执行的,即使try语句块中的代码出现了异常,
finally子句必须和try一起出现,不能单独编写
2.finally语句通常使用在哪些情况下?
通常在finally语句中完成资源的释放/关闭。因为finally中的代码比较有保障。
即使try语句块中的代码出现异常,finally中代码也会正常运行。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class ExceptionTest10{
public static void main(String[] args){
FileInputStream fis = null; //声明位置放到try外面,这样在finally中才能用
try{
//创建输入流对象
FileInputStream Fis = new FileInputStream("D:\\course\\01-开课\\学习方法.txt");
String s = null;
//这里一定会出现空指针异常!
s.toSting();
//流使用完需要关闭,因为流是占用资源的
//即使以上程序出现异常,流也必须要关闭
//放在这里有可能流管不了
// fis.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}catch(NullPointerException e){
e.printStackTrace();
}finally{
//流的关闭放在这里比较保险
//finally中的代码是一定会执行的
//即使try中出现了异常
if(fis!=null){ //避免空指针异常!
try{
//close方法有异常,采用捕捉的方式
fis.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}
}
finally语句
放在finally中的语句块中的代码是一定执行的。
public class ExceptionTest11{
public static void main(String[] args){
/*
try和finally,没有catch可以吗?可以
try不能单独使用
try finally可以联合使用
以下代码的执行顺序:
先执行try…
再执行finally….
最后执行return(return语句只要执行方法必然结束)
*/
try{
System.out.println("try…");
return;
}finally{
//finally中的语句会执行。能执行到
System.out.println("finally…");
}
//这里不能写语句,因为这个代码是无法执行到的
//System.out.println("Hello World");
}
}
public class ExceptionTest02{
public static void main(String[] args){
try{
System.out.println("try…");
//退出JVM
System.exit(0); //退出JVM之后,finally语句中的代码就不执行了)
}finally{
System.out.println("finally…");
}
}
}
final finally finalize有什么区别?
final关键字
final修饰的类无法继承
final修饰的方法无法覆盖
final修饰的变量不能重新赋值
finally 关键字
和try联合使用,finally语句块中的代码是必须执行的
finalize标识符
是一个Object类中的方法名
这个方法是由垃圾回收器GC负责调用的。
public class ExceptionTest14{
public static void main(String[] args){
//final是一个关键字,表示最终的,不变的
final int i=100;
//finally也是一个关键字,和try联合使用,使用在异常处理机制中
//在finally语句块中的代码是一定会执行的。
try{
}finally{
System.out.println("finally…");
}
//finalize()是Object类中的一个方法,作为方法名出现。
//所以finalize是标识符
//finalize()方法是JVM的GC垃圾回收器负责调用
Object obj;
}