最近学到容器,觉得挺难的,遇到过两个问题,在这发泄一下!!!
一:有关于容器对象.toString()的问题。
public class TestCollection {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("hello");
c.add(new Integer(100));
System.out.println(c);
}
}
打印结果为
但经查看ArrayList并没有重写.toString(),那这个.toString()是从哪来的呢。然后查看了万能的API文档。真相大白!
ArrayList类继承了AbstractList类。
public class ArrayList<E>extends AbstractList<E>
而AbstractList则继承了AbstractCollection类
public abstract class AbstractList<E>extends AbstractCollection<E>
System.out.println(c);中会调用c中的.toString(),但ArrayList类没有重写.toString(),则会向其父类AbstractList找是否重写了.toString(),一找还没找到,就又向AbstractList的父类找是否生写了该方法。结果一看,AbstractCollection重写了.toString(),OK,总算找到了,那么就调用即可。
那么为什么会输出的格式如上图所示呢,即呢?那就再查看一下重写的.toString()方法是怎么样重写的吧!
public String toString()
-
返回此 collection 的字符串表示形式。该字符串表示形式由 collection 元素的列表组成,这些元素按其迭代器返回的顺序排列,并用方括号 (
"[]") 括起来。相邻元素由字符
", "(逗号加空格)分隔。通过
String.valueOf(Object)
可以将元素转换成字符串。
OK,关于容器的.toString()总算是一知半解了呀,嘻嘻……
二:
public class TestCollection {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("hello");
c.add(new Integer(100));
System.out.println(c);
}
}
在DOS下javac该代码段时,会出现提醒
这是因为JDK1.5中引进了泛型,但是你的ArrayList却没有采用,所有会有安全问题。
用1.5版本的JDK编译才会出现这种问题,运行是没有问题的,主要是编译会出警告而已。