Джава-2

Привет. Напоминаю в рамках тега изучениеджава (хейтерам банить именно его) я вместе с вами изучаю основы джава. Сегодня узнаем о типах данных. Этот пост будет очень длиннопост. Простите что мы ещё не кодим, но пока действительно рано. Скажу одно, эти три поста расписаны в учебнике на 60 страницах (у меня 5,5, с учётом того что треть отсебятина), с немного запутывающими ошибками.


Начнём с типов данных. Когда мы говорим/переписываемся с другим человеком мы передаём информацию (данные). Из курса школьной физики нам известно что звук - колебания воздуха (или другой среды), всё что мы видим - свет, отражённый от предмета, температура тела - внутренняя энергия его частиц... Если так же углубляться в информацию находящуюся на компьютере, то окажется что это всего лишь отсутствие (условно 0) или наоборот присутствие (условно 1) электрического заряда. И множество приборов переводят последовательность этих зарядов в изображение на экране, мелодию из колонок, текст в распечатке. Только представьте, мы имеем шесть органов чувств, которые передают всю огромное количество разнообразной информации в мозг. А у компьютера всего один орган чувств и тот знает только единицу и ноль. Однако разработчики помогли программистам и обучили Java восьми простым типам данных. Тип данных - правила структуры, использования данных, требования которых должен исполнять и компьютер, и программист.


* Начнём с самого лёгкого (имхо) типа данных - boolean. Данные такого типа имеют только два значения true и false (правда и ложь соответственно). Например: 2 < 3 = True. Применение: например вы создаёте приложение для взрослых >8-], и вам требуется чтобы пользователь подтвердил своё совершеннолетие. Если его возраст меньше 18, то выходим из программы; если нет, продолжаем.


* Символьный тип данных - char. Таким типом может быть представлен только символ, причём только один. Зайдите в меню пуск и наберите в поиске Charmap. Нажмите на дополнительные параметры. У вас должно появиться что-то подобное.

Джава-2 Изучениеджава, Программирование, Java, Длиннопост

C помощью текстовых полей выделенных зелёным можно узнать символ по коду или названию. Красным выделен Unicod (Универсальный код) символа. В Java этот код должен быть представлен следующим видом: \u**** (где вместо звёздочек четыре последних символа). Так в Java Пи можно представить как \u03C0. Символьный тип в Java использует именно юникод. Применение: передача символьной информации (цифры, знаки, буквы).


Также существует тип данных String (строковые данные) - данные состоящие из нескольких символов. Следует знать, что символ "f" и строка "f" - разные вещи, примерно как цифра и число. Хотя и гораздо удобнее набрать "ПРИВЕТ МИР" чем искать для каждой буквы юникод и потом подставлять их в нужное место, однако там где нужно использовать только один символ лучше использовать именно символьный тип данных. Если я не забуду, то напишу отдельную статью, почему именно так и как это работает.


Целочисленные типы данных - положительны и отрицательные без дробной части:

* byte. Все целые числа от -128 до 127. Применение: проценты громкости/здоровья, зрение человека, температура на улице.

* short. От -32768 до 32767. Применение: ревизия в магазине недосдача/плюс (коробок мыла, кг гвоздей), глубина/высота дна/горы.

* int (cокр. от Integer). От -2147483648 до 2147483647. Применение: карма на пикабу (ну а вдруг вы решили создать приложение для пикабу).

* long. От -9223372036854775808 до 9223372036854775807. Применение: честно даже не знаю, где может использоваться настолько большое отрицательное число и без дробной части. А вот положительное число, например, количество букв в документе, калькулятор секунд которые вы прожили.


