第一个问题,两段代码的区别在于阻塞的位置不同,加上一行输出代码就可以很明显地看到差别。

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()的疑问相关推荐

  1. java中result的作用_JAVA中的Resultset

    JAVA中的Resultset (2012-04-21 14:53:34) 标签: it JAVA中Resultset是一个类 . 结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结 ...

  2. java中session的作用_java中session的工作原理是什么?和Cookies有何区别?

    现在大家学习的东西和以前大不相同了,越来越多的人倾向于去学习高新技术以获得更好的发展.java是很多人的第一选择.java中的知识还是很多的,今天就来为大家介绍一下. 首先来说一下java中sessi ...

  3. java 矩形类的作用_java中关于矩形类

    创建矩形类Rectangle存储两个顶点坐标(m_x1,m_y1,m_x2,m_y2),构造方法接受2个顶点坐标的值,并调用设置方法setCoordinates将得到的坐标写入对应的属性中,设置方法s ...

  4. java中write方法作用_java中的封装,继承,多态,这3个在程序中起着重要作用

    一.封装 1. 封装概述 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改. 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问.要访 ...

  5. java中重写的作用_Java中的重写

    如果一个类从它的父类继承了一个方法,如果这个方法没有被标记为final ,就可以对这个方法进行重写. 重写的好处是:能够定义特定于子类类型的行为,这意味着子类能够基于要求来实现父类的方法. 在面向对象 ...

  6. java中catch的作用_Java中的try catch的作用

    http://wenwen.soso.com/z/q175197035.htm try{--}里面是一些你觉得可能会出问题的代码,catch里就是你觉得会有什么问题,如果出的问题正好是你catch里说 ...

  7. java关键字super的作用_java中super关键字的作用

    1.super关键字可以在子类的构造方法中显示地调用父类的构造方法,super()必须为子类构造函数中的第一行. 2.super可以用来访问父类的成员方法或变量,当子类成员变量或方法与父类有相同的名字 ...

  8. java中generics的作用_java中的Generics(泛型)

    从JDK5.0开始出现的泛型(Generics)功能.泛型提供编译时期的检查,不会将对象置于某个容器而失去其类型. 这个是JDK   1.5   的新特性. 举个例子. 一个列表中加入3个数字,然后从 ...

  9. java序列化有什么用_java中序列化的作用

    一  什么叫序列化 通俗点讲:它是处理对象流的一种机制,即可以很方便的保存内存中java对象的状态,同时也为了方便传输. 二 序列化有什么作用 1.方便传输,速度快,还很安全,被调用方序列化,调用方反 ...

最新文章

  1. 《Python 3程序开发指南(第2版•修订版)》——1.2 Python的关键要素
  2. 有符号二进制数的乘法
  3. ECCV2018目标检测(object detection)算法总览
  4. 微软的 Android 计划:邪恶的天才计划或只是邪恶?
  5. 链表实现c语言通讯录管理系统,C++链表实现通讯录管理系统.pdf
  6. 【Thymeleaf】获取绝对路径
  7. oracle system用户创建job 其他用户,oracle创建表空间、用户和表以及sys和system的区别...
  8. 第七十九期:阿里程序员感慨:码农们过去暴富有多轻松,现在赚钱就有多辛苦
  9. python数据可视化柱状图_python数据可视化示例柱状图
  10. c语言实现语音检测vad_AI大语音(二)——语音预处理
  11. 【Java集合系列一】ArrayList解析
  12. LitJson使用中的坑
  13. BZOJ2827 千山鸟飞绝 (离散+treap)
  14. Oracle学习——第四讲(增删改查)
  15. 梁宁《产品思维》之27颠覆式创新
  16. 极简主义!让手机壁纸,惊现高级脸Feel~
  17. 东师18秋学期计算机基础3,东师18秋学期(1709、1803、1809)《概率论与统计原理》在线作业答案...
  18. RAM与ROM的原理与区别
  19. 大数据入门必读好书推荐
  20. 用HTML+CSS跟简单的js操作完成响应式星巴克首页

热门文章

  1. ABP vNext 审计日志获取真实客户端IP
  2. 轻量级 Kubernetes K3s - Github热点
  3. 15分钟从零开始搭建支持10w+用户的生产环境(三)
  4. 【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入
  5. Hyper-V虚拟机自动添加检查点和导出备份
  6. Zongsoft.Data 发布公告
  7. Azure pipeline 配置根据条件执行脚本
  8. C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介
  9. 为了不让代码“作恶”,能否将道德条款纳入开源许可证?
  10. Chrome让人失望,是时候转到Firefox或Edge?