Article:
  Understanding the Interplay Between Utility Classes and Static Initialization
Subject:   Don't see any specific problems with static initializers
Date:   2004-09-20 05:16:45
From:   kutzi
Looks to me like you really tried hard to shoot yourself in the foot and ... you succeeded. Even a language like Java cannot always prevent you from doing "bad" things.
If you have an static initializer than it should be clear that it will be called BEFORE any of the method are called.
If one of the methods is possibly called before initialisation can run you should put it in another utility class or abstain from using a static initializer.
What about a
if (r == null) {
initSomeResource();
} in sf2() ?
Not as efficient as a static initializer, but should be good enough.