恩 return执行时 try finnally的影响,跟加了system.exit()后的变化。
分析:try catch的语句块在执行之后不直接完成响应,而是去finally做完相应的操作.加上system.exit(0)则表示执行到此程序立即终止。如果想要在终止前做点什么 可以定义一个不开启的新thread去完成相应的工作,必须也在exit句之前去完成。
其实也没什么,遇到问题写个代码run一下。然后根据结果google 查阅相应的资料分析就好了。不要想当然就OK.
package demo;
public class sf {
public static void main(String[]args){
System.out.println(tryFinallyTest0(3));
System.out.println(tryFinallyTest0(-2));
//tryFinallyTest1();
//tryFinallyTest2();
//tryFinallyTest3();
//tryFinallyTest4();
}
public static int tryFinallyTest0(int n){
try{
if(n>1)
return -5;
else throw new Exception();
}catch(Exception e){
return 5;
}
finally{
return 0;
}
}
public static void tryFinallyTest1(){
try{
System.out.println("finish");
System.exit(0);
}finally{
System.out.println("finishedTag");
}
}
public static void tryFinallyTest2(){
try{
System.out.println("finish");
System.exit(0);
}finally{
System.out.println("finishedTag");
}
}
public static void tryFinallyTest3(){
Runtime.getRuntime().addShutdownHook(new Thread(){
public void run(){
System.out.println("finishedTag");
}
});
try{
System.out.println("finish");
}finally{
}
System.exit(0);
}
public static void tryFinallyTest4(){
try{
System.out.println("finish");
System.exit(0);
}finally{
Runtime.getRuntime().addShutdownHook(new Thread(){
public void run(){
System.out.println("finishedTag");
}
});
}
}
}