Я создаю класс A с помощью общедоступного метода void A (), который имеет this () в качестве первого оператора. Метод A (), очевидно, не является конструктором, но компилятор жалуется на то, что this () не является первым оператором некоторого конструктора, который, как я полагаю, неявно создается с помощью super () в качестве первого оператора. На какой конструктор и на что этот оператор () ссылается компилятор? Спасибо.
class A
{
public void A(){this();}
}
Выход ошибка: вызов этого должен быть первым оператором в конструкторе public void A () {this ();} ^ 1 ошибка
Спасибо за пояснение




super() относится к конструктору родительского класса, а this () относится к конструктору подкласса. Вы не можете использовать this() где-либо, кроме как в конструкторе с другой подписью и только в качестве первого оператора. Например, это допустимо.
A(int x){
this(); // Calling a no argument constructor of the same class
}
Но это неверно, это вызывает ошибку компиляции, потому что это рекурсивный вызов конструктора.
A(){
this();
}
Вы не можете использовать this() в методах.
Большое спасибо за объяснение. Просто сбивает с толку то, что компилятор обращается к общедоступному методу void A () как к конструктору. Сообщение об ошибке не отражает реальной проблемы, которую я предполагаю.
Ты прав. Об этом можно было сообщить как об ошибке компилятора :-)
Поскольку
this()разрешен только в качестве первого оператора в конструкторе, аvoidфункция не является конструктором. Вам нуженpublic A() {}- при использованииthis()рекурсия будет бесконечной.