Вы также пометили это как Java, так что пара перспектив Java.
1).В Java нет концепции статического конструктора, вместо этого вы можете определить блоки кода как статические, и они запускаются в то время, когда класс готов к использованию - в конце концов, статические поля являются общими для всех экземпляров класса и поэтому необходимоне может быть инициализирован до того, как у нас будут какие-либо рабочие экземпляры.
2).Не думайте о полях, статических или иных, как о сборщике мусора - это объекты, которые собирают мусор.Так что если у вас есть:
class MyClass {
private static OneThing x = new OneThing();
private Another y = new Another();
}
// some code
MyClass m = new MyClass(); // creates instance of MyClass
m = null;
// no one now references that instance of MyClass
Вы не собираете мусор x и y, вы собираете мусор OneThing и Another.Это произойдет, когда на эти объекты не будет ссылок.
В случае объекта Another, на который ссылается y, это происходит, когда сам экземпляр MyClass собирается сборщиком мусора.Но OneThing, на который ссылается x, будет по-прежнему ссылаться до тех пор, пока MyClass известен JVM.НО, сами классы могут быть сборщиком мусора, поэтому возможно, что в конечном итоге эта ссылка x будет удалена, а объект OneThing будет собран сборщиком мусора.