Java中return,break,continue用法總結

Java中return的作用

Java編程思想:第四版》介紹:return語句作爲一個無條件的分支,無需判斷條件即可發生。

return語句主要有兩個用途:一是用來表示一個方法返回的值(假定沒有void返回值)。二是指它導致該方法退出,並返回那個值。根據方法的定義,每一個方法都有返回類型,返回類型可以是基本類型或引用類型。同時每個方法都必須有個結束標誌,因此,就出現了return。當方法的返回類型爲void時,有個隱含的return語句,可以省略不寫。

return語句和其他控制結束語句的區別

Java中結束語句主要有四類:return,break,continue。

(1)return語句:是指結束該方法,繼續執行方法後的語句。

java中break和continue可以跳出指定循環,break和continue之後不加任何循環名則默認跳出其所在的循環,在其後加指定循環名,則可以跳出該指定循環(指定循環一般爲循環嵌套的外循環)。

(2)break語句:是指在循環中直接退出循環語句(for,while,do-while,foreach),break之後的循環體裏面的語句也執行。

(3)continue語句:是指在循環中中斷該次循環語句(for,while,do-while,foreach),本次循環體中的continue之後語句不執行,直接跳到下次循環。

break在for循環語句中的使用

使用break的場景有兩種:一、switch語句中。二、循環語句。

這裏主要說一下break在循環中的應用。

first:for(int j=0; j<5; j++){
    second:for(int i=0; i<5; i++){
        if(i == 0){
            System.out.println(i);
            break first;
        }
    }
    System.out.println("跳出1層for循環到這啦");
    if(j == 0){
        System.out.println("終結者");
        break;
    }
}

輸出結果:0

首先 外層循環 j=0,進入內層循環 i=0,此時輸出i的值爲0。跳出外層循環,所以外層循環中後面的輸出語句及判斷j=0的語句都不會執行。

 

 loop1:for(int x = 0; x < 4; x++)
        {
            loop2:for (int y = 0; y < 5 ; y++ )
            {
                System.out.println("x="+x+",y="+y);
                if (y==2)
                {
                    break loop1;
                }
            }
        }
x=0,y=0
x=0,y=1
x=0,y=2

continue在for循環語句中的使用

continue跳出指定循環示例代碼:

loop1:for(int x = 0; x < 4; x++)
        {
            loop2:for (int y = 0; y < 5 ; y++ )
            {    if (x==2)
                {
                    continue loop1;
                }
                System.out.println("x="+x+",y="+y);
            }
        }

輸出結果

x=0,y=0
x=0,y=1
x=0,y=2
x=0,y=3
x=0,y=4
x=1,y=0
x=1,y=1
x=1,y=2
x=1,y=3
x=1,y=4
x=3,y=0
x=3,y=1
x=3,y=2
x=3,y=3
x=3,y=4

return在try-catch-finally語句中的使用

若在 try或catch語句裏面有return語句,finally語句和return語句的執行順序問題:

若有finally語句,則無論如何,都會執行該語句,在try或catch中的return語句會將它的返回值壓入棧內,然後執行finally語句。

當finally執行完成後,若finally語句裏有return語句,則執行return語句並結束。

若finally沒有return語句,則返回被保存的棧裏的return語句,再執行。

在壓棧時候,要注意壓入棧內的值的類型,若是引用類型則引用的值會改變(如下面的案例3),若是變量值,則不會改變(如下面的案例1)。

案例1

public class TestFinally1 {
    public static void main(String[] args) {
        System.out.println("test1:" + testFinally1());
    }

    static int testFinally1() {
        int i = 1;
        try {
            return i;
        } finally {
            System.out.println("in testFinally1():finally 肯定執行");
            i = 48;
        }
    }
}

在testFinally1()中,return i;會將結果i的值,也就是1壓入棧。

即使在finally中將i修改了(i=48),也不回對已經壓入棧裏的1造成任何影響。

輸出結果

in testFinally1():finally 肯定執行
test1:1

案例2

public class TestFinally2 {
    public static void main(String[] args) {
        System.out.println("test2:" + testFinally2());
    }


    static String testFinally2() {
        String str = "try";
        try {
            return str;
        } finally {
            System.out.println("in testFinally2():finally 肯定執行");
            str = "finally";
        }
    }
}

 在testFinally2()中,return str;將str的內容壓入棧,假設str的內容爲0x108(只是一個地址值),通過這個地址值可以找到"try",那棧裏的內容就是0x108。執行str = "finally",此時str變量的內容可能變爲0x237了,這是串"finally"的地址。

方法調用結束後,return時壓入棧裏的0x108。所以在打印結果時,打印的是通過0x108找到的字符串"try"。

輸出結果

in testFinally2():finally 肯定執行
test2:try

案例3

public class TestFinally3 {
    public static void main(String[] args) {
        System.out.println("test3:" + testFinally3());
       
    }

    
 

    static StringBuilder testFinally3() {
        StringBuilder build = new StringBuilder("try ");
        try {
            return build;
        } finally {
            System.out.println("in testFinally3():finally 肯定執行");
            build.append("finally");
            build = new StringBuilder("你猜我是誰!");
        }
    }
}

在testFinally3 ()中,return 壓棧的是build變量的值,比如是0x3579,通過這個值可以找到StringBuilder對象。

finally語句塊中對這個對象的內容進行了修改。build = new StringBuilder("你猜我是誰!");讓build變量指向了一個新的對象,這時候build的值可能是0x4579了。但是,原來的StringBuilder對象仍然在0x3579處,而壓棧的正是0x3579啊!方法返回後,得到的返回值0x3579,通過這個引用值找到相應的StringBuilder對象,所以打印的結果是test3:try finally。
 

輸出結果

in testFinally3():finally 肯定執行
test3:try finally

案例4

public class TestFinally4 {
    public static void main(String[] args) {
        System.out.println("test4:" + testFinally4());
    }

   static String testFinally4() {
        try {
            return "return in try";
        } finally {
            System.out.println("in testFinally4():finally 肯定執行");
            return "return in finally";
        }
    }
}

在testFinally4()中,finally有return語句,直接返回,方法結束。

輸出結果

in testFinally4():finally 肯定執行
test4:return in finally

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章