黑马程序员技术交流社区

标题: 为什么那么多代码都不理解呢【已解决】 [打印本页]

作者: 刘佳    时间: 2012-8-31 11:18
标题: 为什么那么多代码都不理解呢【已解决】
本帖最后由 刘佳 于 2012-8-31 18:40 编辑

import java.util.*;
public class FixedSizeList
{
public static void main(String[] args)
{
    List fixedList = Arrays.asList("abc","defg");      //一般都是先建对象,再对其进行操作,这句代码怎么是不建对象就开始直接使用其方法呢?

   System.out.println(fixedList.getClass());         //这里的fixedList是引用变量吗,如果是,那它引用的那个对象Arrays,通过查看API文档并没有发现它有getClass()方法,那么它调用
的getClass()方法又是从哪里来的?
}
}
作者: 袁艳超    时间: 2012-8-31 11:41
Arrays是一个类,包含操作数组的各种方法,asList(T...a) 是Arrays类中的一个static方法,List fixedList =Arrays.asList("abc","defg"); 是将有两个元素的列表赋值给fixedList,fixedList.getClass()); fixedList是List类型的,就算是要查,也应该List类是否有getClass()方法,但是只要是对象,都有这个方法,所有类的基类是Object,getClass()是Object的方法
作者: 陈莹    时间: 2012-8-31 12:29
List fixedList = Arrays.asList("abc","defg");     
首先你要先了解Arrays类中的asList()方法:
public static <T> List<T> asList(T... a)返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直接写”到数组。)此方法同 Collection.toArray() 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess。
此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素:
List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
你的代码就是创建了一个固定长度为2的字符串列表,其实这就已经创建了对象了,因为asList()方法返回的就是一个List类型的变量,你要知道,创建对象不一定就用new cllassName(),有的类中还有专门获得对象的方法。比如说单例设计模式中,为了使之能创建一个对象,不是专门有一个返回对象的方法吗?
System.out.println(fixedList.getClass());            
fixedList就是调用asList方法返回的List类型的对象,所以它调用的也是List中的方法,而不是Arrays中的方法。
我给你举个类似的例子:
  1. class Person
  2. {
  3.         
  4. }
  5. class GetPerson
  6. {
  7.         public static Person getPerson()
  8.         {
  9.                 return new Person();
  10.         }
  11. }

  12. public class Demo
  13. {
  14.         public static void main(String args[])
  15.         {
  16.                 Person p = GetPerson.getPerson();
  17.                                 System.out.println(p.getClass());
  18.         }
  19. }
复制代码
这里,Person就相当于List,p就相当于fixedList,GetPerson就相当于Arrays,getPerson()方法就相当于asList()方法,因为getPerson()方法是静态的,所以直接可以用类名调用
希望这个例子能帮助你理解。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2