public class  OverloadedConstructor {
   OverloadedConstructor() {
    System.out.println("Default constructor");
  }
   OverloadedConstructor(String s) {
    System.out.println("String arg constructor");
    System.out.println(s);
  }
  public static void main(String args[]) {
    OverloadedConstructor[]  a=new OverloadedConstructor[5];
a[0]=new OverloadedConstructor();
a[1]=new OverloadedConstructor("I");
a[2]=new OverloadedConstructor("Am");
a[3]=new OverloadedConstructor("A");
a[4]=new OverloadedConstructor("Good boY!");
for(int i=0;i<5;i++)
System.out.println(a[i]);
}
}运行结果:Default constructor
String arg constructor
I
String arg constructor
Am
String arg constructor
A
String arg constructor
Good boY!
OverloadedConstructor@126b249
OverloadedConstructor@182f0db
OverloadedConstructor@192d342
OverloadedConstructor@6b97fd
OverloadedConstructor@1c78e57程序的运行结果怎么会是这样子呢?@和后面的字符为什么会出现?

解决方案 »

  1.   

    调用Object的toString()方法导致Object的部分源码
     public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
      

  2.   

    这个类因为是你自己创建的,所以toString方法必须重写来覆盖系统中自动加载的toString 方法.出现上面的情况,就是系统自动输出a[i]的结果,你重新写个toString方法:
    public  String toString(){//里面的内容是你想输出a[i]的格式.
    }
      

  3.   

    a[i]是OverloadedConstructor 类型
    但println却没有这样一个重载方法
    于是认为是一个object,将OverloadedConstructor转型为object 调用下列方法
        public void print(Object obj) {
    write(String.valueOf(obj));
        }
    然后调用String.valueOf(Ojbect o)方法
        public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
        }
    不为空着则调用对象的toString()方法。
    你的类没有覆盖toString方法
    所以就调用了Object本身的toString()
      

  4.   

    知道了,谢谢!我写了一个toString方法,但还是不行,好像写错了,你能不能给我改改程序!
      

  5.   

    public  String  toString(String s){
    return s;
    }
      

  6.   

    public class  OverloadedConstructor {
     public String toString() {
    return "某个OverloadedConstructor类";
        }   OverloadedConstructor() {
        System.out.println("Default constructor");
      }
       OverloadedConstructor(String s) {
        System.out.println("String arg constructor");
        System.out.println(s);
      }
      public static void main(String args[]) {
        OverloadedConstructor[]  a=new OverloadedConstructor[5];
    a[0]=new OverloadedConstructor();
    a[1]=new OverloadedConstructor("I");
    a[2]=new OverloadedConstructor("Am");
    a[3]=new OverloadedConstructor("A");
    a[4]=new OverloadedConstructor("Good boY!");
    for(int i=0;i<5;i++)
    System.out.println(a[i]);
    }
    }
      

  7.   

    package csdn.dec;public class  OverloadedConstructor {
     String w ;
     public  String  toString(){
     return w+"";
     }  OverloadedConstructor() {
       System.out.println("Default constructor");
     }
      OverloadedConstructor(String s) {
      w =s ;
       System.out.println("String arg constructor");
       System.out.println(s);
     }
     public static void main(String args[]) {
       OverloadedConstructor[]  a=new OverloadedConstructor[5];
    a[0]=new OverloadedConstructor();
    a[1]=new OverloadedConstructor("I");
    a[2]=new OverloadedConstructor("Am");
    a[3]=new OverloadedConstructor("A");
    a[4]=new OverloadedConstructor("Good boY!");
    for(int i=0;i<5;i++)
    System.out.println(a[i]);
    }
    }
      

  8.   

    public  String  toString(String s){
    return s;
    }
    不能有参数的
      

  9.   

    我把程序变成了这样:public class  OverloadedConstructor {
    static String s;  
    public String toString() {
    return s;
        }   OverloadedConstructor() {
            this.s="Default";
        System.out.println("Default constructor");
      }
       OverloadedConstructor(String s) {
        this.s=s;
    System.out.println("String arg constructor");
        System.out.println(s);
      }
      public static void main(String args[]) {
        OverloadedConstructor[]  a=new OverloadedConstructor[5];
    a[0]=new OverloadedConstructor();
    a[1]=new OverloadedConstructor("I");
    a[2]=new OverloadedConstructor("Am");
    a[3]=new OverloadedConstructor("A");
    a[4]=new OverloadedConstructor("Good boY!");
    for(int i=0;i<5;i++)
    System.out.println(a[i]);
    }
    }可是输出又变成了这样:
    Default constructor
    String arg constructor
    I
    String arg constructor
    Am
    String arg constructor
    A
    String arg constructor
    Good boY!
    Good boY!
    Good boY!
    Good boY!
    Good boY!
    Good boY!
    最后怎么会是5个Good boy!是因为static吗?