import java.util.Scanner;
public class scanner1
{
public static void main(String[] args)
{
Scanner sc =new Scanner(System.in) //如创建的sc
sc.useDelimiter("\n");
while(sc.hasNextInt())
{
System.out.println("键盘输入的是;"+sc.next());
}
}
}
sc就可以直接调用next()方法,为什么呢?求大牛,详细讲解一下。我看来一些书但还是不太明白。
------解决方案--------------------
因为scanner这个类实现了Iterator接口
------解决方案--------------------
如果你想搞明白的话,最好读一下源代码
------解决方案--------------------
如果源代码中 Scanner类 的定义中有next()方法,为什么对象sc不能用呢…
------解决方案--------------------
这个对象就是这个类的实例化来的,而你调用的方法是这个类的成员方法而且是访问控制权限是public,所以就可以直接调用了。
------解决方案--------------------
说白了,方法就是一段代码,你想执行它就得知道他内存中在哪。
你没新建一个对象,这个对象就被创建在内存里,他所有的方法,属性都在内存里,这个对象有个名字,也就是引用。
cs就是他的引用,sc里有这个对象的地址信息,你通过sc就能找到对象地址,然后找到对象,找到对象的那个方法的代码,执行之。
里先这么理解。具体的你以后就明白了,太细节的东西需要更多的专业知识才能理解,如果你想知道更多就去看更细的知识。估计你想学得事JAVA而不是C不是汇编语言什么的吧。别太抠这些。
------解决方案--------------------
你去看看
因为Scanner 中有next 这个方法啊
------解决方案--------------------
java.util包是java中的工具包,顾名思义工具包里的方法都是给开发者当作工具使用的,sun公司已经把该类中的.next()写好了,只要直接调用就可以!Scanner.next()返回值为字符串类型的值!因为你前面构造方法放的值为System.in,即返回你输入的值以String类型输出
------解决方案--------------------
scanner是jdk封装好的类,所以程序可以直接调用。
楼主可以去找java的API文档。
------解决方案--------------------
你可以去看看类的生命周期,这有我转载的一篇博客(http://blog.csdn.net/wangwuyilove/article/details/21177219)希望对你有所帮助。
最好多看看源码,类中加载到连接到初始化到使用,都是在内存中,JVM中有存放方法的方法区,当创建一个类,new出来的时候就初始化了这个类,调用非静态方法的时候就会加载这个方法。有些我也解释不来,自己本身理解的不透,有什么不对的可以多讨论一下。
下面的是scanner类中关于next方法的源码
/**
* 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
* <code>true</code>.
*
* @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();
clearCaches();
while (true) {
String token = getCompleteTokenInBuffer(null);
if (token != null) {
matchValid = true;
skipped = false;
return token;
}
if (needInput)
readInput();
else
throwFor();
}
}
------解决方案--------------------
sc是Scanner 为模板创建的对象,Scanner类中定义了next()方法,所以可以。