JavaRush /Курсы /Java Syntax /Как создавать объекты

Как создавать объекты

Java Syntax
5 уровень , 4 лекция
Открыта

— Так. С классами мы разобрались в прошлый раз. Сегодня я хочу рассказать тебе, как создавать объекты. Это очень просто: пишем ключевое слово new и имя класса, объект которого хотим создать:

Пример
Cat cat = new Cat();
Reader reader = new BufferedReader(new InputStreamReader(System.in));
InputStream is = new FileInputStream(path);

— Так я это уже слышал.

— Я знаю, поэтому слушай дальше.

— При создании объекта в скобочках можно передавать различные параметры. Об этом я расскажу сегодня, но чуть попозже. Давай рассмотрим класс Cat:

Код на Java Описание
class Cat {
    public String name;
public String getName() { return name; } public void setName(String name) { this.name = name; } }

name – это переменная класса. У нее модификатор доступа public, поэтому она видна везде в проекте.
Метод getName – это getter (произносится гЭттэр), т.е. он возвращает значение переменной-класса name. Имя метода строится по принципу get + «имя переменной с большой буквы».
Метод setName – это setter (произносится сЭттэр), т.е. он используется для присваивания нового значения переменной-класса name. Имя метода строится по принципу set + «имя переменной с большой буквы». В этом методе имя параметра совпадает с именем переменной класса, поэтому мы ставим this перед именем переменной.

— А это что еще за геттеры и сеттеры такие?

— В Java принято скрывать переменные от доступа из других классов. Обычно переменные, объявленные внутри классов, имеют модификатор private.

— Чтобы другие классы могли менять значения таких переменных, для каждой из них создается пара методов: get и set. Задача метода get вернуть текущее значение переменной тому, кто его вызвал. Задача метода set установить новое значение переменной.

— А в чем смысл?

— Если мы не хотим, чтобы кто-то менял значения переменных наших объектов, мы можем просто не писать метод set для него, или сделать его private. Также в этот метод можно добавить дополнительные проверки данных. И если переданное новое значение неверно, то ничего не менять.

— Ясно.

— Т.к. переменных в классе может быть много, то методы get и set обычно имеют в своем имени имя той переменной, с которой работают.

— Если переменная называется name, то методы setName и getName. И т.д. по аналогии.

— Ясно. Понятный, в общем-то, подход.

— Вот тебе еще пара примеров работы с новосозданным объектом:

Шаг Код Описание
1
new Cat();
Создаём объект типа Cat
2
Cat catVaska = new Cat();
Сохраняем ссылку на объект в переменную catVaska, имеющую тип Cat
3
catVaska.name = "Vaska";
catVaska.age = 6;
catVaska.weight = 4;
Заполняем объект данными: имя, возраст, вес
4
catVaska.sleep();
Вызываем метод объекта
5
catVaska.fight(catBarsik);
Взаимодействие объектов.
Комментарии (235)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
22 ноября 2022
Разве переменная класса - это не статическая переменная, которая принадлежит только классу, а не объектам?
Антон Уровень 9
19 января 2023
Видимо если объявлена через static, то - да. Но это не точно :)
Timur Khasmamedov Уровень 14 Expert
26 января 2023
Статическая - классу. Целиком. Живет без экземпляра (можно даже не создавать, все равно будет проинициализарована значением). Можно получить путем имяКласса.переменная ((или с использованием экземпляра, но это извращение)) Не статическая - объекту класса (когда создаем объект). Для нее объект придется создать, т.к. иначе доступ к переменной получить нельзя. Можно получить доступ путем имяЭзкемпляра.переменная (ну или через методы, если например приватная).
Grock Уровень 44
29 июля 2022
"Метод getName – это getter (произносится гЭттэр)" но ведь: [ɡet] произносится как гЕт (источник)
Абдурахман Уровень 12
23 февраля 2022
https://www.youtube.com/watch?v=9Uo8SYk7lbk&ab_channel=Followthewhiterabbit
Anonymous #2794872 Уровень 4
7 сентября 2021
ок
1 июля 2021
Один ютубер жаловался, что на джавараш нету геттеров и сеттеров. Шах и мат, ютубер. А так, понятно. У тебя есть приватный метод. И ты его хочешь оставить приватным, чтобы из других классов не бралась информация из него. Но если оооочень хочется - пишешь геттер-сеттер и берешь, невзирая на запреты.
hidden #2667029 Уровень 17
2 июля 2021
Если метод приватный ты его никак не вызовешь с другого класса, он скрыт для других классов. Когда ты пишешь геттеры и сеттеры с их помощью можешь получать или изменять приватные переменные КЛАССА, но не метода. Переменные внутри метода живут только до конца выполнения самого метода, если ты попытаешься получить переменные приватного метода с внешнего класса то ничего не получится. P.S. Что за ютубер, можно имя?
5 июля 2021
Мимолетный ютубер из ленты, уже и не вспомню. Не из милионников, записал на селфи камеру мнение и залил.
hidden #2565693 Уровень 10
2 июня 2021
"С классами мы разобрались в прошлый раз ..." - тема "Классы" стоит следующей)
zero to hero Уровень 44
6 марта 2023
Я наверное не один пошел в Карту квестов смотреть содержание курса и как я мог пропустить ... 😮
Юличка Уровень 32
30 мая 2021
ничего не понятно
xseiter Уровень 11
1 июня 2021
в следующих лекциях будет более понятно, вот в этой статье есть полезная информация, касающаяся данной темы https://javarush.com/groups/posts/1988-modifikatorih-dostupa-private-protected-default-public
Ян Уровень 24
2 октября 2021
Крутой уровень, Юлия! 32. Наверно сейчас всё это кажется элементарным)
Anonymous #2288933 Уровень 8
1 февраля 2021
Есть 2 варианта записи:

