Когда компиляторы сталкиваются с ошибками, они пытаются избежать так называемых «вторичных ошибок» - ошибок, возникающих в результате других ошибок, путем «исправления» более ранних ошибок.
Например, компилятор помечает ошибку из-за некорректного объявления конструктора. Он может интерпретировать это как конструктор, который вы пытались сделать статическим, или как обычный статический метод, в котором отсутствует объявленный тип возвращаемого значения. Компилятор может исправить ваше объявление, либо проигнорировав ключевое слово static, и обработав его как обычный конструктор, либо он может рассматривать его как статический метод и «изобретать» возвращаемый тип, чтобы компенсировать отсутствующий тип возвращаемого значения.
Похоже, что NetBeans выбирает первый подход - исправляет ваш конструктор, чтобы он не был статичным. Когда компилятор решает игнорировать ключевое слово static, чтобы избежать вторичных ошибок, вызов this () становится действительным, поскольку компилятор видит, что он находится в обычном конструкторе, поэтому вторая ошибка не помечается. Это на самом деле желательное поведение - авторы компилятора идут на все, чтобы избежать вторичных ошибок, поскольку они скрывают «настоящие» ошибки. Как только вы исправите статический конструктор самостоятельно и удалите ключевое слово static, вызов this () будет действительным (исключая ошибку # 3.)
Подводя итог - это компилятор пытается показать вам реальные ошибки, а не все последующие проблемы, вызванные этими ошибками.
РЕДАКТИРОВАТЬ: после ошибки компилятор пытается восстановить, пропуская ввод, чтобы попытаться вернуться на правильный путь (чтобы повторно синхронизировать токенизатор и анализатор в известном состоянии). Часть, которую они пропускают, могла содержать ошибки или вызывать ошибку в том, что компилятор впоследствии правильно анализирует. Таким образом, исправление ошибок может привести к тому, что некоторые ошибки не будут сообщены. Это не имеет значения с точки зрения корректности - до тех пор, пока компилятор помечает одну ошибку (исходную, которая привела к необходимости восстановления после ошибки), этого достаточно. Обработка ошибок и отчеты об ошибках в первую очередь о удобстве использования. Компилятор был бы одинаково корректен, если бы он просто напечатал «error» при первой ошибке и оставил вас, чтобы выяснить, где находится ошибка - он просто не очень пригодится для использования.