A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘佳 中级黑马   /  2012-8-31 11:18  /  2106 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘佳 于 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()方法又是从哪里来的?
}
}

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
Arrays是一个类,包含操作数组的各种方法,asList(T...a) 是Arrays类中的一个static方法,List fixedList =Arrays.asList("abc","defg"); 是将有两个元素的列表赋值给fixedList,fixedList.getClass()); fixedList是List类型的,就算是要查,也应该List类是否有getClass()方法,但是只要是对象,都有这个方法,所有类的基类是Object,getClass()是Object的方法

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

回复 使用道具 举报
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()方法是静态的,所以直接可以用类名调用
希望这个例子能帮助你理解。

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马