Почему в мире кто-то захочет дважды ввести ключевое слово TypeName (например, String, Character и т. Д.)?
Поскольку вы делаете две вещи:
- Объявление переменной определенного типа
- Создание объекта определенного типа
Эти два типа не обязательно совпадают, например
Map m = new HashMap();
Вы, вероятно, привыкли к "динамически типизированным" языкам, таким как PHP, где переменные не имеют типа.Преимущество, которое вы получаете с помощью статических объявлений типов Java, состоит в том, что компилятором улавливается много ошибок программирования (даже в современной IDE, когда вы печатаете).Например, если вы допустили простую ошибку:
m.siez();
Компилятор немедленно предупредит вас о том, что с вашей программой что-то не так, и может сделать это только потому, что знает, что объявленный типMap
не имеет метода siez()
.
Некоторые современные статически типизированные языки, такие как C # и Scala, используют вывод типа , чтобы дать вам «лучшее из обоих миров», которое вы можете опуститьобъявление типа и компилятор предполагают, что оно совпадает с типом объекта, который вы ему назначаете.Однако такие языки всегда допускают явные объявления типов, потому что вывод типа не всегда возможен или желателен (например, в примере выше, где переменная должна использовать интерфейс, а не конкретный класс).