Reader reader = new BufferedReader(new InputStreamReader(System.in));
и

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
В чём разница BufferedReader и Reader?
Кирилл Уровень 35
4 февраля 2021
Класс Reader является абстрактным и определяет потоковый ввод символов в Java. Абстрактный класс пройдёшь позже. Если коротко, то он является шаблоном для других классов содержащих в себе Reader и для BufferedReader в том числе. То есть в пакете java.io имеется "класс-шаблон" Reader, который рассширяют другие классы этого пакета имеющие названия ......Reader. А class BufferedReader extends Reader увеличивает производительность благодаря буферизации ввода.
Anonymous #2288933 Уровень 8
4 февраля 2021
Окей, что-то понял. Спасибо!
Valua Sinicyn Уровень 41
11 февраля 2021
Reader - абстрактный класс посимвольного считывания данных, т.е., шаблон реализации и суперкласс в одном лице для всех посимвольно считывающих классов. Содержит абстрактные методы переопределяемые (реализуемые) в подклассах, но не может создавать объекты на своей основе (абстрактный же :)). Т.е.,
 
Reader reader = new Reader();
 
выбросит ошибку. BufferedReader его подкласс, считывающий символы в два этапа: 1 - считывание символов из источника (строки или файла) пакетами в специально выделенную область памяти (буфер); 2 - считывание символов непосредственно из буфера. Профит - быстрее в сравнении с StringReader и FileReader, т.к., не обращается к источнику каждый раз для считывания символа или строки. Как то так... :)
Perl Developer Уровень 1
11 января 2023
BufferedReader и Reader - это оба класса в языке программирования Java, но они используются для разных целей. BufferedReader - это класс, который используется для чтения текста из потока ввода символов, буферизуя символы таким образом, чтобы обеспечить эффективное чтение символов, массивов и строк. Это подкласс класса Reader, и он добавляет механизм буферизации к входному потоку, который может повысить производительность за счет уменьшения количества обращений к базовому входному потоку. Reader, с другой стороны, - это абстрактный класс, который является суперклассом всех классов, считывающих потоки символов. Он определяет методы для чтения символов, массивов и строк, но не включает механизм буферизации. Когда вы создаете новый BufferedReader(новый InputStreamReader(System.in )) он создает новый InputStreamReader из стандартного ввода и буфера поверх него и сохраняет его в переменной типа BufferedReader, так что вы можете использовать все методы из класса BufferedReader и Reader. Когда вы создаете новый Reader (новый BufferedReader(новый InputStreamReader(System.in ))), он создает новый InputStreamReader из стандартного ввода, создает буфер поверх него и сохраняет его в переменной типа Reader, так что вы можете использовать весь метод из класса Reader, но не все методов BufferedReader. Поскольку BufferedReader является подклассом Reader, вы можете назначить объект BufferedReader переменной типа Reader.
iDSDDR Уровень 10
28 января 2021
рекомендую к прочтению!
Стас Уровень 20
2 февраля 2021
Долгий въезд и что-то затеплилось в понимании геттеров и сеттеров..... еще видео ниже посмотрю сегодня, и надеюсь будет понятнее..
iDSDDR Уровень 10
2 февраля 2021
на начальном этапе советую просто запомнить эту конструкцию. позже, когда будете работать в IDE, эти штуки создаются пачками комбинацией трех клавиш с клавиатыры