User Rating: 0 / 5

Функциональный интерфейс UnaryOperator в Java

User Rating: 0 / 5

Друзья, всем привет.

Сегодняшняя статья будет короткой, в ней мы поговорим о функциональном интерфейсе UnaryOperator<T>, доступном в Java, начиная с версии 1.8.

Этот функциональный интерфейс является наследником интерфейса Function<T, R>, который мы уже разбирали ранее в рамках отдельной статьи.

Интерфейс описывает некоторый унарный оператор, т.е. оператор, работающий лишь с одним операндом и возвращающий результат выполнения оператора с тем же самым типом, как и у операнда.

К распространённым унарным операторам относятся, например, операции инкремента (++) и декремента (--):

int i = 0;
i++; // оператор инкремента, результат его выполнения - значение локальной переменной i будет увеличино на единицу
System.out.println("i = " + i);  // вывод в консоль: i = 1

int j = 10;
j--; // оператор декремента, результат его выполнения - значение локальной переменной j будет уменьшено на единицу
System.out.println("j = " + j);  // вывод в консоль: j = 9
Добавить комментарий

Запускаем потоки в Java

User Rating: 0 / 5

Доброго времени суток, друзья.

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

Процесс и поток - это связанные, но всё же разные термины. Процесс обладает собственным окружением времени выполнения и ресурсы, в частности, выделенную ему память операционной системы. Процессы взаимодействуют между собой через сокеты или каналы, причём это взаимодействие процессов может происходить как внутри одной и той же операционной системы, так и может быть распределено между процессами, работающими на разных системах.

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

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

Добавить комментарий

Что такое JShell и как им пользоваться?

User Rating: 0 / 5

Доброго времени суток, друзья. В сегодняшней статье мы с вами познакомимся с таким интересным инструментом, как JShell (или Java Shell tool).

Итак, что такое JShell и как им пользоваться?

JShell - это специальный интерактивный инструмент для изучения языка программирования Java и прототипирования Java кода. Инструмент был включен в состав JDK, начиная с версии 9. Согласно странице официальной документации, JShell является инструментом типа REPL (Read-Evaluate-Print Loop tool), т.е. фактически он реализует парадигму цикла "прочитать-вычислить-распечатать". JShell доступен из командной строки и позволяет вычислять объявления, инструкции и выражения как только они вводятся в консоль и мгновенно отображать результаты вычислений.

Для чего имеет смысл использовать JShell?

Когда вы используете JShell, то можете вводить элементы программы по одному, сразу видеть результат и вносить коррективы по мере необходимости. Обычно процесс разработки программы Java включает в себя написание самой программы, её компиляцию и исправление ошибок, запуск программы и выявление того, что в ней не работает с последующим редактированием не работающих частей кода и повторением процесса.

Добавить комментарий

Принципы SOLID с примерами на Java

User Rating: 0 / 5

Доброго времени суток, друзья. Многим из вас тема принципов SOLID уже известна, а кто-то, возможно, сталкивается с ней впервые и хочет лучше понять, что это за принципы, в чём их суть и назначение, для чего их вообще придумали и почему существуют рекомендации от различных признанных экспертов в области разработки следовать этим принципам. Кроме этого, часто разработчикам задают на собеседованиях вопросы о принципах SOLID и просят привести примеры, поэтому знать про них просто необходимо, а лучше - применять на практике при написании кода ваших программ.

Поэтому, несмотря на довольно большое количество статей о SOLID на других сайтах и ресурсах, я решил отразить собственное видение и понимание принципов SOLID - как их вижу и понимаю я, плюс сопроводить примерами кода. Сразу хочу отметить характер данной статьи - она ни в коей мере не претендует на роль "академической" или какой-то "эталонной", поэтому относитесь к информации из статьи с осторожностью - сверяйте её с другими источниками, а также пишите в комментариях свои мысли, если вы с чем-то не согласны или найдете в статье ошибки/неточности, подискутируем вместе.

В конце статьи вы найдете ссылку на архив с примерами на Java - по каждому принципу SOLID будет показан антипаттерн (т.е. "как делать нельзя", или что нарушает каждый конкретный принцип SOLID), а также пример, демонстрирующий одну из возможных корректных реализаций, демонстрирующих применение принципа SOLID в Java-коде.

Итак, начнём. Сперва немного теории и посмотрим на расшифровку для каждой из букв акронима SOLID.

Добавить комментарий

Как найти самый большой файл в каталоге при помощи Java

User Rating: 0 / 5

Доброго времени суток, друзья. В сегодняшней небольшой статье мы посмотрим на один из вариантов поиска самого большого файла в каталоге при помощи Java.

Попробуем решить эту задачу, используя лишь два стандартных класса Java - java.io.File и java.util.Arrays

Как мы знаем, директории в файловой системе образуют вложенную структуру, т.е. в одних каталогах могут быть и файлы, и другие каталоги. Во вложенных каталогах также могут быть или файлы, или каталоги и так далее. Напрашивается мысль о том, что наш алгоритм поиска самого большого файла в каталоге должен быть рекурсивным. То есть он примет какой-то основной каталог, где мы ищем файл, и будет его просматривать вглубь, пытаясь найти самый большой файл среди всех остальных. Для того, чтобы нам сделать рекурсивный обход в этом алгоритме эффективным и куда-то "складывать" информацию о самом большом на текущий момент файле (т.е. на момент просмотра алгоритмом каталога, когда мы находимся на определённом уровне вложенности), нам нужна какая-то структура с именем файла и информацией о его размере. Давайте зададим такой класс MaxFileInfo (мы сразу сделаем его статическим и затем встроим в класс основной программы-примера):

Добавить комментарий
Яндекс.Метрика