这段代码出自API的中for (Enumeration e = v.elements() ; e.hasMoreElements() ;) {
         System.out.println(e.nextElement());
     }
 
不是说接口不能实例化对象的吗,那怎么能这样使用 Enumeration e 
这个“e" 不是个实例化的对象吗. 还是我的理解有什么误区呢
那这个“e”具体该怎么解释呢~还请高人指点~

解决方案 »

  1.   

    e不是实例化的对象,在java里Enumeration e这样只是定义一个引用,引用说白点就相当于c中的指针.并不是一个实例化的东西.而要new了才叫实例化.
      

  2.   

    不是实例对象的抽象,在java里除了基本的数据类型如:int,float,double这类基本数据类型是直接用以外,其余的都是实例化的对象储存在内存堆中,并且都通过存储在堆栈中的引用去引用它,引用就是一个存储了对象内存地址的一个变量.并不关实例化的事.在java里数据的存储分为了两个地方,一个是堆,一个是堆栈,对象存储在堆中,基本数据存储在堆栈中.不知道你有没有学过C,如果学过之类的语言,那么用指针来理解引用应该不难.
      

  3.   

    要说清楚,真的还不容易,表达能力不行.比如说我们有一个对象Object(用new来实例化了的);当然在java里不能指接访问对象,我们如果要用Object就必须要知道Object在什么地方,这时应该怎么办呢?所以引用来了,引用也是Object类型的,但是它是一个普通的变量(不对的哈,只是为了理解,应该叫引用),它不是一个对象,除了内存地址,它什么也不存储.这里比如说你所说的Enumeration e,有e 就是一个引用了,而v.elements() 才是一个实例化了的对象,我们要用v.elements() 这个对象,所以当然要用一个引用去指向它,引用就相当于带路的,你要找一个对象,你就去问引用,对象在什么地方啊,引用就跟你说,我带你去吧.
      

  4.   

    “Enumeration e = v.elements()” 这里Enumeration e只是定义一个句柄指向实际实v.elements(),并非实列化。
      

  5.   

    楼上几位也都说了,如果你学过c或c++的话,你就把e理解为指针,或者理解为句柄.其实就是指向堆区的一个内存地址,但它本身是存放在栈区的一个内存地址.而上面的v.elements()可以理解为已被实例化的对象!