Является ли статический блок Java эквивалентом статического конструктора C#?
-
20-09-2019 - |
Вопрос
В чем реальная разница между статическим конструктором C# и статическим блоком Java?
Они оба должны быть без параметров.Оба они вызываются только один раз, когда связанный класс используется впервые.
Я что-то упустил или это одно и то же, только с разными именами?
Решение
Они эквивалентны, за исключением того, что класс C# может иметь только один статический конструктор (плюс инициализаторы статических полей).
Кроме того, в C# static
конструктор применит beforefieldinit
флаг.
Другие советы
Они выглядят одинаково, следующий пример показывает, что статический конструктор С# работает так же, как статический блок в Java.
protected Singleton()
{
Console.WriteLine("Singleton constructor");
}
private static readonly Singleton INSTANCE;
static Singleton() {
try {
INSTANCE = new Singleton();
}
catch(Exception e) {
throw new Exception();
}
}
Да, они эквивалентны, другой момент - Java не поддерживает статический конструктор, но поддерживает статический блок и статический конструктор C#.
Они не.
В C# блоки могут содержать только конструкторы.В Java вы можете выполнять операторы.