Автономные (консольные) приложения Java и аплеты могут создавать окна на базе класса Frame. Если эти окна используются для интерактивного взаимодействия с пользователем, вы должны организовать в соответствующих классах обработку событий, переопределив методы handleEvent, mouseDown, mouseMove и аналогичные.
При обработке событий в аплетах мы переопределяли перечисленные выше методы в главном классе аплета, который наследуется от класса Applet. Что же касается окон Frame, то они создаются на базе классов, произведенных от класса Frame. Именно там вы и должны переопределять методы, предназначенные для обработки событий.
В остальном события обрабатываются таким же образом, что и в аплетах.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Самый популярный Java-репозиторий на GitHub – коллекция паттернов проектирования всех видов и мастей.
Паттерны – это лучшие практики организации проектов, которые упрощают и ускоряют процесс разработки. Они представляют собой хорошо продуманные и протестированные решения самых распространенных задач программирования. Паттерны учитывают много мелочей, о которых вы легко можете забыть, и спасают от распространенных и глупых ошибок.
Каждый паттерн в репозитории, будь он моно или нет, содержит подробное описание и примеры реализации на Java.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - iluwatar/java-design-patterns: Design patterns implemented in Java
Design patterns implemented in Java. Contribute to iluwatar/java-design-patterns development by creating an account on GitHub.
Одинарные и двойные кавычки
Что ты ожидаешь в результате выполнения кода с картинки?
Казалось бы, строка должна возвращать «
Двойные кавычки обрабатывают символы как строки, но одинарные кавычки ведут себя иначе. Они преобразуют символьные операнды (
@javatg
Что ты ожидаешь в результате выполнения кода с картинки?
Казалось бы, строка должна возвращать «
HaHa
», но на самом деле это будет «Ha169
».Двойные кавычки обрабатывают символы как строки, но одинарные кавычки ведут себя иначе. Они преобразуют символьные операнды (
'H' и 'a'
) в целые значения посредством расширения примитивных типов — получается 169
.@javatg
java8-tutorial
Подробный гайд по Java 8, шаг за шагом описывающий все возможности и особенности Java. Короткие примеры грамотно иллюстрируют основные концепции: минимум текста, максимум наглядности. Данный репозиторий может быть как справочником, так и учебником.
https://github.com/winterbe/java8-tutorial
@javatg
Подробный гайд по Java 8, шаг за шагом описывающий все возможности и особенности Java. Короткие примеры грамотно иллюстрируют основные концепции: минимум текста, максимум наглядности. Данный репозиторий может быть как справочником, так и учебником.
https://github.com/winterbe/java8-tutorial
@javatg
GitHub
GitHub - winterbe/java8-tutorial: Modern Java - A Guide to Java 8
Modern Java - A Guide to Java 8. Contribute to winterbe/java8-tutorial development by creating an account on GitHub.
☕️ @Controller — для классов-контроллеров в проекте Spring MVC.
☕️ @RequestMapping — для настройки сопоставления URI в методах-обработчиках контроллера. Это очень важная аннотация.
☕️ @ResponseBody — для отправки Object в качестве ответа, обычно для отправки данных XML или JSON в качестве ответа.
☕️ @PathVariable — для отображения динамических значений из URI в аргументы метода обработчика.
☕️ @Autowired — для автоматического связывания зависимостей в бинах Spring.
☕️ @Qualifier — с аннотацией @Autowired, чтобы избежать путаницы при наличии нескольких экземпляров типа bean-компонента.
☕️ @Service — для классов сервисного слоя.
☕️ @Scope — для настройки области действия Spring bean.
☕️ @Configuration, @ComponentScan и @Bean — для конфигураций на основе Java.
Аннотации AspectJ для настройки аспектов и советов, @Aspect, @Before, @After, @Around, @Pointcut и т. д.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
XPrivacyLua – менеджер по конфиденциальности приложений для Android
Отзыв разрешений у Android приложений часто приводит к ограничениям в функционале или сбоям в работе приложений. XPrivacyLua передаёт приложениям поддельные данные вместо реальных, что позволяет сохранить функционал и конфиденциальность одновременно
#Java #Privacy #Android #Useful
@github_code
Отзыв разрешений у Android приложений часто приводит к ограничениям в функционале или сбоям в работе приложений. XPrivacyLua передаёт приложениям поддельные данные вместо реальных, что позволяет сохранить функционал и конфиденциальность одновременно
#Java #Privacy #Android #Useful
@github_code
GitHub
GitHub - M66B/XPrivacyLua: Really simple to use privacy manager for Android 6.0 Marshmallow and later
Really simple to use privacy manager for Android 6.0 Marshmallow and later - M66B/XPrivacyLua
Сегодня решил рассказать о своем опыте, как при помощи docker-compose и bash скрипта настроил развертывание бекенд приложения с базой данных.
Какая была идея? Хотелось при помощи одной команды в терминале разворачивать Java приложение с базой данных так, чтобы можно было передать все необходимые переменные в момент запуска и нигде не хранить их.
Так, чтобы можно было развернуть новую версию приложения даже с телефона, просто заранее заготовив необходимую команду.
Статья носит характер руководства по использованию, поэтому все желающие могут сами своими руками создать и воспроизвести весь путь, что я прошел и локально запустить у себя развертывание.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Проекты , которые рреально помогут в разработке и помогут прокачать навыки программирования.
Смотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
Стоит также отметить, что проводник предоставляет множество синтаксических анализаторов кода: начиная от esformatter и esprima для JavaScript, заканчивая java-parser для, собственно, Java.
#web #java
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Morse - утилита позволяет шифровать или расшифровать азбуку Морзе, вы можете создать секретный номер, научиться шифровать, изучать криптографию и многое другое!
Переведите текст в азбуку Морзе или расшифруйте азбуку Морзе, переведя их в текст!
#java
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Conventional Commits — простое соглашение о том, как нужно писать коммиты в своих проектах
В нём описывается достаточно несложный набор правил для создания понятной истории коммитов. Также с его помощью куда проще разрабатывать инструменты автоматизации, основанные на commit-истории
По словам авторов проекта, Conventional Commits больше всего вдохновлялся Angular Commit Guidelines
Стоимость: #бесплатно
@javatg
В нём описывается достаточно несложный набор правил для создания понятной истории коммитов. Также с его помощью куда проще разрабатывать инструменты автоматизации, основанные на commit-истории
По словам авторов проекта, Conventional Commits больше всего вдохновлялся Angular Commit Guidelines
Стоимость: #бесплатно
@javatg
Как выбрать лучшую IDE для разработки на Java
IDE — программа, состоящая из набора инструментов разработчика, упрощающих процесс написания приложений, со встроенным в нее пакетом полезных функций: от подсветки синтаксиса до навигатора по коду. За счет расширенной функциональности она здорово экономит время и повышает производительность труда, и современному программисту без нее просто никак. Однако, на сегодняшний день, в многообразии подобных программ можно запутаться и выбор лучшей IDE для разработки на Java может стать довольно сложной задачей, особенно если вы начинающий джавист. Поэтому «Библиотека программиста» решила помочь вам с этим делом и выделила из общего количества IDE наиболее приемлемые и проверенные варианты.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Версия Java 17 была выпущена не так уж давно. Отличие этого релиза в том, что это — новая TLS-версия (Long Term Support, с долговременной поддержкой) после Java 11.
В этой статье рассмотрим новые практические функции, которые были введены между 11-ой и 17-ой версиями.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Один из наиболее распространенных способов настраивать конфигурацию базы данных Spring Boot — через свойства приложения. Для некоторых смена пароля к базе данных может быть редкостью, но лучше периодически его менять.
Традиционно изменение паролей к базам данных означает перезапуск сервиса после внесения изменений в свойства приложения (это также можно сделать с помощью переменных среды). Чем чаще это делается, тем выше вероятность сбоев в обслуживании пользователей.
К счастью, благодаря интеграции с AWS Secrets Manager нет необходимости перезапускать сервис каждый раз, когда пароль к базе данных меняется. Secrets Manager даже предоставляет возможность автоматически менять пароль через определенный период.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Объект класса java.util.Scanner упрощает разбор строки из потока ввода. При вводе могут использоваться данные из консоли, файла, строки или любого другого источника, реализующего интерфейсы Readable или ReadableByteChannel.
Хотя Scanner и не является потоком, у него тоже обязательно вызывать метод close(), который закроет используемый основной источник.
Пример 1. Использование класса Scanner
public class ScannerExample {
private static String fileName = "scan.txt";
public static void scanFile() {
try (FileReader fileReader = new FileReader(fileName);
Scanner scanner = new Scanner(fileReader)) {
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
System.out.println(scanner.nextInt() + " :int");
} else if (scanner.hasNextDouble()) {
System.out.println(scanner.nextDouble() + " :double");
} else if (scanner.hasNextBoolean()) {
System.out.println(scanner.nextBoolean() + " :boolean");
} else {
System.out.println(scanner.next() + " :String");
}
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
public static void makeFile() {
try (FileWriter fileWriter = new FileWriter(fileName)) {
fileWriter.write("2 Java 1,5 true 1.6 ");
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args) {
ScannerExample.makeFile();
ScannerExample.scanFile();
}
}
Пример 2. Использование класса Scanner для работы со строкой
public class ScannerDelimiterExample {
public static void main(String[] args) {
double sum = 0.0, number;
Scanner scanner = new Scanner("1,3;2,0; 8,5; 4,8; 9,0; 1; 10; abc");
scanner.useDelimiter(";\\s*");
while (scanner.hasNext()) {
if (scanner.hasNextDouble()) {
number = scanner.nextDouble();
System.out.println("Число:" + number);
sum += number;
} else {
System.out.println("Строка: " + scanner.next());
}
}
System.out.println("Сумма чисел = " + sum);
}
}
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Мы решили написать небольшую статью, которая будет интересна неравнодушным к Java. Хотим поделиться на первый взгляд простыми особенностями поведения библиотек Spring Security, Spring Web, которые могут сбить с толку разработчиков, которые никогда не сталкивались с такими ситуациями.
Рассмотрим проблему, проведём анализ, тесты, проверяющие наши гипотезы, сделаем выводы и, конечно, оставим ссылку на код, чтобы можно было самостоятельно поиграться.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Ответ
HashSet
использует HashMap для хранения элементов. При добавлении элемента в HashMap вычисляется хэш код, по которому определяется позиция в массиве, куда будет вставлен новый элемент. У всех экземпляров класса Point хэш код будет одинаковым для всех объектов с одинаковым x, что приведёт к вырождению хэш таблицы в список.При возникновении коллизии в HashMap осуществляется проверка на наличие элемента в списке: e.hash == hash && ((k = e.key) == key || key.equals(k)). Если элемент найден, то его значение перезаписывается. В нашем случае для разных объектов метод equals() будет возвращать false. Соответственно новый элемент будет успешно добавлен в HashSet. Извлечение элемента также будет осуществляться успешно. Но производительность такого кода будет невысокой и преимущества хэш таблиц использоваться не будут.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM