摘要:已知常用子接口實現該接口的類可以成為語句的目標唯一方法返回一個在一組類型的元素上進行迭代的迭代器。使用遍歷對象判斷是否存在下一個元素獲取下一個元素移除該元素為類專門創建的接口。
6 Iterable
已知常用子接口:Collection
實現該接口的類可以成為foreach 語句的目標
Listlist = new ArrayList (); for(List item : list){ do something... }
唯一方法:Iterator
//使用Iterator7 Readable: 為Scanner類專門創建的接口。遍歷Collection對象 List list = new ArrayList (); for (int i = 0; i < 10; i++) { list.add(i); } Iterator iterator = list.iterator(); while(iterator.hasNext()){ //判斷是否存在下一個元素 int itme = (int) iterator.next(); //獲取下一個元素 System.out.println(itme); iterator.remove(); //移除該元素 }
實例化一個Scanner對象,構造方法的入參可以是任何實現了Readable接口的類的對象,該類實現Readable接口的read()方法,當調用Scanner對象的next()方法時,講使用自己實現的read()方法。
package com.heisenberg.Learn; import java.nio.CharBuffer; import java.util.Scanner; import static java.lang.System.*; public class Test implements Readable{ private int readCount = 1;//read()執行次數 private int loopCount = 1; public Test() { } public int read(CharBuffer cb) { if (loopCount == 1){ out.println("進入read執行第" + readCount + "次"); readCount++; cb.append("aa bb cc "); loopCount++;return 1; }//僅僅在第一次和第六次給CharBuffer添加3個數據 if (loopCount == 2){ out.println("進入read執行第" + readCount + "次"); readCount++; loopCount++; return 1; }//其他的時候返回1,但是并不往Buffer中存放數據,來騙被調用者hasNext(),來觀察出現了什么現象 if (loopCount == 3){ out.println("進入read執行第" + readCount + "次"); readCount++; loopCount++; return 1; } if (loopCount == 4){ out.println("進入read執行第" + readCount + "次"); readCount++; loopCount++; return 1; } if (loopCount == 5){ out.println("進入read執行第" + readCount + "次"); readCount++; loopCount++; return 1; } if (loopCount == 6){ out.println("進入read執行第" + readCount + "次"); readCount++; cb.append("oo pp qq "); loopCount++; return 1; } if (loopCount == 7){ out.println("進入read執行第" + readCount + "次"); readCount++; loopCount++; return 1; } if (loopCount == 8){ out.println("進入read執行第" + readCount + "次"); readCount++; loopCount++; return 1; } if (loopCount == 9){ out.println("進入read執行第" + readCount + "次"); readCount++; loopCount++; return 1; } if (loopCount == 10){ out.println("進入read執行第" + readCount + "次"); readCount++; return -1; } return 1; } public static void main(String[] args) { int a = 1;//外層循環的次數 Scanner s = new Scanner(new Test()) ; while(s.hasNext()){//這個hasNext()方法會調用read()方法的 out.println("第" + a + "次執行外層循環"); a ++; System.out.println("從cb中讀出 " + s.next()); } } }
以上demo的運行結果為:
進入read執行第1次
第1次執行外層循環
從cb中讀出 aa
第2次執行外層循環
從cb中讀出 bb
第3次執行外層循環
從cb中讀出 cc
進入read執行第2次
進入read執行第3次
進入read執行第4次
進入read執行第5次
進入read執行第6次
第4次執行外層循環
從cb中讀出 oo
第5次執行外層循環
從cb中讀出 pp
第6次執行外層循環
從cb中讀出 qq
進入read執行第7次
進入read執行第8次
進入read執行第9次
進入read執行第10次
當調用s.hasNext()時,程序會判斷字符緩沖區中是否還有未讀字符,如果有,則返回true,調用s.next()時,返回未讀字符串第一個空格前的所有字符。如果緩沖區中沒有未讀字符,則調用Readable.read()方法,向字符緩沖區中放入字符,Readabel.read()返回-1之外的任何整數,當字符緩沖區沒有未讀字符時,都將會繼續調用Readable.read()方法,直到Readable.read()方法返回-1,才會結束while循環體。
8 Runnable實現該接口的類必須實現run()方法,run()方法的實現將在新的線程中執行;
Thread類實現了Runnable接口,所以一個類通過繼承Thread類實現多線程,也是間接的采用實現Runnable接口。
package com.heisenberg.Learn; import static java.lang.System.*; public class Test implements Runnable{ @Override public void run() { for (int i = 0 ; i< 10; i++) { out.println("新線程中的第" + i + "次循環"); } } public static void main(String[] args) { Thread newThread = new Thread(new Test()); newThread.start(); for (int i = 0 ; i< 10; i++) { out.println("main方法中的第" + i + "次循環"); } } }
可能的一種運行結果為:
main方法中的第0次循環
main方法中的第1次循環
新線程中的第0次循環
新線程中的第1次循環
main方法中的第2次循環
main方法中的第3次循環
main方法中的第4次循環
main方法中的第5次循環
main方法中的第6次循環
main方法中的第7次循環
main方法中的第8次循環
main方法中的第9次循環
新線程中的第2次循環
新線程中的第3次循環
新線程中的第4次循環
新線程中的第5次循環
新線程中的第7次循環
新線程中的第8次循環
新線程中的第9次循環
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68311.html
摘要:中的枚舉是一個類,所以枚舉也可一后構造函數和其他的方法只是枚舉繼承了類,所以它不能再繼承其它的類。如果給每個枚舉值指定屬性,則必須給枚舉類提供枚舉值屬性對應數據類型的構造方法。紅色藍色白色運行的結果為藍色 二、類 1、Enum 枚舉 java 語言所有枚舉類型的公共類; 枚舉用來替換使用常量表示列入顏色、方式、類別等數量有限,形式離散有表示明確的量; 枚舉是類型安全的,超出枚舉類型的...
摘要:一接口能夠被添加字符序列和字符的對象。對于多線程訪問而言沒必要是安全的。是值的一個可讀序列。此接口對許多不同種類的序列提供統一的只讀訪問。如果該對象小于等于或大于指定對象,則分別返回負整數零或正整數。 一、接口 1、Appendable 能夠被添加字符序列(CharSequence)和字符(char)的對象。CharSequence已知實現的類有:CharBuffer、Segment...
摘要:一依賴剛開始少這個包創建索引失敗官方文檔并沒有給這個提示二開始之前的準備官方文檔連接操作所用到的實體類三關于索引的操作官方文檔新增索引索引名稱分片副本內容查詢指定索引索引名稱刪除索引四關于文檔的操作官方文檔創建文檔索引名稱前 一、Maven依賴 org.elasticsearch elasticsearch 7.1.0...
摘要:如果需要支持類的動態加載或需要對編譯后的字節碼文件進行解密操作等,就需要與類加載器打交道了。雙親委派模型,雙親委派模型,約定類加載器的加載機制。任何之類的字節碼都無法調用方法,因為該方法只能在類加載的過程中由調用。 jvm系列 垃圾回收基礎 JVM的編譯策略 GC的三大基礎算法 GC的三大高級算法 GC策略的評價指標 JVM信息查看 GC通用日志解讀 jvm的card table數據...
摘要:反射學習的靈魂我們從最初的,到面向對象部分,我們可以將代碼在計算機中經歷的階段分為三部分源代碼階段類對象階段運行時階段而我們知道,中一個類在源代碼階段,是存儲在硬盤中的,而編譯后,就已經被加載到內存中區,那么有沒有一種方法可以在這種情況下 反射:Web學習的靈魂 我們從最初的 javac -HelloWorld.java,到面向對象部分,我們可以將Java代碼在計算機中經歷的階段分為三...
閱讀 2079·2021-09-29 09:35
閱讀 676·2021-09-08 09:36
閱讀 3389·2021-09-03 10:30
閱讀 2109·2019-08-30 14:21
閱讀 2905·2019-08-30 11:18
閱讀 3306·2019-08-29 17:31
閱讀 3136·2019-08-29 17:29
閱讀 1300·2019-08-29 17:13