Введение в язык программирования Java – (3 академ. часов)
Введение в язык программирования Java – (3 академ. часов) Языковые лексемы Java. Идентификаторы Когда мы пишем текст программы, у нас компилятор разбивает программу на лексемы. Ключевые слова
Введение в систему типов языка Java. Система типов http: //www. beyondjava. net/blog/java-8-types-revamping-javas-type-system/ Мы не можем написать ни одной строчки кода, пока мы не разберем этот самый важныйы для нас момент. А именно система типов ЯП Java. В зависимости от того, как вы в этом разберетесь, и будет зависеть, как вы будете программировать на Java. Дело в том, что когда пытаются разработать систему типов для любого языка, всегда хочется сделать все хорошо. А хорошо – это должна быть единая иерархия. Т. е. на вершине какой-нибудь замечательный мега-класс от которого все наследуют. Так было сделано в SmallTalk. Но кроме красоты, получили обратную сторону медали, а именно, медленную производительность. Почему? А представльте каждый integer и double, который встречается в программе является объектом. Т. е. нужно выделить под него память, какие-то дополнительные затраты на создание объекта есть, затем сборка мусора. А представьте, у вас идет математика, а у вас все объектное. Программа встанет. Работа с примитивными типами и константами. Поэтому, разработчики Java сказали: «Ну ладно, не получается в единую иерархию. А давайте мы разделим систему типов на две разные, совершенно неравнозначеные, группы: простые типы (int, double), а все остальное – это объект (ссылочный тип)». Вот такое произошло.
( В языке Java только 8 скалярных типов: boolean, byte, char, short, int, long, float, double. Длины и диапазоны значений примитивных типов определяются стандартом, а не реализацией и приведены в таблице. Тип char сделали двухбайтовым для удобства локализации (один из идеологических принципов Java): когда складывался стандарт, уже существовал Unicode-16, но не Unicode-32. Поскольку в результате не осталось однобайтового типа, добавили новый тип byte. Типы float и double могут иметь специальные значения, и «не число» (NaN). Для типа double они обозначаются Double. POSITIVE_INFINITY, Double. NEGATIVE_INFINITY, Double. NaN; для типа float — так же, но с приставкой Float вместо Double. Минимальные положительные значения, принимаемые типами float и double, тоже стандартизованы. Тип Длина (в байтах) Диапазон или набор значений boolean не определено true, false byte 1 − 128.. 127 char 2 0.. 216− 1, или 0.. 65535 short 2 − 215.. 215− 1, или − 32768.. 32767 int 4 − 231.. 231− 1, или − 2147483648.. 2_147_483_647 long 8 − 263.. 263− 1, или примерно − 9. 2·1018.. 9. 2·1018 float 4 -(2-2− 23)·2127.. (2-2− 23)·2127, или примерно − 3. 4·1038.. 3. 4·1038, а также, , NaN double 8 -(2-2− 52)·21023.. (2-2− 52)·21023, или примерно − 1. 8·10308.. 1. 8·10308, а также, , NaN ) Всего 8 простых типов. А все остальное бесконечное множество – это все ссылочные типы, начиная с Object, String. Массивы которые у вас будут в Java тоже будут являться ссылочными типами. Вопрос: А эти 8 между собой могут взаимодействовать? Ответ: Да, с помощью оберток. Иногда хочется, чтобы int или double вел себя, как объект. Вот для этого придется из простого типа его превратить в объект. Для этого и было сделано 8 (а на самом деле чуть побольше) классов оберток. Эти обертки существуют для того чтобы эти 2 лагеря как-то между собой могли взаимодействовать. И простой тип может превратиться в объект – это упаковка. А может быть в обратную сторону – это распаковка. Так вот эти 2 процедуры они происходят практически автоматически. Когда надо, то сам компилятор сгенерирует код создания объекта. Вы можете даже не увидеть этого.
Это, конечно, проблемное место в ЯП Java – система типов и простых типов, которые находятся в стороне. Представьте, что вы вызываете какой-то метод и этот вызов происзодит рекурсивно. А при каждом вызове создается три упаковки, три упаковки, три упаковки, три упаковки, три упаковки, а вы в это не въехали. Вы подставляете туда на вход int или еще что-то, а оно каждый раз создает упаковку, а дальше у вас сборка мусора, сборка мусора, сборка мусора, сборка мусора, сборка мусора. И что у вас будет с производительностью? А не будет её вообще. Поэтому выбор правильного типа написания для Java принципиален.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|