package frank;
import java.lang.*;
/**
* java异常处理finally
* 当在try或者catch里面遇到了return或者throw语句,系统会立即寻找finally语句块,如果找了finally块,系统会立即执行,执行完成后然后在返回来执行return或者throw语句,但是如果finally里面也有return或者throw那么就会立即停止方法,从而不会跳转到try或者catch里面,使return或者throw语句无法执行到
* 完整的异常处理块可以放在任何地方,但是不要嵌套太多,这样子就会影响可读性。try后面可以没有catch和finally块。也可以跟多个catch和一个finally
* */
public class App
{
public static void main(String[] args)throws Exception
{
/*
try
{
String sa = args[0];
}
catch(Exception e)
{
System.out.println(e);
//System.exit(1);//退出虚拟机,finally将不会执行
return;//就算定义了return让程序强制退出方法,但是也会执行finally里面的代码。
}
finally
{
//始终会执行一次
System.out.println("1");
//return false; 最好不要在finally里面写return语句,因为它会覆盖try或者catch里面的reutrn语句,从而使返回结果不正确。
}*/
System.out.println(get(args));//心里想着会输出false,但是实际确实输出的finally里面的true。
}
static boolean get(String[] args)
{
try
{
String sa = args[0];
}
catch(Exception e)
{
System.out.println(e);
//System.exit(1);//退出虚拟机,finally将不会执行
return false;//就算定义了return让程序强制退出方法,但是也会执行finally里面的代码。
}
finally
{
//始终会执行一次
System.out.println("1");
return true; //最好不要在finally里面写return语句,因为它会覆盖try或者catch里面的reutrn语句,从而使返回结果不正确。
}
}
static void autoClose()
{
//java 7里面对try进行了改进,允许在try后面跟小括号()里面对一些资源对象的初始化,当try结束后自动的执行对象的关闭方法,所以对象必须实现AutoCloseable或者Closeable接口。所以不用在finally里面释放资源了。
/*
try(
BufferedReader br = new BufferedReader(new FileReader("1.txt"));
PrintStream ps = new PrintStream(new FileOutputStream(a.txt));
)
{
}
catch()
{
}
*/
}
}