關(guān)于Java中增強for循環(huán)使用的注意事項
序言
for循環(huán)語句是java循環(huán)語句中最常用的循環(huán)語句,一般用在循環(huán)次數(shù)已知的情況下使用。for循環(huán)語句的語法格式如下:
java語言 for語句的用法
for(初始化表達(dá)式;循環(huán)條件;操作表達(dá)式){
執(zhí)行語句
……
}
開發(fā)過程中,使用for循環(huán)遍歷集合或數(shù)組是司空見慣的一件事,大家也習(xí)慣這樣操作,但是有時候為了簡便,我們可能會使用增強for循環(huán),也就是類似for(String s : strList )寫法,但是有時候稍有不慎,可能會帶來一些莫名奇妙的錯誤,比如ConcurrentModificationException,剛開始可能大家也會一頭霧水,反復(fù)檢查代碼并沒有發(fā)現(xiàn)有什么寫的不對的地方。確實,代碼并沒有問題,只是使用增強for循環(huán)的時候,有些注意事項需要我們清楚,本文主要針對開發(fā)中遇到的問題和代碼示范下增強for的錯誤用法。
代碼示例
1.錯誤寫法
if(fileList.size() > 0){ for(UserFile userFile : fileList){ if(Constants.IS_DIR_YES == userFile.getIsDir()){//如果是文件夾,遞歸查找子文件,然后放入返回的結(jié)果list中 childFileList = getChildFile(userFile.getId()); if(childFileList.size() > 0){ for(UserFile childUserFile : childFileList){ //給子文件賦予上一級的文件夾路徑 childUserFile.setFilePath("/" + userFile.getFileName() + childUserFile.getFilePath()); fileList.add(childUserFile); } } } } }
2.正確寫法
if(fileList.size() > 0){ for (int i = 0; i < fileList.size(); i++) { if(Constants.IS_DIR_YES == fileList.get(i).getIsDir()){//如果是文件夾,遞歸查找子文件,然后放入返回的結(jié)果list中 childFileList = getChildFile(fileList.get(i).getId()); if(childFileList.size() > 0){ for (int j = 0; j < childFileList.size(); j++) { //給子文件賦予上一級的文件夾路徑 childFileList.get(j).setFilePath("/" + fileList.get(i).getFileName() + childFileList.get(j).getFilePath()); fileList.add(childFileList.get(j)); } } } } }
3.寫法區(qū)別及報錯原因
區(qū)別:主要是將錯誤寫法中的增強for循環(huán)換成普通的for循環(huán),如圖所示
原因分析:增強for循環(huán)其實內(nèi)部是通過迭代器實現(xiàn)的,我們知道在迭代器中,迭代的時候不允許修改集合中的對象,不然會拋出ConcurrentModificationException異常。而我們的錯誤代碼中,對fileList集合調(diào)用了fileList.add(childUserFile)方法往集合中添加新元素,而迭代器卻不知道,所以也會報這樣的錯誤信息。實際上,增加for循環(huán)或迭代器遍歷元素的時候,是不能通過集合修改元素的,改成普通for循環(huán)就行了。
總結(jié)
到此這篇關(guān)于Java中增強for循環(huán)使用的注意事項的文章就介紹到這了,更多相關(guān)Java增強for循環(huán)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實現(xiàn)線程安全單例模式的五種方式的示例代碼
這篇文章主要介紹了Java中實現(xiàn)線程安全單例模式的五種方式:餓漢式、枚舉單例、懶漢式、DCL懶漢式和靜態(tài)內(nèi)部類懶漢單例,感興趣的可以了解一下2022-03-03java正則表達(dá)式如何獲取xml文件中指定節(jié)點的值
這篇文章主要介紹了java正則表達(dá)式如何獲取xml文件中指定節(jié)點的值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06Java 注冊時發(fā)送激活郵件和激活的實現(xiàn)示例
這篇文章主要介紹了Java 注冊時發(fā)送激活郵件和激活的實現(xiàn)示例的相關(guān)資料,需要的朋友可以參考下2017-07-07