java中的静态初始化块与静态初始化方法

时间:2021-04-25 11:51:56

标签: java static-initialization

我正在阅读 Java 文档中有关静态初始化块的内容,我发现了这一点:

<块引用>

私有静态方法的优点是可以复用 稍后如果您需要重新初始化类变量。

这基本上是在谈论使用私有静态方法作为静态初始化块的替代品,引用的句子是优势。我似乎没有理解这一点。有人可以为我进一步分解吗?

static {
    // whatever code is needed for initialization goes here
}

VS

class Whatever {
    public static varType myVar = initializeClassVariable();
        
    private static varType initializeClassVariable() {

        // initialization code goes here
    }
}

1 个答案:

答案 0 :(得分:0)

如果需要,您可以重新初始化,重复使用相同的代码。例如:

try: 
    auth = tweepy.AppAuthHandler(Credentials.consumer_key2, Credentials.consumer_secret2) 
    api = tweepy.API(auth,wait_on_rate_limit=True)
except Exception as e: # catch connection error 
        print("Authentication connection error: {}".format(e.reason))    

try: 
    tweets = tweepy.Cursor(api.search_full_archive, 
                label = ''
                query='\"{}"'.format(searchWords), 
                lang="en", 
                fromDate= data_since_pro
                toDate='202005030000'
                ).items(numTweets)
except Exception as e: # catch connection error 
    print("API connection error: {}".format(e.reason))  

# store these tweets in a Python list
tweet_list = list(tweets)
  
# retrieve information from tweets iterable object
for tweet in tweet_list:
    print(tweet.text)

因此,如果您必须重新初始化,最好将您的初始化代码分解为静态方法,以便您可以重用它。

就我个人而言,当我觉得这样做可以更好地展示逻辑时,我会根据具体情况使用静态初始化方法。例如,如果静态变量需要一点计算来确定正确的值,那么编写一个专门进行计算的方法似乎更清晰。

一个例子可能是

 public void doSomething() {
    ...
    if (theSkyHasFallen) {
        // Uh-oh, we need to completely reinitialize
        myVar = initializeClassVariable();
    }
    ...
 }

我发现将地图构建和初始化放入专门针对提供完全初始化的地图的方法中是更好的结构。对我来说,结构方面胜出,无论我以后是否需要“重新初始化”。