Введение в Java
2026-02-26 17:20 Diff

Это базовые знания языка 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 — 1bit, 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) числом, как то, например:

— сравнение: https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#compareUnsigned-long-long- — деление: https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#divideUnsigned-long-long- — взятие остатка от деления: https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#remainderUnsigned-long-long-

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

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

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