最近學到容器,覺得挺難的,遇到過兩個問題,在這發泄一下!!!
一:有關於容器對象.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編譯纔會出現這種問題,運行是沒有問題的,主要是編譯會出警告而已。