在Java中调用方法问题

时间:2013-10-19 04:17:13

标签: java

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(),为什么会出错?我以为我需要调用这样的方法。

5 个答案:

答案 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()的返回类型无效