您現在的位置是:首頁 > 網頁遊戲首頁網頁遊戲

java檔案編譯時常見錯誤(6)

簡介不過這個構造器是隱身的,其實就是Person(),即使我們在接下來的程式碼中執行了new Person(),也好像沒有啥輸出,因為這個預設的構造器沒有內容輸出,所以我們感覺不到系統呼叫了這個幫我們建立了一個例項

程式檔案的編譯錯分別為什麼和什麼

程式碼編寫環境:

windows10

eclipse2018

java版本:JavaSE1。8

檔案結構如下:

java檔案編譯時常見錯誤(6)

Person。java原始碼:

java檔案編譯時常見錯誤(6)

Persontest原始碼:

java檔案編譯時常見錯誤(6)

我們是在Person。java裡面建立了Person類,不僅新建了2個成員變數,

這2個變數是類的?還是例項的?請讀者腦子中進行回答。

還自定義了一個構造器,然後準備在另一個檔案Persontest中呼叫。在這裡特別強調:java規定,如果我們沒有在建立類的時候定義構造器,系統就會預設幫我們建立一個構造器。不過這個構造器是隱身的,其實就是Person(),即使我們在接下來的程式碼中執行了new Person(),也好像沒有啥輸出,因為這個預設的構造器沒有內容輸出,所以我們感覺不到系統呼叫了這個幫我們建立了一個例項。

也就是說沒有自定義構造器的類,在其他地方被呼叫的時候,直接

Person person = new Person();

有些初學者在這裡確實有點不太理解。就是忽然出來一個Person()。這是個啥?

其實就是我們只能使用例項來呼叫類裡面定義的例項變數,

啥是類裡面定義的例項變數?

例項。例項變數,但是這個例項變數是在類裡面定義的,因為沒有static進行修飾,所以需要在其他地方呼叫前,進行賦值,

是否一定需要賦值呢?

然後我們使用 new Person(),就把前面定義的類,建立了一個新的例項,然後使用person變數來呼叫。這裡再多說下。因為我們在類裡面定義變數的時候,沒有使用static進行修飾,所以這個變數,一定需要例項去呼叫,並且呼叫前一定要進行賦值。這樣的話,這個程式碼你理解起來就順暢了。

我們建立的這個構造器程式碼部分是:

public Person()

{

System。out。println(“I‘m not default”);

}

我們特別輸出了一句話。如果沒有這個輸出的話,這個我們自定義的構造器就是:

public Person()

{

}

這樣的話,這個自定義的構造器和系統預設的構造器就沒有任何區別了。

我們在Persontest介面下進行執行,然後結果如下截圖:

java檔案編譯時常見錯誤(6)

在實際中,我們如果定義類的時候,同時定義了成員變數,那麼我們一般就需要構造足夠多的構造器,也就是說,所有帶引數的組合構造器都需要提前定義好,這樣的話,也就是所謂你的程式碼很健壯!在其他類裡面呼叫的時候,直接呼叫就可以了。

深刻理解類變數,例項變數,需要多多寫程式碼,然後呼叫的時候,進行思考。

如果我們在呼叫前不進行賦值,是否可以呢?

我們把給變數賦值的語句註釋調。

我們來看下。

java檔案編譯時常見錯誤(6)

執行結果如下:

java檔案編譯時常見錯誤(6)

這樣的話,就是說我們在類裡面定義變數的時候,系統就進行了賦值。如果是字串,這個值就是null。如果是int型別的,就是0。

如果我們還有懷疑,繼續修改程式碼。

我們修改Person類的程式碼

新增main方法,如果不新增main(),程式不會執行,main方法是java檔案執行的唯一入口。

java檔案編譯時常見錯誤(6)

然後我們直接列印變數值的話,會發現程式碼是錯誤的,不能執行。

仔細思考!因為我們是在類裡面呼叫變數,然後main方法前面有static。然後只能呼叫static修飾的類變數。這樣的話,只有在我們定義的類變數前加static。我們繼續修改程式碼。

為何我要註釋// System.out.println(age);這行程式碼?

如果我不註釋// System.out.println(age);這行程式碼,修改修改那個地方才可以進行執行檔案。然後輸出結果是啥呢

java檔案編譯時常見錯誤(6)

存檔!執行

java檔案編譯時常見錯誤(6)

我們看到輸出了一個null。

只有這樣反覆的修改,思考,舉一反三,你就會很快的理解類,類變數,例項,例項變數。還有就是類呼叫類變數,例項呼叫例項變數。

如果你看我寫的這個不暈的話,就說明你基本已經掌握了上面的知識。如果你還不能快速的跟著轉彎,下面哪些複雜的方法,還根本不能看。你會暈的。

Top