public class Tester {
private String text;
public void text() {
text = "abc";
}
public static void main(String[] args) {
Tester test = new Tester();
System.out.println(test.text);
}
}
为什么打印null
?另外,如果我在print命令中写test.text()
,为什么会出错?我以为我需要调用这样的方法。
答案 0 :(得分:3)
null
因为private String text;
是null
,因为您没有拨打public void text()
来设置String text
打印前致电text()
Tester test=new Tester();
test.text();
System.out.println(test.text);
输出:
abc
的 PS。强> 的
根据评论=> “我可以直接编写System.out.println(test.text())吗?”
将该集return
输入String
并从中返回String
所以将代码更改为
public String text() {
return "abc";
}
并且
Test test = new Test();
System.out.println(test.text());
输出:
abc
答案 1 :(得分:0)
它打印为null,因为所有Class类型的默认值为null,您尚未设置文本并仍尝试打印。 如果你想打印abc,请遵循以下任一方式
1显式调用text方法,如test.text();
2在构造函数中初始化yourtext,如下所示
Tester(){
text="abc";
}
答案 2 :(得分:0)
您的String对象在构建时被指定为null
- 也就是说,当您声明new Tester()
时,您的text
字段已分配null
。这是所有对象类型的默认值,并且所有基元都被指定为零(如果基元是布尔值,则为false)。
没有分配任何内容,打印null
的默认行为是打印文字"null"
。
关于你的第二个问题 - 这不起作用的原因:
System.out.println(test.text());
text()
是一个返回void
的方法调用,或者什么也没有。由于方法调用没有返回任何内容,因此无法打印出任何内容。
您可能希望在任何打印语句之前将您的呼叫转移到text()
,因此该字段已正确填充:
Tester test = new Tester();
test.text();
System.out.println(test.text);
...并且,有一个这样的约定:如果你想在构造时填充该字段,创建一个接受它作为参数的构造函数。
public Tester(String text) {
this.text = text;
}
构建它时,您无需担心对text()
的任何无关的调用;只需打印该字段。
Tester test = new Tester("abc");
System.out.println(test.text);
答案 3 :(得分:0)
您应首先致电test.text();
以测试值。
答案 4 :(得分:0)
由于text
是一个类变量,因此它默认初始化为null。如果它是int
那么它将被初始化为0;
在您的程序中,您没有调用text()
,因此文本的值不会更改。现在主要方法是打印文本以便打印null
;
另外,如果我在print命令中编写test.text(),为什么会出错?
这是因为text()
的返回类型无效