[英]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.