摘要:已知常用子接口实现该接口的类可以成为语句的目标唯一方法返回一个在一组类型的元素上进行迭代的迭代器。使用遍历对象判断是否存在下一个元素获取下一个元素移除该元素为类专门创建的接口。
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次循环
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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代码在计算机中经历的阶段分为三...
阅读 2060·2021-09-29 09:35
阅读 652·2021-09-08 09:36
阅读 3365·2021-09-03 10:30
阅读 2080·2019-08-30 14:21
阅读 2846·2019-08-30 11:18
阅读 3211·2019-08-29 17:31
阅读 3115·2019-08-29 17:29
阅读 1263·2019-08-29 17:13