Для чого потрібен блок static stack overflow російською

Мені здається у вас невелике непорозуміння різниці між static і instance полями класу.

Поля з модифікатором static можуть бути використані навіть якщо не було створено не одного екземпляра класу (жодного об'єкта) - і вони є загальними для всіх екземплярів класу.

static методи відповідно можуть взаємодіяти тільки зі static полями.

У конструкторі ви можете задавати значення змінним інстанси (об'єкта). Під кожен інстанси виділяється окрема пам'ять в якій і зберігаються змінні інстанси, і вони свої для кожного інстанси.

Крім static блоку ініціалізації якщо ще не статики блок ініціалізації - він виконується до конструктора, наприклад:

Цікаво, я тільки вчора використав static блок. Я його використовую не часто, але ось спрощений приклад від мого коду його використання:

Як @zzashpaupat зазначив в його відповіді, блоки static викликаються при ініціалізації класу.

static блок виконується при першому зверненні до класу. А потрібен він для ініціалізації статичних полів, наприклад:

Таким чином, OtherCls буде інтанц-ан, а масив буде заповнений перед самим першим зверненням до класу Cls

Цей блок - блок, який виконається один раз при ініціалізації класу (саме класу, а не інстанси). Власне, для цього і потрібен.

Ось недавно відповідаючи на питання порадив зберегти набір методів в словнику. Це можна було б зробити в статичному блоці, щоб мати раз створений заповнений словник. До речі, в C # це можна було б зробити ще й через ініціалізатор колекції, але в Джаві такого начебто немає.