Простейший класс в java

Классные классы

— Сегодня я подробно расскажу тебе, что такое классы.

Объяснение номер 1. Начну с аналогии. Все вещи в физическом мире состоят из атомов. Атомы могут быть разных типов: водород, кислород, железо, уран, … Комбинируя такие атомы можно создавать различные молекулы, вещества и предметы.

— Атомы в свою очередь тоже имеют некоторую внутреннюю структуру. Внутри них содержатся электроны и ядро: протоны и нейтроны.

— Да, я имею общее представление об устройстве атомов. Я же робот.

— Так вот, в мире Java все очень похоже. Программы состоят из объектов, которые бывают разных типов (классов) . Различные классы в свою очередь имеют различные внутренние структуры: переменные и методы.

— Если рассмотреть программу в целом, то объекты – это блоки, из которых состоит программа. А классы – это типы этих блоков. Блоки разных типов являются объектами разных классов.

— Объяснение номер 2. Когда нам нужен новый тип объектов, мы создаем новый класс, и внутри него описываем нужное нам поведение этих объектов.

— Что-то как-то уж слишком размыто это звучит. Вроде и понятно, но ничего конкретного.

— С точки зрения внутренней структуры, класс состоит из методов класса, которые что-то делают и переменных класса, в которых эти методы хранят различные данные.

— Т.е. если очень просто, то класс – это набор методов?

— Почти, точнее будет сказать, что класс – это группа методов, работающих вместе, и переменные, в которых эти методы хранят различные значения, которыми пользуются сообща.

— Ага. И чтобы создать новый класс нам нужно написать эти методы…

— Да. А также решить, какие общие переменные есть у различных методов, и вынести эти переменные из метода в класс: сделать переменные метода переменными класса.

— Создание класса происходит примерно по такой схеме:

1. Программист решает, какие еще объекты ему нужны.

2. Программист разбивает эти объекты на различные типы в зависимости от того, что они должны делать.

3. Для каждого типа программист пишет свой отдельный класс.

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

5. В каждом методе пишутся команды, чтобы метод делал то, что хочет от него программист.

6. Класс готов, можно создавать его объекты.

— Круто! Интересная схема. Надо будет запомнить

— Запоминай – пригодится. Подход к программированию, при котором программа разбивается на объекты, называется «Объектно-Ориентированное Программирование ( ООП )».

— Java – это классический пример ООП подхода: в Java объектами является всё.

— Изучение Java состоит из двух больших задач: учимся писать свои классы , учимся использовать чужие классы . Сегодня мы начнем с самого простого. Будем учиться писать простенькие классы и, конечно, создавать их объекты. Объекты часто еще называют экземплярами классов. Это синонимы: правильно и так и так.

— Если подытожить всё, что я сказала, то можно сказать, что класс – это мини программа: набор данных и функции, которые что-то с этими данными делают. Важной особенностью классов является возможность создавать экземпляры этих классов – объекты.

— Для того, чтобы создать объект класса, в коде надо написать « new имя_класса() ». Примеры:

Reader reader = new BufferedReader(new InputStreamReader(System.in));
InputStream is = new FileInputStream(path);

— У объекта класса есть две интересные особенности:

Первая. Каждый объект класса хранит свою собственную копию переменных класса. Т.е. если в классе объявлены переменные «x,y» и создано 10 объектов такого класса, то в каждом объекте будут свои переменные. Изменение переменных одного объекта не влияет на переменные другого объекта.

Вторая. При создании объекта, в него можно передавать различные параметры. Это так называемые «стартовые значения». Это почти как дать имя при рождении. Многие объекты не могут быть созданы, если в них не передать такие параметры.

— Немного понятно. А что ты говорила про переменные класса?

— У каждого объекта есть его копия данных – переменных класса.

Cat cat1 = new Cat(); cat1.name = "Vaska"; Cat cat2 = new Cat(); cat2.name = "Mashka"; System.out.println(cat1.name); System.out.println(cat2.name);

Источник

Классы и создание объектов классов

На предыдущем занятии мы с вами познакомились с общей концепцией ООП. Но, чтобы вы могли все это использовать на практике, в частности, на языке Java, нужно знать как реализуются ее элементы. И, как всегда, начнем по порядку с самого начала – описания способа объявления классов и создания его объектов (экземпляров).

Во всех наших прежних программах у нас фигурировали строчки:

Смотрите, здесь вначале используется ключевое слово class, за которым следует его название – Main. Далее, открываются фигурные скобки и записывается функция main(), которая является точкой входа в программу. Это пример того, как можно объявлять класс. Начальный синтаксис здесь такой:

[модификаторы] class <
данные (переменные класса);
методы (функции класса);
другие классы и интерфейсы.
>

Как видите, внутри класса можно объявлять переменные, методы, вложенные классы и интерфейсы (что такое интерфейс мы будем говорить позже). Фактически, класс может содержать любые конструкции языка Java и иметь произвольный, самый изощренный функционал.

Конечно, сейчас мы изощряться не будем, а объявим в нашей программе простейший класс и, обычно, я выбираю класс для представления точек на плоскости:

