0
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?另外,如果我在打印命令中写入test.text(),为什么会出现错误?我想我需要调用这样的方法。

4

5 回答 5

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
于 2013-10-19T04:20:11.920 回答
0

您的 String 对象是null在构造时分配的 - 也就是说,当您声明时new Tester(),您的text字段被分配null。这是所有对象类型的默认值,并且所有原语都分配为零(如果原语是布尔值,则为 false)。

什么都没有分配给它,打印出来的默认行为null是打印文字 text "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);
于 2013-10-19T04:31:16.680 回答
0
于 2013-10-19T04:36:29.900 回答
0

作为text一个类变量,默认情况下它被初始化为null。如果是,int那么它将被初始化为0;

在您的程序中,您没有调用text(),因此 text 的值不会更改。现在在 main 方法中,您正在打印文本,因此它的打印null

另外,如果我在 print 命令中编写 test.text() ,为什么会出现错误?

这是因为返回类型text()为 void

于 2013-10-19T05:08:44.233 回答
0

它正在打印 null 因为所有 Class 类型的默认值为 null,您尚未设置文本并仍在尝试打印。如果你想打印 abc 然后按照以下方式之一

1 像 test.text() 一样明确地调用你的文本方法;

2 在构造函数中初始化yourtext如下

Tester(){
text="abc";
}
于 2013-10-19T04:21:06.443 回答