Элементарные типы данных и переменные
Java предоставляет множество элементарных типов данных. Под каждый тип данных выделяется строго фиксированное количество бит, определенное в официальной документации. Еще одним отличием Java от других языков является тот факт что все типы данных содержат бит выделенный под знак и избавится от него нельзя. В таблице представлены параметры всех типов данных.
Переменная – это область памяти, выделенная для хранения какого-либо значения.
Литералы
Литералами называют константные значения, представленные в явном виде. Например:
int i = 5; // 5-литерал
Для каждого литерала выделяется отдельная область памяти. Разберем сколько именно памяти выделяется под тот или иной тип литерала.
В случае если мы представили литерал в целочисленном виде, то для него выделяется 32 бита, а сам литерал имеет тип int. Но в случае если переменной меньшего размера присваивается целое число, оно автоматически конвертируется в значение той переменной.
Символьный литерал имеет тип char и обозначается в одинарных кавычках:
char ch = «h’; // символьный литерал
все дробные числа изначально имеют тип double. Если попробовать присвоить дробное число переменной типа float, то это вызовет ошибку. Простой способ присвоить число переменной float – это конце числа подставить символ F:
float f = 2.0F;// переменная типа float
Так же в Java присутствуют булевы тип. Литералы этого типа имеют всего два значения: true и false. В случае присвоения другого значения булевой переменной, компилятор выдаст ошибку.
Введение в ООП
Java является объектно-ориентированным языком программирования. Определяющими понятиями данной парадигмы программирования можно назвать класс и объект.
Класс – это тип данных определяемый разработчиком.
Объект – это экземпляр класса. Давайте разберем более подробно, что это значит.
В классе мы задаем поведение и все необходимые параметры (переменные, объекты других классов) и поведение (методы и конструкторы) объекта данного класса. При создании и инициализации объекта выделяется необходимый объем памяти, ровно столько сколько было прописано в классе, так же объекты вынуждены подчиняться поведениям, описанных в классе.
Приведу пример: допустим нам необходимо реализовать класс учебной группы. В качестве параметров можно принять количество студентов (может выступать переменная int numberStud), наименование группы (например объект класса String name), так же необходимо указать какие именно студенты будут входит в состав группы (можно сделать массив объектов класса студентов, который в свою очередь тоже имеют свои параметры и свое поведение). в процессе существования группа может: поменять имя, поменять количество студентов, прекратить свое существование и другое. Это и называется поведение объекта. В процессе написания программы программист всячески совершает над объектами различные действия. Все эти действия необходимо прописать в нашем классе, иначе они попросту не смогут выполняться.
Еще одними из определяющими понятиями в ООП (не только в Java) являются: полиморфизм, наследование и инкапсуляция. Это своего рода принципы (свойства) на которых построена парадигма ООП, именно на них она и базируется.
Наследование
В рамках объектно-ориентированного программирования любой класс может унаследовать некоторые свойства от другого класса. Такой принцип называется наследованием. В качестве свойств могут выступать методы, переменные и тд.
Разберем пример: пусть нам необходимо описать породу собаки в нашем классе. Существуют довольно много собачьих пород, которые в свою очередь обладают уникальными свойствами. Для каждой породы нам придется написать свой собственный класс. В то же время все породы обладают параметрами, присущие абсолютно для всех собак. У нас есть вариант описать абсолютно все свойства в каждом классе, в том числе уникальные для каждой породы и универсальные, присущие для всех пород, но это займет много кода и вовсе усложнит задачу. Можно просто создать главный класс собак, описать в нем параметры и поведение, которые есть у всех и класс, описывающую конкретную породу унаследовать от главного.
Инкапсуляция
При создании классов важно помнить об уровне защиты компонентов. Важно не допускать, чтобы код, содержащийся вне класса, не влиял без надобностей на данные класса. Это может произойти, например, по вине программиста, в особенности, если он работает в команде, и по другим причинам. Последствия могут быть довольно плачевные. Суть инкапсуляции состоит в том, что для данных и кода, который работает с данными, условно создается рабочее пространство. Тем самым программу можно разделить на несколько систем, внутри которых происходит вся работа с данными, но снаружи никак не влияющие на работу другой системы. Это делается для того, чтобы защитить данные от плохого влияния стороннего кода.
Конечно же программно эти пространства никак не описываются. Защищенность данных достигается путем присваивания модификаторов доступа.
Как пример могу привести работу автомобиля. Его можно воспринимать как программу. Разберем работу коробки передач. Она хранит в себе множестве сведений: максимальное количество передач, текущая включенная передача, конструкция – все это можно назвать данными. В ходе работы в ней происходят множество процессов, которые изменяют эти данные. При этом коробка не влияет, например, на систему световых приборов. Обе эти системы работают независимо друг от друга. В этом и есть суть инкапсуляции.