Все, вот так просто можно добавить свой собственный класс в программу. Имя этого класса Point и он содержит два поля (две переменные) x и y.

Здесь сразу следует сделать два замечания:

1. В языке Java каждый новый класс принято записывать в отдельном файле проекта. Причем, имя файла должно совпадать с именем класса – это требование языка.

2. Объявление класса может находиться в любом месте программы. Это никак не влияет на возможность его использования, где бы то ни было в рамках проекта.

Например, мы можем создать ссылку типа Point в функции main(), несмотря на то, что сам класс объявлен после нее:

Я пока оставлю объявление класса в этом же файле для упрощения изложения материала. Итак, мы создали ссылку pt на класс Point. Посмотрим повнимательнее на эту запись. Что из нее следует? Да, имя класса можно воспринимать как новый тип данных. И этот тип данных формирует ссылки на соответствующие объекты. Обратите внимание, я произношу слово «ссылка», а не «переменная». В чем разница? Ссылка – это скрытый указатель, который хранит адрес объекта, на который ссылается, а переменная любого примитивного типа – это имя ячейки памяти, в которой непосредственно хранятся данные:

В этом принципиальная разница между ссылками и обычными переменными. Как же узнать, когда мы работаем со ссылками, а когда с переменными? Очень просто:

Если в качестве типа данных используется имя класса или интерфейса, то формируется ссылка. Если же используется примитивный тип данных (например, int, short, double, bool и т.п.), то объявляется обычная переменная.

Итак, мы создали ссылку на класс Point. Но самого объекта в памяти еще нет. Для его создания используется оператор new, за которым указывается имя класса создаваемого экземпляра:

Все, теперь у нас появился новый объект и на него ссылается переменная pt:

Что, если мы захотим создать еще один такой же объект. Давайте это сделаем вот так:

Мы здесь создаем еще один экземпляр класса Point в памяти устройства, и на него ссылается та же переменная pt. В итоге произойдет следующее:

Прежняя ссылка pt изменит свой адрес и будет ссылаться только на второй объект. Что произойдет с первым? Он так и останется в памяти «безымянным солдатом»? Без единой ссылки? Ссылок на него действительно не будет и пользоваться им мы уже не сможем. Но в памяти он не останется – он будет автоматически уничтожен сборщиком мусора. Это одно из ключевых отличий языка Java от языка C++ – наличие сборщика мусора. Благодаря ему, программист в Java может не беспокоиться об удалении ненужных объектов, то есть, объектов, на которые нет внешних ссылок. И это предотвращает неприятную историю, известную, как «утечка памяти», когда ненужные объекты остаются в памяти и постепенно накапливаются по мере работы программы. Это частая проблема языка C++ и, к счастью, в Java ничего подобного нет. Как мы потом увидим, это значительно упрощает программы и увеличивает гибкость программного кода.

Итак, мы научились объявлять классы и создавать его экземпляры. Как теперь обратиться к полям x, y созданного объекта и записать туда числовую информацию? Для этого используется следующий синтаксис:

Например, для доступа к полям через ссылку pt мы должны записать следующее:

В результате, в объект, на который ссылается переменная pt будут записаны числа 1 и 2:

Соответственно, их можно потом прочитать оттуда, например, так:

System.out.println("x = " + pt.x + ", y = " + pt.y);

Вот так в самом простом варианте происходит запись и чтение данных из полей объекта. Причем, если создать еще один объект класса Point и записать туда другие числовые значения:

Point pt2 = new Point(); pt2.x = 10; pt2.y = 20; System.out.println("x = " + pt2.x + ", y = " + pt2.y);

То это будут совершенно другие данные, никак не связанные с первыми. То есть, мы получим два независимых объекта класса Point.

Вот так в простейшем случае объявляются классы в Java и создаются их экземпляры. На следующем занятии мы продолжим эту тему и поговорим о конструкторах класса.

Подвиг 1. Объявить класс Point3D для хранения координат трехмерного пространства. Создать три таких объекта, записать в них различные координаты и вывести их поля в консоль.

Подвиг 2. Объявить класс Line, который бы хранил две координаты: начало и конец линии. Создать два таких объекта, записать и вывести по ним информацию в консоль.

Видео по теме

#11 Концепция объектно-ориентированного программирования (ООП)

#12 Классы и создание объектов классов

#13 Конструкторы, ключевое слово this, инициализаторы

#14 Методы класса, сеттеры и геттеры, public, private, protected

#15 Пакеты, модификаторы конструкторов и классов

#16 Ключевые слова static и final

#17 Внутренние и вложенные классы

#18 Как делается наследование классов

#19 Ключевое слово super, оператор instanceof

#20 Модификаторы private и protected, переопределение методов, полиморфизм

#21 Абстрактные классы и методы

#22 Интерфейсы — объявление и применение

#23 Интерфейсы — приватные, статические и дефолтные методы, наследование интерфейсов

#24 Анонимные внутренние классы

#26 Обобщения классов (Generics)

#27 Ограничения типов, метасимвольные аргументы, обобщенные методы и конструкторы

#28 Обобщенные интерфейсы, наследование обобщенных классов

© 2023 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта

Источник

Читайте также:  Установить java на опера
Оцените статью