как объявить класс в коде java команда
Классы и объекты
Классы
Java позволяет создавать классы, которые представляют объекты из реального мира. Например, можно создать класс Car (автомобиль) или Animal (животное) и задать им различные свойства. Для класса Car логично создать такие свойства как двери, колёса, лобовое стекло и т.д. Имея класс Car, можно создать новые классы Легковушки, Грузовики, Автобусы, которые будут иметь все свойства класса Car, а также свои собственные свойства. У класса Animal соответственно можно задать свойства Лапы, Хвост, а затем создать наш любимый класс Cat, у которого будет ещё дополнительное свойство Усы. Иными словами, классы могут наследовать свойства от других классов. Родительский класс называется суперклассом. Внутри классов могут быть объявлены поля и методы.
Для объявления класса служит ключевое слово class. Вспомним стандартную строчку кода из Android-проекта:
Упрощённая общая форма для класса может иметь следующий вид:
В Java принято начинать имена класса с большой буквы. В классе могут быть несколько переменных и методов. Переменные, определённые внутри класса (не метода), называются переменными экземпляра или полями (fields). Код пишется внутри класса. Методы и переменные внутри класса являются членами класса.
Объекты
Новый объект (или экземпляр) создаётся из существующего класса при помощи ключевого слова new:
В большинстве случаев вы будете использовать такой способ. Пусть вас не удивляет, что приходится дважды использовать слово Cat, оно имеет разный смысл.
Если вы помните, при объявлении примитивных типов мы указывали нужный тип в самом начале.
Поэтому код Cat barsik также определяет его тип. Он не всегда может совпадать с именем класса.
В этом примере используется тип класса домашних любимцев Pet, а обращаемся к классу котов Cat.
Простой пример создания класса Box (коробка для кота):
При таком варианте Java автоматически присвоит переменным значения по умолчанию. Например, для int это будет значение 0. Но не всегда значения по умолчанию подойдут в вашем классе. Если вы создали переменную для описания количества лап у кота, то логично сразу присвоить значение 4. Поэтому считается хорошей практикой сразу присваивать нужные значения полям класса, не полагаясь на систему.
Вам нужно создать отдельный файл Box.java, в который следует вставить код, описанный выше. О том, как создавать новый файл для класса я не буду здесь расписывать.
Красивая получилась коробочка.
Объект catBox, объявленный в коде вашей программы, сразу займёт часть памяти на устройстве. При этом объект будет содержать собственные копии переменных экземпляра width, height, depth. Для доступа к этим переменным используется точка (.). Если мы хотим присвоить значение переменной width, то после создания объекта класса можете написать код:
Если мы хотим вычислить объём коробки, то нужно перемножить все значения размеров коробки:
Каждый объект содержит собственные копии переменных экземпляра. Вы можете создать несколько объектов на основе класса Box и присваивать разные значения для размеров коробки. При этом изменения переменных экземпляра одного объекта никак не влияют на переменные экземпляра другого объекта. Давайте объявим два объекта класса Box:
Обычно такую конструкцию из двух строк кода не используют на практике, если нет особых причин.
Когда мы используем ключевое слово new и указываем имя класса, то после имени ставим круглые скобки, которые указывают на конструктор класса. О них поговорим позже.
Ключевое слово final
Поле может быть объявлено как final (финальное). Это позволяет предотвратить изменение содержимого переменной, по сути, это становится константой. Финальное поле должно быть инициализировано во время его первого объявления.
Теперь можно пользоваться переменной FILE_OPEN так, как если бы она была константой, без риска изменения их значений. Принято записывать имена заглавными буквами.
Кроме полей, final можно использовать для параметров метода (препятствует изменению в пределах метода) и у локальных переменных (препятствует присвоению ей значения более одного раза).
Также слово final можно применять к методам, чтобы предотвратить его переопределение.
Иногда требуется проверить, к какому классу принадлежит объект. Это можно сделать при помощи ключевого слова instanceof. Это булев оператор, и выражение foo instanceof Foo истинно, если объект foo принадлежит классу Foo или его наследнику, или реализует интерфейс Foo (или, в общем виде, наследует класс, который реализует интерфейс, который наследует Foo).
Возьмём пример с рыбками, которые знакомы котам не понаслышке. Пусть у нас есть родительский класс Fish и у него есть унаследованные подклассы SaltwaterFish и FreshwaterFish. Мы можем протестировать, относится ли заданный объект к классу или подклассу по имени
Оператор import сообщает компилятору Java, где найти классы, на которые ссылается код. Любой сложный объект использует другие объекты для выполнения тех или иных функций, и оператор импорта позволяет сообщить о них компилятору Java. Оператор импорта обычно выглядит так:
В Android Studio импорт класса происходит автоматически при наборе кода. Также это срабатывает и при вставке кода. Если имена классов совпадают, то студия может запросить помощь. Тогда вам нужно вручную указать нужное полное имя класса.
Импорт позволяет избежать долгого набора имени класса. Без импорта нам пришлось бы писать все классы в коде программы полностью.
Статический импорт
Существует ещё статический импорт, применяемый для импорта статических членов класса или интерфейса. Это позволяет сократить количество кода. Например, есть статические методы Math.pow(), Math.sqrt(). Для вычислений сложных формул с использованием математических методов, код становится перегружен. К примеру, вычислим гипотенузу.
В данном случае без указания класса не обойтись, так как методы статические. Чтобы не набирать имена классов, их можно импортировать следующим образом:
После импорта уже нет необходимости указывать имя класса.
Второй допустимый вариант, позволяющий сделать видимыми все статические методы класса:
В этом случае вам не нужно импортировать отдельные методы. Но такой подход в Android не рекомендуется, так как требует больше памяти.
Класс Class
На первый взгляд, класс Class звучит как «масло масляное». Тем не менее, класс с таким именем существует и он очень полезен.
Программно получить имя класса
Иногда из программы нужно получить имя используемого класса. Для этого есть специальные методы getClass().getName() и другие родственные методы. Допустим, нам нужно узнать имя класса кнопки, на которую мы нажимаем в программе.
getSimpleName() возвращает только имя класса без пакета, другие методы вернут полное название.
Если нужно узнать имя класса активности, то достаточно кода:
Если вам известно имя класса, то можете получить сам класс:
Метод getSuperclass() возвращает имя суперкласса. Остальные несколько десятков методов не столь популярны.
Создание класса в java
Создавать класс мы будем в программе Ecllipse, но также можно работать в любой другой IDE или в блокноте. В качестве примера мы будем создавать класс, который описывает характеристики и поведение кота.
В итоге, у нас создался новый класс (рис 5.2).
Структура класса в java
Класс в java оформляется с помощью следующей конструкции:
Рассмотрим ее составляющие:
public – модификатор доступа к классу, в данном случае он нам говорит, что этот класс будет доступен не только данному классу, но и другим. В java существуют и другие модификаторы, но об этого поговорим позднее.
class – ключевое слово, говорящее о том, что это класс.
Cat – имя класса. Имена классов принято писать с заглавной буквы.
< >– фигурные скобки, между которыми разместится тело нашего класса.
В предыдущем уроке мы упоминали, что классы в java состоят из атрибутов и методов, присвоим некоторые и нашему коту.
Атрибуты класса Сat
Атрибутами кота могут быть: имя, вес, окраска. Атрибуты это переменные, которые объявляются следующим образом:
private – здесь опять же указывает на права доступа. К переменной, в данном случае, можно обращаться только из ее класса, чтобы классы извне не могли ее изменить (вспомним инкапсуляцию из урока 4).
int, String – это типы данных. В данном случае вес будет задан при помощи целого числа – int, a имя и цвет при помощи символьной строки String.
После объявления каждого атрибута должна ставиться точка с запятой ;
При помощи // в коде программы оформляются комментарии, которые являются правилом хорошего тона.
Методы класса Сat
Пусть наш кот умеет есть, спать и разговаривать. Опишем это поведение с помощью методов.
public void eat() – сигнатура метода, его определение. В данном случае она нам говорит о том, что:
eat – имя метода. Имена методов, в отличие от имен классов, принято писать с маленькой буквы. На конце каждого метода после имени всегда идут круглые скобки ( ), пустые или содержащие параметры (об этом позднее).
После сигнатуры метода идут фигурные скобки < >. В них содержится тело метода. Тело нашего метода содержит просто вывод сообщения о том, что кот кушает — "Eating. \n". За вывод текстового сообщения отвечает метод System.out.print("Eating. \n").
\n — символ перевода строки, чтобы при выводе наших сообщений все они не писались в одну строку.
Аналогично предыдущему методу опишем спящего кота:
И немного иначе опишем метод – кот говорит:
В отличие от предыдущих методов этот метод возвращает значение и имеет входные параметры. Давайте подробнее рассмотрим сигнатуру метода public String speak(String words):
public — метод speak() доступен для других классов;
String — тип значения, которое возвращает метод. В предыдущих случаях ключевое слово void указывало на то, что метод ничего не возвращает. В данном случае String указывает на то, что метод возвращает значение типа строка.
Что же это значит? В процессе своей работы метод выполняет определенные действия над данными. Иногда необходимо, чтобы результат этих действий был передан для дальнейшей обработки другим классам, в этом случае метод передает (возвращает) этот результат. Эти возвращаемые данные относятся к какому-либо типу. В нашем примере это тип символьной строки, String.
Возвращающие методы должны содержать в своем теле ключевое слово return, которое указывает на то, что именно возвращает данный метод. В нашем случае это переменная phrase.
speak — имя метода.
(String words) — входные параметры. Входные параметры — это какие-либо данные, которые передаются из других классов и, которые метод должен обработать. Наш метод получает в качестве входных данных строку в виде переменной words, к этой строке дописывает «. mauu. » и возвращает то, что получилось.
В итоге класс Cat выглядит следующим образом:
Обращение к классу в Java
Далее рассмотрим обращение к классу Cat. И то, как его использовать в работе.
public static void main(String[] args) – сигнатура метода main(). Программа состоит из нескольких классов, но только один из классов может содержать метод main(). Mетод main(), это так называемая точка входа в программу. Без этого метода мы не сможем стартовать программу. Теперь, вместо приветствия миру, этот метод будет содержать код для работы с классом Cat.
Пишем в тело метода main() (между его фигурными скобками) следующие строки:
Разберем подробнее, что это значит.
Прежде чем вызывать созданные нами методы в классе Cat и заставить нашего кота есть, спать и говорить, сперва нужно создать экземпляр класса (инстанцию).
Данная строчка нам говорит о том, что в памяти создан экземпляр объекта Cat, а переменная ourcat типа Cat (такого же, как и наш объект) указывает на то место в памяти, где был этот объект создан.
Переменную ourcat теперь можно использовать для вызова методов класса Cat, например:
При вызове этих методов в программе Eclipse удобно пользоваться комбинацией клавиш
Ctrl + пробел, после введения имени переменной и точки (рис 5.4). Программа подскажет, какие можно использовать методы для данной переменной.
Если метод возвращает какое-либо значение, например, как наш метод speak() возвращает значение типа String, то его можно вызывать следующим образом:
Вспомним, что при описании нашего метода он содержал параметры speak(String words). Теперь, при вызове в качестве параметра выступила фраза "Play with me", метод speak() ее обработал и вернул "Play with me. mauu. ". Именно это значение он присвоил переменной say.
Мы это можем проверить, выведя say на печать при помощи команды:
Итак, наш класс HelloWorld теперь выглядит следующим образом:
Теперь сохраним (Ctrl+Shift+S или ) и запустим (
) нашу программу. При запуске Eclipse может предложить выбрать Java Applet или Java Application. Нужно выбрать Java Application (рис 5.5).
В качестве результата внизу в консоли мы получаем следующие строки.
На этом закончим данный урок, итак, в этом уроке мы:
Для закрепления материала предлагаю самостоятельно создать класс Dog, где описать характеристики и поведение собаки, а потом вызвать этот класс из HelloWorld. Свои вопросы можете оставлять в комментариях.
Комментариев к записи: 115
При создании проекта выводится ошибка:
Build path specifies execution environment CDC-1.1/Foundation-1.1. There are no JREs installed in the workspace that are strictly compatible with this environment.
Чем это решить?
посмотрите тут https://www.eclipse.org/forums/index.php/t/685160/ или еще погуглите, я лично с таким не сталкивалась.
Здравствуйте!
Скажите пожалуйста, обязательно ли указывать права доступа конкретно для каждого атрибута в классе?
Если не указать, программа по умолчанию будет считать эти атрибуты доступными для любого класса в пакете, если вас такие права устраивают, то можете не указывать
Классы и создание объектов классов
На предыдущем занятии мы с вами познакомились с общей концепцией ООП. Но, чтобы вы могли все это использовать на практике, в частности, на языке 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:
Соответственно, их можно потом прочитать оттуда, например, так:
Вот так в самом простом варианте происходит запись и чтение данных из полей объекта. Причем, если создать еще один объект класса Point и записать туда другие числовые значения:
То это будут совершенно другие данные, никак не связанные с первыми. То есть, мы получим два независимых объекта класса 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 Абстрактные классы и методы
#24 Анонимные внутренние классы
#25 Перечисления (enum)
#26 Обобщения классов (Generics)
#27 Ограничения типов, метасимвольные аргументы, обобщенные методы и конструкторы
#28 Обобщенные интерфейсы, наследование обобщенных классов
© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта