2. JAVA. Базовые конструкции языка | Технострим

preview_player
Показать описание
Курс "Разработка на Java"
Лекция №2 "Базовые конструкции языка Java"
Лектор - Рустам Кильдиев

Цель курса —создание рабочего приложения и получение необходимых навыков и опыта в области разработки программного обеспечения. По окончании курса студенты должны знать синтаксис и основные библиотеки языка Java, понимать объектно-ориентированный подход, уметь декомпозировать сложные задачи.

Получаемые навыки:
Основные конструкции языка, объекты и классы. Ввод и вывод в Java - консольный, файловый, сетевой. Интерфейсы и абстрактные классы, анонимные классы. Лямбда-функции. Сетевое взаимодействие, сокеты. Механизм исключений. Проверяемые и непроверяемые исключения. Потоки - жизненный цикл, прерывание. Критическая секция. Проблемы взаимодействия (дедлок). Механизм wait/notify, блокирующие очереди producer/consumer. Коллекции, выбор структуры данных, подходящей для задачи. Параметризованные коллекции. Параметризация в Java.

СМОТРИТЕ ТАКЖЕ:

#java #программирование

--

НАШИ ПРОЕКТЫ:

Мы готовим квалифицированных специалистов для российского рынка веб-разработки.
У нас - бесплатное практико-ориентированное обучение под руководством лучших специалистов Mail.Ru Group. Преподавание строится на примерах из реальной практики, существующих проектов, с анализом их достоинств и недостатков.

Лучшие студенты получают возможность стажировки в Mail.Ru Group.
Отбор в проекты проходит каждые полгода.

МЫ В СЕТИ:
Рекомендации по теме
Комментарии
Автор

30:40 Есть золотое правило - написал пример - запусти его и проверь как он работает, прежде чем показывать своим студентам. Должно быть == вместо !=

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

baev
Автор

это надо уметь - простые вещи объяснить так, чтобы никому ничего не было понятно. Пятый год работаю с джавой, в первые слышу, чтобы передачу по ссылке/значению объясняли так оригинально)

eugene
Автор

Все параметры в Java передаются по значению. В методе создается их локальная копия.
Для примитивных типов создается копия значения. Соответственно, действия над этой копией никак не влияют на оригинал.
Для объектов тоже создается копия - копия ссылки на объект. У нас получается 2 ссылки, которые указывают на одно и то же место. Если мы изменим "внутренности" объекта - он изменится, и это будет видно и при доступе изнутри метода (по ссылке-копии), и при доступе извне (по ссылке-оригиналу).
При этом если мы, например, внутри метода присвоим переменной другой объект - ссылка-оригинал так и будет указывать на старый объект.
Что касается String - он immutable, то есть однажды заданное значение в памяти не меняется. Можно только изменить ссылку на него. Соответственно, он тут ведет себя так же, как примитивные типы.

АнастасияЩекотина
Автор

Хорошо, что это были не первые уроки по Java, которые я посмотрел...

ProgulkiPoYupiteru
Автор

Можно же элементарно сказать, что примитивные типы и String передаются по значению (пусть и не в полном смысле как в С), а любые другие классы передаются по ссылке (то есть тоже по значению, но так как хранят ссылку на объект, то с внутренностями объекта можно работать как с переданным по ссылке). После его лекции нихрена не смог понять, пока не поэкспериментировал и не подумал несколько раз сам. Отличие от С только в том, что "по ссылке" можно работать только вызывая функции объекта или обращаясь к его полям, изменение самих объектов или присвоение им null снаружи функции не видно. Поэтому и происходит то, что он демонстрировал.

Andreyhello
Автор

Если проводить аналогию с си, наверное, лучше сказать, что в Java все переменные, кроме базовых типов, являются указателями. Именно указателями, а не ссылками, тогда, кажется, все встает на свои места

АндрейПолуянчик-зм
Автор

И в чем отличие от С/С++ в передаче по значению? Также значения передаются на стеке и по завершении выполнения стек очищается. Впечатление, что у преподавателя в этих вопросах каша с пониманием. Но человек - хороший )

pavelgorbatyuk
Автор

Есть практические занятия? Скиньте ссылку

almtg
Автор

Хэндлеры ввода вывода как то странно называются стримами, потоками. Потоками обычно называются совсем другие сущности в работе ОС. Преподавателю не хватает знаний именно работы операционной системы на уровне третьего кольца Ring3 операционной сиcтемы (стек, работа буферов, перенаправление ввода/вывода, передача по ссылке и значению и т.д.). Рассуждения об оперативной памяти, доступной из си - улыбнуло

GerasimChenchenko
Автор

GC все ясно - пока есть ссылка которая ссылается на объект, то GC не будет удалять его, но вопрос вот в чем, причём тут метод StringWrap()? И переменные(ладно переменные имеют ПОЧТИ ту же структуру как с объектами) ?

almtg
Автор

Хотелоь бы домашнее задание тоже увидеть

zippo
Автор

Даааа.... Про String конечно было плохо рассказывать! Так как String объект константа! При попытке поменять создается новый объект! И в методы все по значению передается!

djabramovskih
Автор

Или мои преподаватели были в танке или я так плохо слушал, но не легче было объяснить что static это сразу выделенная память под класс, тобишь уже реализированный объект ? Честно вообще сложно понять про это объяснение, но вроде смысл был тот-же

tambules
Автор

Если б не знал как передаются параметры в метод никогда б не понял о чём он говорит

vladyslavpodkhaliuzin
Автор

Про передачу объектов по ссылке:

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

Естественно, что если мы реализуем обмен переменных местами в самом методе, то мы местами меняем !копии ссылок на объекты, а не сами объекты!(соответственно эти копии ссылок на объекты никак не влияют на внешние ссылки на объекты, которые мы передавали в качестве аргументов), в отличии от С++, в котором мы можем передать указатели и работать не с самими указателями (а их мы без условно так же можем обменять местами), а работать с самими объектами в памяти, где и поменять их местами.

Ну а примитивы передаются по значению.

Если я в чем то не прав, прошу поправьте, но формулировка "передача в метод копии ссылки на объект" мне кажется самой адекватной и правильной.

Романов-мр
Автор

Правильно ли я понял, что переменные меняются местами только в полях метода?

stalkerGurman
Автор

"!" - это не битовая операция, а логическая, как и "&&" с "||".

Alexander_Gurov_RF
Автор

У лектора недостаточно хорошее понимание того, как работают языки программирования.
Чтобы путаница не перешла к вам в голову, посмотрите лекции Кирилла Кринкина (он на примере Си объясняет).

Elias-djge
Автор

С чего бы лектор решил взять за основу "си". "Так же как в си", "то же как в си". С чего бы вдруг строить лекции в таком ключе? Си что ли самый популярный язык, который все изучают в школе? Что за методика подачи материала такая странная.

madbad
Автор

Как всё сложно. На змеюке(Python) куда легче(это очевидно).

hash