服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

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方法。

扫描关注微信公众号