簡體   English   中英

Java:何時初始化變量“ this”?

[英]Java: When is the variable “this” initialized?

public class MainMDI extends javax.swing.JFrame {

   private static MainMDI thiz; 

      public MainMDI() {
        initComponents();
        thiz = this;
      }
}  

我正在創建一個MDI應用程序。 MainMDI類是應用程序的主要類,因此main方法位於該類中。 上面的代碼創建了一個名為thiz的靜態變量,該靜態變量在應用程序運行時指向類MainMDI的實例。

我打算使用變量thiz從main方法內部訪問MainMDI類的非靜態(實例)成員。(我無法從main方法內部訪問非靜態成員,因為main方法是類中的靜態成員。我的應用程序中的MainMDI)。

public class MainMDI extends javax.swing.JFrame {

   private static MainMDI thiz = this; 

      public MainMDI() {
        initComponents();
      }
}  

但是,當我嘗試像上面的代碼中那樣初始化變量thiz時,編譯器說非靜態變量不能從靜態上下文中引用。 但是我不是在靜態環境中指這嗎? 這是因為靜態變量this初始化時尚未初始化的非靜態變量嗎?

另外,如果我沒有將MainMDI類設置為主類,而是創建了另一個具有main方法的類並將該類設置為主類,那將是更好的編程實踐嗎?

但是,當我嘗試像上面的代碼中那樣初始化變量thiz時,編譯器說非靜態變量不能從靜態上下文中引用。 但是我不是在靜態環境中指這嗎?

是的,你是。 靜態類變量在加載類時初始化(而不是在創建對象實例時)。 在這種情況下沒有this 編碼:

private static javax.swing.JFrame thiz = this; 

根本行不通。 盡管您的主張相反,但您確實想要單身人士。 否則,給定MainMDI對象的N個可能的對象實例,您期望從靜態上下文訪問哪個實例? 您應該考慮重構代碼,而不是嘗試圍繞Java語言語義進行強力武裝。

this意味着“當前正在操作的對象實例”,僅在非靜態成員函數內部有意義。 總的來說this是隱含當你調用該方法,所以它會是公平地說,這是初始化的非靜態成員函數被調用權利之前傳遞到每一個非靜態成員函數。

用“ main”方法分解類是否是一個好主意,將在很大程度上取決於實際的實現細節。

暫無
暫無

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

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