Вам также нужна переменная.
class ...
private static hasRun = false;
public static synchronize boolean runOnce ()
{
if (hasRun) return false;
hasRun = true;
// do something
return true;
}
Статический блок никогда не может быть вызван, когда этот класс не используется.
Существует обсуждение разгрузки классов Выгрузка классов в Java?
Когда происходит выгрузка классов, возможно несколько загрузок, чем может произойти многократный вызов статического инициализатора.Тем не менее, в этом случае мое решение потерпит неудачу, так как в этом случае ЛЮБОЕ решение должно дать сбой.
Я чувствую, что это крайне необычно и маловероятно.Но, может быть, вам придется иметь дело, когда вы не контролируете окружающую среду