• try finally 执行顺序


    class Exc{
    	int a;
    	int b;
    }
    
    
    public class Except {
    	@SuppressWarnings("finally")
    	static int   compute (){
    		Exc e = new Exc();
    		e.a = 10;
    		e.b = 10;
    		int res = 0 ;
    		try{
    			res = e.a / e.b;
    			System.out.println("try ……");
    			return res + 1;
    			
    		}catch(NullPointerException e1){
    			System.out.println("NullPointerException occured");
    		}catch(ArithmeticException  e1){
    			System.out.println("ArithmeticException occured");
    		}catch(Exception e3){
    			System.out.println("Exception occured");
    		}finally{
    			System.out.println("finnaly occured");
    		}
    		System.out.println(res);
    		
    		return res+3;
    	}
    	
    	public static void main(String[] args){
    		int b =  compute();
    		System.out.println("mian b= "+b);
    	}
    }
    

      输出:

    try ……
    finnaly occured
    mian b= 2

    结论: 如果没有异常, 则执行try 中的代码块,直到 try 中的 return,接着执行 finally 中的代码块,finally 执行完后 , 回到try 中执行 return 。退出函数。

    class Exc{
    	int a;
    	int b;
    }
    
    
    public class Except {
    	@SuppressWarnings("finally")
    	static int   compute (){
    		Exc e = new Exc();
    //		e.a = 10;
    //		e.b = 10;
    		int res = 0 ;
    		try{
    			res = e.a / e.b;
    			System.out.println("try ……");
    			return res + 1;
    			
    		}catch(NullPointerException e1){
    			System.out.println("NullPointerException occured");
    		}catch(ArithmeticException  e1){
    			System.out.println("ArithmeticException occured");
    		}catch(Exception e3){
    			System.out.println("Exception occured");
    		}finally{
    			System.out.println("finnaly occured");
    		}
    		System.out.println(res);
    		
    		return res+3;
    	}
    	
    	public static void main(String[] args){
    		int b =  compute();
    		System.out.println("mian b= "+b);
    	}
    }
    

      输出:

    ArithmeticException occured
    finnaly occured
    0
    mian b= 3

    结论: 如果try 中有异常, 则在异常语句处,跳转到catch 捕获的异常代码块, 执行完 catch 后,再执行 finally ,跳出 try{}catch{}finally{} ,继续向下执行,不会去执行try中 后面的语句。

    public class Test2 {
    	public static void main(String [] args){
    		System.out.println(com());
    	}
    	
    	@SuppressWarnings("finally")
    	static boolean com(){
    		try{
    			return true;
    		}finally{
    			return false;
    		}
    		
    	}
    }
    

      输出 false

    public class Test3 {
        public static void main(String[] args){
            try{
                System.out.println("try……");
                System.exit(0);
            }finally{
                System.out.println("finally……");
            }
        }
    }

    输出: 

    try……  程序退出,不执行 finally

  • 相关阅读:
    流程控制值while 循环
    编程语言和变量
    计算机1&操作系统硬件
    使用 Cygwin 在 Windows 中使用 Linux 命令
    windows系统安装mysql及导库
    linux报错 OSError: [Errno 24] Too many open files
    python3报错ModuleNotFoundError: No module named 'Queue'
    mac版本intellij idea默认快捷键
    mysql初设密码及允许远程访问
    PyCharm 图标 c、m、F、f、v、p 分别代表什么含义?
  • 原文地址:https://www.cnblogs.com/z360519549/p/7128587.html
Copyright © 2020-2023  润新知