1. 程式人生 > >最簡例子講透for迴圈裡的return、break、continue——尋止

最簡例子講透for迴圈裡的return、break、continue——尋止

1.測試return

List l = new ArrayList();
		l.add("0x123");
		l.add(false);
		l.add(0x345);
		l.add(null);
		l.add(025);
		
		for(int i=0;i<l.size();i++){
			try{
				System.out.println("第"+i+"次:"+l.get(i).toString());
				if(i==0){
					System.out.println("第"+i+"次:執行continue;");
					continue;//後面業務邏輯不執行,此次迴圈停止轉而繼續執行下一個迴圈邏輯
				}
				if(i==1){
//					System.out.println("第"+i+"次:執行break;");
//					break;//break只終止for迴圈,for迴圈不往後面走了
				}
			}catch(Exception e){
				System.out.printf("第"+i+"次:出錯了!",e);
				return ;//在for迴圈裡return不僅僅是終止for迴圈,而是程式終止
			}
		}
		System.out.println("for迴圈結束了");

結果:

第0次:0x123
第0次:執行continue;
第1次:false
第2次:837
第3次:出錯了!

return後整個方法結束包括裡面的for迴圈也終止了,後面不再執行

2.取消註釋break,測試break:

List l = new ArrayList();
		l.add("0x123");
		l.add(false);
		l.add(0x345);
		l.add(null);
		l.add(025);
		
		for(int i=0;i<l.size();i++){
			try{
				System.out.println("第"+i+"次:"+l.get(i).toString());
				if(i==0){
					System.out.println("第"+i+"次:執行continue;");
					continue;//後面業務邏輯不執行,此次迴圈停止轉而繼續執行下一個迴圈邏輯
				}
				if(i==1){
					System.out.println("第"+i+"次:執行break;");
					break;//break只終止for迴圈,for迴圈不往後面走了
				}
			}catch(Exception e){
				System.out.printf("第"+i+"次:出錯了!",e);
				return ;//在for迴圈裡return不僅僅是終止for迴圈,而是程式終止
			}
		}
		System.out.println("for迴圈結束了");

結果:

第0次:0x123
第0次:執行continue;
第1次:false
第1次:執行break;
for迴圈結束了
 

(1)break只是終止for迴圈不終止程式;

(2)for迴圈裡break之後的邏輯不執行,連return也不執行

例:

public static void main(String[] args) {
		final long timeInterval = 1000;
		Runnable runnable = new Runnable() {  
            public void run() {  
                while (true) {  
                    System.out.println("Hello !!");  
                    try {  
                        Thread.sleep(timeInterval);  
                    } catch (InterruptedException e) {  
                        e.printStackTrace();  
                    }  
                }  
            }  
        };
        
		List<Object> l = new ArrayList<Object>();
		l.add("0x123");
		l.add(false);
		l.add(0x345);
		l.add(null);
		l.add(025);
		l.add(new Exception());
		l.add(runnable);
		l.add(new File(""));
		l.add(false+"+");
		l.add(null+"+");
		l.add(new Exception()+"+");
		l.add(runnable+"+");
		l.add(new File("")+"+");
		l.add(0x345+025);
		System.out.println("list:"+l);
		
		for(int i=0;i<l.size();i++){
			try{
				System.out.println("第"+i+"次:"+l.get(i).toString());
				if(i==0){
					System.out.println("第"+i+"次:執行continue;");
					continue;//後面業務邏輯不執行,此次迴圈停止轉而繼續執行下一個迴圈邏輯
				}
				if(i==1){
					System.out.println("第"+i+"次:執行break;");
					break;//break只終止for迴圈,for迴圈不往後面走了
				}
				System.out.println("執行完第"+i+"次迴圈");
				return;
			}catch(Exception e){
				System.out.printf("第"+i+"次:出錯了!",e);
				return ;//在for迴圈裡return不僅僅是終止for迴圈,而是程式終止
			}
		}
		System.out.println("for迴圈結束了");
	}

結果:

第0次:0x123
第0次:執行continue;
第1次:false
第1次:執行break;
for迴圈結束了

(3)for迴圈裡緊鄰break之後不能新增程式碼,連新增return都不行;

3.continue

(1)continue不終止for迴圈更不終止程式,而是終止(跳過)此次迴圈,轉而進入下一次迴圈

(2)執行continue時,for迴圈裡continue後的邏輯不執行,連return也不執行;

例:

public static void main(String[] args) {
		final long timeInterval = 1000;
		Runnable runnable = new Runnable() {  
            public void run() {  
                while (true) {  
                    System.out.println("Hello !!");  
                    try {  
                        Thread.sleep(timeInterval);  
                    } catch (InterruptedException e) {  
                        e.printStackTrace();  
                    }  
                }  
            }  
        };
        
		List<Object> l = new ArrayList<Object>();
		l.add("0x123");
		l.add(false);
		l.add(0x345);
		l.add(null);
		l.add(025);
		l.add(new Exception());
		l.add(runnable);
		l.add(new File(""));
		l.add(false+"+");
		l.add(null+"+");
		l.add(new Exception()+"+");
		l.add(runnable+"+");
		l.add(new File("")+"+");
		l.add(0x345+025);
		System.out.println("list:"+l);
		
		for(int i=0;i<l.size();i++){
			try{
				System.out.println("第"+i+"次:"+l.get(i).toString());
				if(i==0){
					System.out.println("第"+i+"次:執行continue;");
					continue;//後面業務邏輯不執行,此次迴圈停止轉而繼續執行下一個迴圈邏輯
				}
				if(i==1){
//					System.out.println("第"+i+"次:執行break;");
//					break;//break只終止for迴圈,for迴圈不往後面走了
				}
				System.out.println("執行完第"+i+"次迴圈");
				return;
			}catch(Exception e){
				System.out.printf("第"+i+"次:出錯了!",e);
				return ;//在for迴圈裡return不僅僅是終止for迴圈,而是程式終止
			}
		}
		System.out.println("for迴圈結束了");
	}

結果:

第0次:0x123
第0次:執行continue;
第1次:false
執行完第1次迴圈

(3)for迴圈裡緊鄰continue後不能新增程式碼,連新增return都不行。

4.終止程度排行:return > break > continue

5.三者return、break、continue互斥性

三者都不能在緊鄰對方的前後新增自己