zoukankan      html  css  js  c++  java
  • Scanner类中hasNext()方法的解析

    今天测试Java代码需要用到控制台输入,这就需要Scanner类中的方法,但是对其中的hasNext()方法不是特别理解,如下是对该方法的粗浅理解。
     
    hasNext()方法,其源代码如下:
    public boolean hasNext() {
        ensureOpen();
        saveState();
        modCount++;
        while (!sourceClosed) {
            if (hasTokenInBuffer()) {
                return revertState(true);
            }
            readInput();
        }
        boolean result = hasTokenInBuffer();
        return revertState(result);
    }
    执行过程:
    1. 这个方法调用了ensureOpen(),所以它要求确保Scanner一定是打开状态的,如果你在调用hasNext()时,Scanner已经通过close()方法关闭,它并不会从缓存中进行读取,而是抛出Scanner closed的异常;
    2. 然后就是对Scanner索引状态的保存,这在后面通过revertState()进行索引状态恢复时还会用到;
    3. 通过modCount++记录索引状态改变的次数;
    4. 如果源代码没有完成,则在通过hasTokenInBuffer()方法判断缓存中还有token后,则会返回true,同时通过revertState()进行索引状态恢复;
    5. 如果通过hasTokenInBuffer()方法判断缓存中没有token,就需要用readInput()进行数据读入到缓存;
    6. 如果源代码已经完成或者判断 hasTokenInBuffer()方法为false时(意味者方法还没有return结束),在这里将通过 hasTokenInBuffer()方法进行判断;
    7. 返回判断的布尔值的同时对索引状态进行恢复。
    可以看出:
    1. 该方法要求你的Scanner必须为打开状态;
    2. 只要代码未完成,就会先从目前索引位置对缓存进行判断,如果为false,就会将新的数据读入缓存,这意味着只要代码没完成,则永远不能看返回false,直到返回true为止;
    3. 如果代码完成了,则才有可能返回false。
  • 相关阅读:
    计算机视觉(ComputerVision, CV)相关领域的站点链接
    JS-网页中分页栏
    国内搜索大哥iOS面试题
    【iOS与EV3混合机器人编程系列之中的一个】iOS要干嘛?EV3能够更酷!
    Android多线程.断点续传下载
    【转】BeyondCompare软件使用
    【转】目前世界上最为流行的代码托管网站
    【转】为什么要用GIT而不是SVN
    【转】UBUNTU 下GIT的安装
    【转】雄鹰计划-卓越工程师炼成记
  • 原文地址:https://www.cnblogs.com/mryx/p/15620531.html
Copyright © 2011-2022 走看看