日期:2014-05-20  浏览次数:20860 次

java中为什么创建了对象之后,就可以通过对象调用,该类的方法呢?
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不是汇编语言什么的吧。别太抠这些。
------解决方案--------------------
 你去看看

引用:
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 中有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()方法,所以可以。