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”而不是?
答案 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方法。这是一个有用的方法,允许您以纯文本格式查看对象。
快乐的编码。 :)