Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Модуль 2. Урок 2. Типы данных в Java. Введение в Java

Ссылка на дополнительную практику.

Это базовые знания языка java, которым стоит уделить пристальное внимание. Изучайте документацию и дополнительные материалы обязательно, не спешите, задавайте вопросы, перечитывайте, возвращайтесь переодически к материалам этого урока.


Java является объектно-ориентированным языком, поэтому такие понятия как "класс" и "объект" играют в нем ключевую роль. Любую программу на Java можно представить как набор взаимодействующих между собой объектов.

Тип — это то, что определяет свойства объекта. Название типа соответствует имени своего класса. Все свойства объекта описаны в классе.

Объект — это экземпляр, созданный по шаблону соответствующего типа.

О чем говорит "тип" в мире java:

  1. размер, который поле будет занимать в памяти компьютера;
  2. мета информация — это набор различных данных, которые объект может в себе хранить и набор методов (функций), которыми он может что-то делать.

Согласно спецификации JVM — типы группируются так:

  • примитивные primitive types - быстрые в чтении/записи;
  • не примитивные reference types, они же ссылочные - сложны и медленны, но могут работать с большими значениями и обладают дополнительным функционалом.

Согласно документации перечень примитивов ограничен:

  • byte - 8bit (целочисленный)
  • short - 16bit (целочисленный)
  • int - 32bit (целочисленный)
  • long - 64bit (целочисленный)
  • char - 16bit (символьный, только один символ). Обозначается в одинарных кавычках. Например: 'a', 'D', '1', '9', '' и любые одиночные символы. Объекты char всегда заключены в одинарные кавычки.
  • float - 32bit (дробный)
  • double - 64bit (дробный)
  • boolean - true или false, 0 или 1, правда/ложь (когда-то его не было в JVM)

У каждого примитива есть свои классы-обертки, которые уже являются не примитивами. У int это Integer, у char это Character и т.д.

Все примитивные типы ограничены в своих значениях. Читаем об этом в ссылках на необходимые дополнительные материалы.

Для целочисленных вычислений эффективнее использовать тип int. Поскольку на уровне JVM для типов byte и short реализованы не все инструкции, как в случае с int. Вот в этом разделе спецификации JVM вы увидете количество определенных операций для целочисленных типов.

Поэтому используйте byte и short только для хранения массивов данных. При любых вычислениях с целыми числами — они автоматически будут приведены к типу int еще на этапе компиляции.

Например, для записи набора целочисленных данных в файле лучше использовать byte или short, в зависимости от необходимости. А, например, для счетчика (i++ он же: i += 1, i = i + 1) лучше использовать тип int. Даже если этот счетчик никогда не превысит значение 3, поскольку Java Virtual Machine просто легче работать с int.

Не примитивы (ссылочные типы) делятся на три основных вида:

  • class types - Это фактически любой класс в мире java. Например:

    • String - тип, который хранит в себе строки. Строки отличаются от char тем, что могут хранить в себе от нуля до более двух миллиардов символов. Объекты String всегда заключены в двойные кавычки: "моя строка"; даже если это один символ: "ф", "9", "j","" и т.д.
    • Long - тип-обертка над примитивом long. Позволяет производить дополнительные операции над численным типом. Например конвертируя его в String или наоборот.
    • Object - это суперкласс для всех классов, базовый класс в мире java. От него наследуются все остальные классы. И даже те, которые будете создавать Вы.

    Отдельным подвидом class types являются классы-перечисления: enum (enumerators). О них будет отдельный урок.

  • array types - массив является специальным типом. Он предназначен для содержания в себе любых других типов, в том числе и массивов (многомерные массивы). За это он и определен в отдельный вид. С массивами мы познакомимся ближе, в четвертом модуле.

  • interface - это третий специальный вид типов - пока просто запоминаем. Детально рассмотрим их далее по курсу, чтобы не перегружать этот, и так сложный, урок.

Откуда берутся эти все не примитивные типы: любой класс в java, включая написанный вами, является ссылочным типом (не примитивом), который можно применять в других классах.

Все ссылочные типы обязательно пишутся с большой буквы.

Системы исчисления

  • десятичная (0,1, 2, 3, 4, 5, 6, 7, 8, 9) --> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,15, 16, 17, 18, 19, 20, 21...
  • пятеричная (0, 1, 2, 3, 4) --> 0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24...
  • двоичная (0, 1) --> 0, 1, 10, 11, 100, 101, 110, 111...

Рекомендую к прочтению, для лучшего понимания систем исчисления:

Знаковость и без-знаковость численных типов

До Java 8 все примитивные типы были только подписанными (знаковыми). Но начиная c Java 8 Integer и Long могут быть не подписанными (unsigned). Но только не на уровне самих примитивов, а на уровне операций с ними. Есть полноценный API позволяющий выполнять все базовые операции над не подписанным (unsigned) числом, как то, например:

Для понимания знаковой/без-знаковой величины пример:

  • подписанные величины (signed) --> допустим 4 bit в двоичной (?_010) --> max = 7, min = -7. Первый бит уходит под знак, а остальные уже для кодировки числа.
  • не подписанные величины (unsigned) --> допустим 4 bit в двоичной (1010) --> max = 15, min = 0. Первый бит учавствует в кодировке числа.

Для лучшего усвоения этого важного базового материала - рекомендую решить дополнительно практическое задание

Необходимые дополнительные материалы


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

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

  • 120 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»