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;ですnullpublic 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リテラル テキストを出力することです"null"

2番目の質問について-これが機能しない理由:

System.out.println(test.text());

text()を返すvoidか、何も返さないメソッド呼び出しです。メソッド呼び出しの結果として何も返されないため、何も出力できません。

呼び出しをtext()print ステートメントの前に移動して、フィールドに適切にデータが入力されるようにします。

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

すべての Class タイプのデフォルト値が null であるため、null を印刷しています。テキストを設定していないにもかかわらず、印刷しようとしています。abcを印刷したい場合は、次のいずれかの方法に従ってください

1 test.text(); のようにテキスト メソッドを明示的に呼び出します。

2 次のようにコンストラクターで yourtext を初期化します

Tester(){
text="abc";
}
于 2013-10-19T04:21:06.443 に答える
0
于 2013-10-19T04:36:29.900 に答える