java中hasnext的作用_java中Scanner的hasNext()的疑问
第一个问题,两段代码的区别在于阻塞的位置不同,加上一行输出代码就可以很明显地看到差别。
Test.java
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while(s.hasNext())
{
System.out.print("You inputted: ");
System.out.println(s.next());
}
}
}
另,hasNext()方法会阻塞,不代表next()方法就不会阻塞。
/**
* Returns true if this scanner has another token in its input.
* This method may block while waiting for input to scan.
* The scanner does not advance past any input.
*
* @return true if and only if this scanner has another token
* @throws IllegalStateException if this scanner is closed
* @see java.util.Iterator
*/
public boolean hasNext() {
ensureOpen();
saveState();
while (!sourceClosed) {
if (hasTokenInBuffer())
return revertState(true);
readInput();
}
boolean result = hasTokenInBuffer();
return revertState(result);
}
/**
* Finds and returns the next complete token from this scanner.
* A complete token is preceded and followed by input that matches
* the delimiter pattern. This method may block while waiting for input
* to scan, even if a previous invocation of {@link #hasNext} returned
* true
.
*
* @return the next token
* @throws NoSuchElementException if no more tokens are available
* @throws IllegalStateException if this scanner is closed
* @see java.util.Iterator
*/
public String next() {
ensureOpen();
clearCache
while (true) {
String token = getCompleteTokenInBuffer(null);
if (token != null) {
matchValid = true;
skipped = false;
return token;
}
if (needInput)
readInput();
else
throwFor();
}
}
第二个问题,想要结束循环,在Windows环境下,需要输入Ctrl+Z;而在Unix环境下,需要输入Ctrl+D。注意,这是输入,而不是对控制台进行操作。这相当于向控制台输入一个字符,这个字符代表EOF,此时hasNext()方法返回false,循环结束。
java中hasnext的作用_java中Scanner的hasNext()的疑问相关推荐
- java中result的作用_JAVA中的Resultset
JAVA中的Resultset (2012-04-21 14:53:34) 标签: it JAVA中Resultset是一个类 . 结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结 ...
- java中session的作用_java中session的工作原理是什么?和Cookies有何区别?
现在大家学习的东西和以前大不相同了,越来越多的人倾向于去学习高新技术以获得更好的发展.java是很多人的第一选择.java中的知识还是很多的,今天就来为大家介绍一下. 首先来说一下java中sessi ...
- java 矩形类的作用_java中关于矩形类
创建矩形类Rectangle存储两个顶点坐标(m_x1,m_y1,m_x2,m_y2),构造方法接受2个顶点坐标的值,并调用设置方法setCoordinates将得到的坐标写入对应的属性中,设置方法s ...
- java中write方法作用_java中的封装,继承,多态,这3个在程序中起着重要作用
一.封装 1. 封装概述 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改. 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问.要访 ...
- java中重写的作用_Java中的重写
如果一个类从它的父类继承了一个方法,如果这个方法没有被标记为final ,就可以对这个方法进行重写. 重写的好处是:能够定义特定于子类类型的行为,这意味着子类能够基于要求来实现父类的方法. 在面向对象 ...
- java中catch的作用_Java中的try catch的作用
http://wenwen.soso.com/z/q175197035.htm try{--}里面是一些你觉得可能会出问题的代码,catch里就是你觉得会有什么问题,如果出的问题正好是你catch里说 ...
- java关键字super的作用_java中super关键字的作用
1.super关键字可以在子类的构造方法中显示地调用父类的构造方法,super()必须为子类构造函数中的第一行. 2.super可以用来访问父类的成员方法或变量,当子类成员变量或方法与父类有相同的名字 ...
- java中generics的作用_java中的Generics(泛型)
从JDK5.0开始出现的泛型(Generics)功能.泛型提供编译时期的检查,不会将对象置于某个容器而失去其类型. 这个是JDK 1.5 的新特性. 举个例子. 一个列表中加入3个数字,然后从 ...
- java序列化有什么用_java中序列化的作用
一 什么叫序列化 通俗点讲:它是处理对象流的一种机制,即可以很方便的保存内存中java对象的状态,同时也为了方便传输. 二 序列化有什么作用 1.方便传输,速度快,还很安全,被调用方序列化,调用方反 ...
最新文章
- 《Python 3程序开发指南(第2版•修订版)》——1.2 Python的关键要素
- 有符号二进制数的乘法
- ECCV2018目标检测(object detection)算法总览
- 微软的 Android 计划:邪恶的天才计划或只是邪恶?
- 链表实现c语言通讯录管理系统,C++链表实现通讯录管理系统.pdf
- 【Thymeleaf】获取绝对路径
- oracle system用户创建job 其他用户,oracle创建表空间、用户和表以及sys和system的区别...
- 第七十九期:阿里程序员感慨:码农们过去暴富有多轻松,现在赚钱就有多辛苦
- python数据可视化柱状图_python数据可视化示例柱状图
- c语言实现语音检测vad_AI大语音(二)——语音预处理
- 【Java集合系列一】ArrayList解析
- LitJson使用中的坑
- BZOJ2827 千山鸟飞绝 (离散+treap)
- Oracle学习——第四讲(增删改查)
- 梁宁《产品思维》之27颠覆式创新
- 极简主义!让手机壁纸,惊现高级脸Feel~
- 东师18秋学期计算机基础3,东师18秋学期(1709、1803、1809)《概率论与统计原理》在线作业答案...
- RAM与ROM的原理与区别
- 大数据入门必读好书推荐
- 用HTML+CSS跟简单的js操作完成响应式星巴克首页
热门文章
- ABP vNext 审计日志获取真实客户端IP
- 轻量级 Kubernetes K3s - Github热点
- 15分钟从零开始搭建支持10w+用户的生产环境(三)
- 【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入
- Hyper-V虚拟机自动添加检查点和导出备份
- Zongsoft.Data 发布公告
- Azure pipeline 配置根据条件执行脚本
- C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介
- 为了不让代码“作恶”,能否将道德条款纳入开源许可证?
- Chrome让人失望,是时候转到Firefox或Edge?