最簡例子講透for迴圈裡的return、break、continue——尋止
阿新 • • 發佈:2019-01-31
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互斥性
三者都不能在緊鄰對方的前後新增自己