Логично задать вопрос: а почему не использовать везде тип long и не запоминать три дополнительных типа данных. А я объясню. Грубо говоря, вся информация на компьютере храниться либо на жёстком диске, либо в оперативной памяти. Минус первого - маленькая (по сравнению с оперативной памятью) скорость записи/чтения информации. Минусы второго требует электричество (то есть если отключить питание, то вся информация из оперативной памяти пропадёт); разные операционные системы могут использовать ограниченное количество этой памяти. В современных домашних компьютерах, обычно, используется 4 Гб оперативной памяти = 4*1024*1024*1024 = 4294967296 байт. Использование в программе 536870912 данных типа лонг займёт всю память компьютера. Конечно, цифра кажется большой, однако здесь не учтены операционная система, офисные программы, а ещё музычку через контакт послушать, письмо отправить, а в оффисах жадный начальник поскупился добавить пару т.р. и не 4 Гб, а полтора на компьютере. Таким образом почти 537 миллионов снижаются до 20-30 млн. А если использовать short, то это число увеличивается в 4 раза. К тому же операция: 14 + 99, требует меньше ресурсов от процессора, если оба значения типа int, a не long. Почему так происходит объясняю ниже.


Помним, что информация в компьютере представлена единицей и ноликом? Очень похоже на азбуку морзе (только там короткий и длинный). Представим, что мы указали компьютеру выделить информацию под тип byte. Компьютер выделяет 1 байт равный 8 бит - восемь ячеек, в которые можно поместить 1 или 0 (поставить/убрать заряд).

Джава-2 Изучениеджава, Программирование, Java, Длиннопост

А как же он представляет там число? Очень просто: первая ячейка отвечает за знак числа - если в ячейке стоит 0, то значение положительно, иначе отрицательно. А вот дальше посложнее. Вспомните начальную школу, разряды (единицы, десятки, сотни, тысячи...) и составление чисел из цифр. У компьютера всего две цифры 0 и 1. Таким образом его счёт идёт следующим образом:

Джава-2 Изучениеджава, Программирование, Java, Длиннопост

Выделенные серым цветом ноли показаны лишь для того, чтобы вы помнили - в компьютерном представлении эти ноли существуют. Таким образом в памяти компьютера сохранены числа от 0 до 127 (итого 128 разных чисел). Отрицательные числа (первая ячейка принимает значение 1) считаются аналогично, только отправной точкой считается -128. От -128 до -1 также 128 разных чисел.

Джава-2 Изучениеджава, Программирование, Java, Длиннопост

Таким образом, первая ячейка показывает, что отсчёт идёт от -128 или 0, а остальные 7 ячеек показывают, сколько нужно отсчитать в сторону увеличения. Аналогично и с другими целочисленными типами данных только там разрядов побольше. Откройте виндузкий калькулятор>вид>программист.

Джава-2 Изучениеджава, Программирование, Java, Длиннопост

Фиолетовым обведено количество памяти выделяемое компьютером на расчёты сверху вниз соответствуют long, int, short, byte. Зелёным выделено число, введённое нами или полученное в результате расчётов. Красным выделено число из зелёного в компьютерном представлении, нижняя строчка количество нулей. Синим система счисления: Bin - компьютерное представление. Советую поставить 1 байт, Dec и прибавлять 1 и смотреть как будет изменяться число в красном. Также посмотрите, что будет, если к 127 прибавить 1. Подумайте, почему так происходит. Не закрывайте калькулятор, он ещё потребуется.


А теперь объясню, почему 14 + 99 в int, требует меньше ресурсов. В калькуляторе выберите 8 байт (соответствует типу long). Введите 14 (посмотрите в скольких ячейках стоит ноль), нажмите плюс и введите 99 (посчитайте количество нолей). Что, лень вам считать эти нули? А компьютеру приходиться эти ноли между собой складывать и хотя одно такое вычисление по времени не заметно для человека, в основном вычисления используются более трудные (несколько сложений, возведение в степень, деление) и для большого количества входящих данных. А вот в таком случае задержка уже может быть заметной.


Ну чтож последние два типа данных: *float (плюсминус ~3.4^38, 6 цифр после запятой), *double (плюсминус ~1.8^308, 15 цифр после запятой). Если мы в уравнении используем число типа флоат (меньше памяти и быстрее расчёт) то в конце числа необходимо ставит "F", иначе число будет принято за double. Однако в связи с особенностями вычислений: 2.0 - 1.1 = 0.89999999. К счастью это лечится. Но об этом в следующий раз.