Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Введение в язык программирования Java – (3 академ. часов)




Введение в язык программирования Java – (3 академ. часов)

Языковые лексемы Java.

Идентификаторы

Когда мы пишем текст программы, у нас компилятор разбивает программу на лексемы.

Ключевые слова

abstract double    
       
       
       
       
       
       
       

 

Введение в систему типов языка 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...