首頁  >  文章  >  Java  >  Java靜態動態的問題解決

Java靜態動態的問題解決

黄舟
黄舟原創
2017-09-19 11:42:181664瀏覽

下面小編就為大家帶來一篇詳談Java靜態動態的問題。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧

Cannot make a static reference to the non-static field

靜態方法中不能引用非靜態成員變數及方法


class A {
  private int a = 1;

  public sttaic void main(String[] args){
    System.out.println(a);
  }
}

因為實例變數應該是具體物件的狀態,應該先A a =  new A();然後System.out.println(a,a);

或將變數改為static

No enclosing instance of type EventApp4 is accessible. Must qualify the allocation with an enclosing instance of type EventApp4 (e.g. x.new A() where x is an instance of EventApp4).

原因:內部類別沒有用static限定,所以是動態的,而我在main函式中new了這個內部類別。為什麼這樣就出現問題了呢,因為靜態的方法以及變數在類別載入之時就已經進入內存了,但是非靜態的方法和變數只能在實例化之後才會進入內存,所以在靜態方法中new非靜態的內部類別就會出錯,因為此時這個內部類別還不存在。反之,在動態方法中new靜態方法是不會出現錯誤的,原因同樣,靜態的在非靜態的之前就已經存在了。

從java的記憶機制去分析,首先當你New 一個物件的時候,並不是先在堆中為物件開闢記憶體空間,而是先將類別中的靜態方法(帶有static修飾的靜態函數)的程式碼載入到一個叫做方法區的地方,然後再在堆記憶體中建立物件。所以說靜態方法會隨著類別的載入而載入。當你new一個物件時,該物件存在於對記憶體中,this關鍵字一般指該對象,但如果沒有new對象,而是透過類別名稱呼叫該類別的靜態方法也可以。

遇到遇上問題時,有以下原則

#1.在main中,使用靜態方法靜態變數靜態類,即將變數、方法都限定為static

2.在main中,實例化本類別或其他類別(要使用的類別)

3.將main中的語句放進建構子中,在main中實例化本類,因為建構函式中可以使用本類的參考this

以上是Java靜態動態的問題解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn