1. 程式人生 > >try{}catch{}finally{}返回值的比較

try{}catch{}finally{}返回值的比較

注意:以下結果為實際執行結果,結論純屬個人觀點,如有錯誤,請各位大神前輩在評論區留言,看到此文的小夥伴可以去評論區檢視留言,避免陷入誤區。

1. 

private static int add() {
        int x = 1;
        try {
            x++;
            System.out.println("try--"+x);
            return x;
        }catch(Exception e) {
            System.out.println("catch--"+x);
            return x;
        }finally {
            x++;
            System.out.println("finally--"+x);
        }
    }
    
    public static void main(String[] args) {
            System.out.println("return--"+add());
    }

執行結果:

try--2 finally--3 return--2

個人觀點:

finally塊裡的程式碼不會影響try塊裡的返回值。

 2.

private static int add() {
        int x = 1;
        try {
            x++;
            return x++;
        }catch(Exception e) {
            System.out.println("catch--"+x);
            return x;
        }finally {
            x++;
            System.out.println("finally--"+x);
        }
    }
    
    public static void main(String[] args) {
            System.out.println("return--"+add());
    }

   執行結果:

finally--4 return--2 

private static int add() {
        int x = 1;
        try {
            x++;
            return ++x;
        }catch(Exception e) {
            System.out.println("catch--"+x);
            return x;
        }finally {
            x++;
            System.out.println("finally--"+x);
        }
    }
    
    public static void main(String[] args) {
            System.out.println("return--"+add());
    } 

執行結果:

finally--4 return--3 

個人觀點:

雖然與本次討論的問題無關,但需要稍微注意一下,x++和++x的區別。  

3.

private static int add() {
        int x = 1;
        try {
            x++;
            return ++x;
        }catch(Exception e) {
            System.out.println("catch--"+x);
            return x;
        }finally {
            x++;
            System.out.println("finally--"+x);
            return x;
        }
    }
    
    public static void main(String[] args) {
            System.out.println("return--"+add());
    } 

執行結果:

finally--4 return--4 

編譯器提示:

finally block does not complete normally,在本文最後會解釋。

private static int add() {
        int x = 1;
        try {
            x++;
            throw new RuntimeException();
        }catch(Exception e) {
            System.out.println("catch--"+x);
            return x;
        }finally {
            x++;
            System.out.println("finally--"+x);
            return x;
        }
    }
    
    public static void main(String[] args) {
            System.out.println("return--"+add());
    }

 執行結果:

catch--2 finally--3 return--3

編譯器提示:

finally block does not complete normally,在本文最後會解釋。

個人觀點:

如果finally塊裡有return語句,會替代try塊或者catch塊裡的return,成為方法的返回語句。

 private static int add() {
        int x = 1;
        try {
            x++;
            System.out.println("try--"+x);
        }catch(Exception e) {
            x++;
            System.out.println("catch--"+x);
        }finally {
            x++;
            System.out.println("finally--"+x);
        }
        return x;
    }
    
    public static void main(String[] args) {
            System.out.println("return--"+add());
    }

執行結果:

try--2 finally--3 return--3 

private static int add() {
		int x = 1;
		try {
			x++;
			System.out.println("try--"+x);
			throw new RuntimeException();
		}catch(Exception e) {
			x++;
			System.out.println("catch--"+x);
		}finally {
			x++;
			System.out.println("finally--"+x);
		}
		return x;
	}
	
	public static void main(String[] args) {
			System.out.println("return--"+add());
	}

try--2 catch--3 finally--4 return--4

個人觀點:

1.try{}catch{}finally{}如果都沒有return語句,程式碼會一直執行到後面的返回語句。

2.程式碼會順序執行所有沒有異常的語句,知道程式碼結束或return語句。 

在上述過程中,當finally塊的包含return語句時,編譯器會顯示警告,有篇部落格對此做了解釋,較好,本文不再贅述,放上鍊接: