Является ли статический блок Java эквивалентным статическому конструктору С#?

Какова реальная разница между статическим конструктором С# и статическим блоком Java?

Оба они должны быть без параметров. Они вызываются только один раз, когда сначала используется связанный класс.

Я что-то пропускаю, или они одно и то же, только с разными именами?

Ответ 1

Они эквивалентны, за исключением того, что класс С# может иметь только один статический конструктор (плюс инициализаторы статического поля).

Кроме того, в С# конструктор static будет применять флаг beforefieldinit.

Ответ 2

Они выглядят одинаково, в следующем примере показано, что статический конструктор С# работает так же, как статический блок в java

protected Singleton()
{
    Console.WriteLine("Singleton constructor");
}

    private static readonly Singleton INSTANCE;

    static Singleton() {
        try {
           INSTANCE = new Singleton();
        }
        catch(Exception e) {
            throw new Exception();
        }
    }

Ответ 3

Да Они эквивалентны Другим моментом является то, что java не поддерживает статический конструктор, но поддерживает статический конструктор static block и С#.

Ответ 4

Это не так.

В С# блоки могут содержать только конструкторы. В java вы можете выполнять инструкции.