Это не синтаксическая ошибка (хотя, вероятно, это приведет к логической ошибке, ошибке).Компилятор скомпилирует этот код без жалоб.Второе объявление double fd создает локальную переменную для метода main.Область действия этой переменной начинается с ее объявления и заканчивается в конце блока (как и для всех локальных переменных).Поэтому следующий оператор использует локальную переменную, а не переменную экземпляра.
Локальная переменная больше не будет содержать значение после возврата метода.Переменная экземпляра не будет изменена.
Подсказка: представьте себе, что операторы смотрят "вверх" со своего места, чтобы найти каждую из своих переменных.Они могут смотреть за пределы своего «стеклянного ящика» в любом направлении, если им не удается найти переменную в их собственном методе.
Почти всегда ошибочно использовать одно и то же имя для переменной экземпляра и для локальногопеременная.Но это не синтаксическая ошибка, поэтому компилятор не предупредит вас.