java的vector 用法
Vector的用法很简朴,这已在前面的例子中获得了证明。尽量我们大大都时候只需用addElement()插入工具,用elementAt()一次提取一个工具,并用elements()得到对序列的一个“列举”。但仍有其他一系列要领长短常有用的。同我们对付Java库惯常的做法一样,在这里并不利用或报告所有这些要领。但请务必阅读相应的电子文档,对它们的事情有一个或许的认识。
1. 瓦解Java
Java尺度荟萃里包括了toString()要领,所以它们能生本钱身的String表达方法,包罗它们容纳的工具。譬喻在Vector中,toString()会在Vector的各个元素中步进和遍历,并为每个元素挪用toString()。假定我们此刻想打印出本身类的地点。看起来好像简朴地引用this即可(出格是C++措施员有这样做的倾向):
//: CrashJava.java // One way to crash Java import java.util.*; public class CrashJava { public String toString() { return "CrashJava address: " + this + "\n"; } public static void main(String[] args) { Vector v = new Vector(); for(int i = 0; i < 10; i++) v.addElement(new CrashJava()); System.out.println(v); } } ///:~
若只是简朴地建设一个CrashJava工具,并将其打印出来,就会获得无穷无尽的一系列违例错误。然而,如果将CrashJava工具置入一个Vector,并象这里演示的那样打印Vector,就不会呈现什么错误提示,甚至连一个违例都不会呈现。此时Java只是简朴地瓦解(但至少它没有瓦解我的操纵系统)。这已在Java 1.1中测试通过。
此时产生的是字串的自动范例转换。当我们利用下述语句时:
"CrashJava address: " + this
编译器就在一个字串后头发明白一个“+”以及好象并非字串的其他对象,所以它会试图将this转换成一个字串。转换时挪用的是toString(),后者会发生一个递归挪用。若在一个Vector内呈现这种工作,看起来仓库就会溢出,同时违例节制机制基础没有时机作出响应。
若确实想在这种环境下打印出工具的地点,办理方案就是挪用Object的toString要领。此时就不必插手this,只需利用super.toString()。虽然,采纳这种做法也有一个前提:我们必需从Object直接担任,可能没有一个父类包围了toString要领。