阅读,理解和修复该代码

时间:2013-12-24 12:35:33

标签: java

public class Bug1 { 
   private String s;
   public void Bug1(){ 
    s = "hello"; 
   }
   public String toString() {
      return s;
   }
   public static void main(String[] args) {
      Bug1 x = new Bug1();
      System.out.println(x);
   }
}

有人可以一步一步向我解释这个代码,告诉我为什么它从out.print返回“null”然后需要改变什么以便它会返回“hello”而不是?

4 个答案:

答案 0 :(得分:1)

由于public void Bug1()不是构造函数,因此在初始化Bug时API将调用默认构造函数。默认情况下,String类的值为null。 将public void Bug1()更改为public Bug1()以使其成为构造函数

答案 1 :(得分:0)

这里的想法可能是Bug1(方法)是一个构造函数。但就此而言,签名必须是public Bug1()(否void)。就目前而言,这条线

  Bug1 x = new Bug1();  // create instance

改为运行默认构造函数,永远不会初始化s

答案 2 :(得分:0)

  

然后需要改变什么才能返回“你好”呢?

更改

public void Bug1(){

public Bug1(){

因为它需要是构造函数方法。构造方法无法指定void

并更改

System.out.println(x);

System.out.println(x.toString());

因为您需要在类toString()的实例上调用方法Bug1以获取返回String。

答案 3 :(得分:0)

欢迎来到Java的精彩世界。 main中的代码如下:

public static void main(String[] args) {
Bug1 x = new Bug1();
System.out.println(x);

}

因此,您创建了一个名为x的{​​{1}}类型的对象。我猜你读过构造函数了。类中定义的代码行:

Bug1

您希望这行代码是构造函数。但是,唉,你犯了一个小错误。构造函数的定义表明构造函数没有返回类型。虽然,他们确实与班级同名。写public void Bug1(){ s = "hello"; } 的部分使它成为函数而不是构造函数。

您应该将代码行更改为

void Bug1()

当您将其更改为此时,您应该拥有所需的结果。尝试阅读Java Constructors。你显然已经掌握了一些概念并留下了一些概念。

打印对象时,请始终使用toString方法。这是一个有用的方法,允许您以纯文本格式查看对象。

快乐的编码。 :)