簡體   English   中英

Java中的調用方法問題

[英]Invoking method issue in 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() ,為什么會出錯? 我以為我需要調用這種方法。

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

由於所有類類型的默認值為null,因此尚未設置文本,而是仍在嘗試打印,因此打印為null。 如果要打印abc,請遵循以下兩種方法之一

1像test.text()一樣顯式地調用文本方法;

2在構造函數中初始化yourtext如下

Tester(){
text="abc";
}

在構造時,您的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);

您應該調用test.text();首先給test一個值。

由於text是一個類變量,因此默認情況下將其初始化為null。如果將其設置為int則它將初始化為0;否則將其初始化為0。

在您的程序中,您不會調用text()因此text()的值不會更改。現在在main方法中,您正在打印文本,因此其打印結果為null

另外,如果我在print命令中編寫了test.text(),為什么會出錯?

這是因為text()的返回類型為void

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM