2015-03-02 110 views
0

我有一個類與下面的類有所有的靜態方法。因此,該類在其他類中使用時未初始化。在調用該類的任何靜態方法之前,我必須檢查一個條件。即使我添加一個默認構造函數,它也不會被調用。有人可以建議有解決方案而不用在所有用途中實例化這個類?它需要一個默認的構造函數可能是一個簡單的其他解決方案。沒有初始化的Java默認構造函數

我需要在撥打電話前每次檢查網絡連接。靜態初始化程序僅在加載時第一次被調用。

 public class ABCServerUtil { 

     public static boolean checkServer() {...bla...bla...} 


     } 

我需要一些像下面這段代碼被調用和退出。

 public ABCServerUtil(){ 
     if(!isNetworkOnline()) 
     return; 
     } 
+2

**因此,該類在其他類中使用時未初始化。** - 你怎麼知道它沒有得到*初始化*?你沒有任何靜態初始化塊。請詳細解釋發生了什麼,什麼不是。 :) – TheLostMind 2015-03-02 08:44:14

+0

你所描述的不是一個對象,因此不需要構造函數。您正在定義靜態行爲,因此需要對其進行編程。 – Jared 2015-03-02 08:46:44

回答

1

使用靜態初始化塊

static { 
    //whatever code for initialization 
} 
  • 一個類可以有任意數量的靜態初始化塊
  • 他們可以在類體內的任何地方出現
  • 靜態初始化塊調用的順序它們出現在源代碼中。

你應該叫每當方法稱爲

public class Test { 

    public static void checkServer() { 
     if (!checkNetwork()) { 
      return; 
     } 
    } 

    public static void checkClient() { 
     if (!checkNetwork()) { 
      return; 
     } 
    } 

    private static boolean checkNetwork() { 
     return true; // or false depending on network condition 
    } 
} 
+0

好的..在OP的編輯之後,此答案是*錯誤*。 – TheLostMind 2015-03-02 08:57:10

+0

@TheLostMind我沒有看到編輯過的問題? – 2015-03-02 08:58:52

+0

在你發佈你的答案前5分鐘被編輯.. :) – TheLostMind 2015-03-02 09:00:29

0

您可以使用靜態初始化程序。

static { 
    // code here 
} 

它將在第一次訪問類的任何屬性(靜態或其他)的方法之前運行。

2

如果每次需要檢查條件其中一個靜態方法被調用,您沒有多少選擇,只能做你正在做的事情:調用一個方法在開頭執行檢查每種方法。

如果你只需要檢查的條件一次類時最初加載/初始化,您可以使用static initializer

public class ABCServerUtil { 

    static { 
     // Code here runs when the class is loaded 
    } 

    // ... 
} 
+0

*如果您需要在每次調用某個靜態方法時檢查條件,*他可以使用代理來調用他的所有方法:P – TheLostMind 2015-03-02 08:54:23

0

可以直接調用與類名像這樣的靜態方法,

boolean val=ABCServerUtil.checkServer(); 

一些教程給出here

0

既然有已經5個回答說同樣的事情,他們都不是你在做什麼時後:

的工具像Byte Buddy聽起來像你所需要的。

相關問題