Шпаргалка по Java
Небольшая фотография, которая поможет освежить знания, вычитать что-то новое и быстрее освоить язык.
#cheatsheet
Небольшая фотография, которая поможет освежить знания, вычитать что-то новое и быстрее освоить язык.
#cheatsheet
Рекурсия
Зачастую это функция, которая вызывает сама себя, просто с другими параметрами. Примером использования рекурсии может быть фрактал.
На самом деле это очень удобно, поскольку позволяет разделить одну задачу на несколько маленький.
Но есть небольшая опасность, рекурсия ограничена стеком. Если вызовется очень много функций, приложение не выдержит и выдаст ошибку.
P.S. Если ввести в гугл «рекурсия», то Google скажет: «Возможно, вы имели в виду: рекурсия». Такой прикол от разработчиков
#java #lesson #basic
Зачастую это функция, которая вызывает сама себя, просто с другими параметрами. Примером использования рекурсии может быть фрактал.
На самом деле это очень удобно, поскольку позволяет разделить одну задачу на несколько маленький.
Но есть небольшая опасность, рекурсия ограничена стеком. Если вызовется очень много функций, приложение не выдержит и выдаст ошибку.
P.S. Если ввести в гугл «рекурсия», то Google скажет: «Возможно, вы имели в виду: рекурсия». Такой прикол от разработчиков
#java #lesson #basic
Одинарные и двойные кавычки
В Java есть такое понятие, как символ (Char). Это определённая буква, цифра, эмодзи и т.д. Несколько таких символов уже составляют строку (String).
Так вот, в одинарных кавычках мы записываем только один символ, а в двойных кавычках мы создаём строку.
С этим нужно быть очень осторожным, поскольку пытаясь получить
#java #lesson #theory
В Java есть такое понятие, как символ (Char). Это определённая буква, цифра, эмодзи и т.д. Несколько таких символов уже составляют строку (String).
Так вот, в одинарных кавычках мы записываем только один символ, а в двойных кавычках мы создаём строку.
С этим нужно быть очень осторожным, поскольку пытаясь получить
"MY"
, выполняя 'M' + 'Y'
, вы получите 166.#java #lesson #theory
Строка на несколько строк
Бывает так, что нам нужно вписать какое-то огромное выражение и сделать это так, чтобы оно выглядело по человечески. Это может быть длинный SQL запрос.
Тут есть два варианта: использовать «одномерные» строковые литералы или «многомерные» (которые начинаются и заканчиваются на """).
Доступно с Java 15.
📌 Документация
#java #lesson #theory
Бывает так, что нам нужно вписать какое-то огромное выражение и сделать это так, чтобы оно выглядело по человечески. Это может быть длинный SQL запрос.
Тут есть два варианта: использовать «одномерные» строковые литералы или «многомерные» (которые начинаются и заканчиваются на """).
Доступно с Java 15.
📌 Документация
#java #lesson #theory
Нужно быстро отправить файлы с одного компьютера на другой?
Важное условие, чтобы они были в одной локальной сети. Вы можете запустить сервер на Java и перекинуть файлы с одного компьютера на другой.
Для этого вводите:
📌 Документация
Доступно с Java 18
#java #lesson #tricks
Важное условие, чтобы они были в одной локальной сети. Вы можете запустить сервер на Java и перекинуть файлы с одного компьютера на другой.
Для этого вводите:
jwebserver -b 0.0.0.0
, а на другом компьютере открываете сервер по IP, выбираете и загружаете нужный вам файл.📌 Документация
Доступно с Java 18
#java #lesson #tricks
Нативные методы и библиотеки
К сожалению, не все участки программы можно реализовать на чистой Java. Чтобы добавить функционал других языков на конкретных машинах используют ключевое слово native.
Его используют для объявления в метода, который будет имплементирован в библиотеке с расширением .dll или .so. Загрузить библиотеку в JVM надо в рантайме с помощью метода System.loadLibrary("name").
Чтобы добавить путь к нативной библиотеке, его указывают как VM-переменную:
К сожалению, не все участки программы можно реализовать на чистой Java. Чтобы добавить функционал других языков на конкретных машинах используют ключевое слово native.
Его используют для объявления в метода, который будет имплементирован в библиотеке с расширением .dll или .so. Загрузить библиотеку в JVM надо в рантайме с помощью метода System.loadLibrary("name").
Чтобы добавить путь к нативной библиотеке, его указывают как VM-переменную:
-Djava.library.path=/path/to/lib
#java #lesson #advancedРефлексия
Java Reflection API — интерфейс, который позволяет анализировать компоненты и окружение во время выполнения, изменять своё поведение и структуру.
Это очень удобно, так можно создать новый класс, которого не было во время компиляции или узнать что-то новое о методе.
Но это сделает ваше приложение более медленным, уязвимым и нестабильным. Пользоваться ей стоит только в крайних случаях.
#java #lesson #theory
Java Reflection API — интерфейс, который позволяет анализировать компоненты и окружение во время выполнения, изменять своё поведение и структуру.
Это очень удобно, так можно создать новый класс, которого не было во время компиляции или узнать что-то новое о методе.
Но это сделает ваше приложение более медленным, уязвимым и нестабильным. Пользоваться ей стоит только в крайних случаях.
#java #lesson #theory
Работаем со временем
В пакете java.util есть класс
Самое интересное и сложное здесь —
📌 Документация
#java #lesson #data
В пакете java.util есть класс
Date()
. Он позволяет узнать, который сейчас час или просто представить какой-либо день.Самое интересное и сложное здесь —
SimpleDateFormat()
. Форматирование определяет то как дата будет считываться/выводится (а это важная задача).📌 Документация
#java #lesson #data
Бесконечность в Java
Это особое состояние числа с плавающей запятой. Оно всегда меньше или больше абсолютно любого другого числа.
Найти их можно в классе Double/Float под названием NEGATIVE_INFINITY и POSITIVE_INFINITY.
Ещё интересная фишка — эти числа больше/меньше не только других чисел, но и себя.
#java #lesson #features
Это особое состояние числа с плавающей запятой. Оно всегда меньше или больше абсолютно любого другого числа.
Найти их можно в классе Double/Float под названием NEGATIVE_INFINITY и POSITIVE_INFINITY.
Ещё интересная фишка — эти числа больше/меньше не только других чисел, но и себя.
#java #lesson #features
Тестируем код
Человеку свойственно совершать ошибки, как бы ему не хотелось, поэтому после каждых изменений систему нужно проверять.
Для этого у нас есть JUnit — самая популярная библиотека чтобы доказать, что тут всё работает и можно спокойно пушить изменения.
📖 Документация
#java #lesson #testing
Человеку свойственно совершать ошибки, как бы ему не хотелось, поэтому после каждых изменений систему нужно проверять.
Для этого у нас есть JUnit — самая популярная библиотека чтобы доказать, что тут всё работает и можно спокойно пушить изменения.
📖 Документация
#java #lesson #testing
Синхронизация потоков
Пока один поток изменяет значение, а второй его считывает, они оба могут получить две абсолютно разные величины. Это может привести к ошибке согласованности памяти.
Простое решение — использовать synchronized. Он приостанавливает один поток, пока второй работает с ячейкой памяти.
📌 Объяснение от Oracle
#java #lesson #multithreading
Пока один поток изменяет значение, а второй его считывает, они оба могут получить две абсолютно разные величины. Это может привести к ошибке согласованности памяти.
Простое решение — использовать synchronized. Он приостанавливает один поток, пока второй работает с ячейкой памяти.
📌 Объяснение от Oracle
#java #lesson #multithreading
BigInteger и BigDecimal
Полезно, если вам нужно работать прямо с очень большими числами (если число больше чем 2 147 483 647). Классы могут хранить числа любого размера и выполнять с ними математические задачи.
#java #lesson #features
Полезно, если вам нужно работать прямо с очень большими числами (если число больше чем 2 147 483 647). Классы могут хранить числа любого размера и выполнять с ними математические задачи.
BigInteger
позволяет нам работать с целыми числами, в то время как BigDecimal
нужен для чисел с плавающей запятой.#java #lesson #features
Синхронизация потоков
Пока один поток изменяет значение, а второй его считывает, они оба могут получить две абсолютно разные величины. Это может привести к ошибке согласованности памяти.
Простое решение — использовать synchronized. Он приостанавливает один поток, пока второй работает с ячейкой памяти.
📌 Объяснение от Oracle
#java #lesson #multithreading
Пока один поток изменяет значение, а второй его считывает, они оба могут получить две абсолютно разные величины. Это может привести к ошибке согласованности памяти.
Простое решение — использовать synchronized. Он приостанавливает один поток, пока второй работает с ячейкой памяти.
📌 Объяснение от Oracle
#java #lesson #multithreading
BigInteger и BigDecimal
Полезно, если вам нужно работать прямо с очень большими числами (если число больше чем 2 147 483 647). Классы могут хранить числа любого размера и выполнять с ними математические задачи.
#java #lesson #features
Полезно, если вам нужно работать прямо с очень большими числами (если число больше чем 2 147 483 647). Классы могут хранить числа любого размера и выполнять с ними математические задачи.
BigInteger
позволяет нам работать с целыми числами, в то время как BigDecimal
нужен для чисел с плавающей запятой.#java #lesson #features
Кроссплатформенность
Это способность одного и того же кода запускаться на разных машинах, на разных операционных системах и работать при этом стабильно.
В Java такое достигается за счёт JVM (Java virtual machine). Эта система берёт ваш код и переводит его в понятный компьютеру язык.
Задач у JVM, на самом деле, несколько больше. Виртуальная машина ещё занимается организацией памяти и сборкой мусора.
#java #lesson #theory
Это способность одного и того же кода запускаться на разных машинах, на разных операционных системах и работать при этом стабильно.
В Java такое достигается за счёт JVM (Java virtual machine). Эта система берёт ваш код и переводит его в понятный компьютеру язык.
Задач у JVM, на самом деле, несколько больше. Виртуальная машина ещё занимается организацией памяти и сборкой мусора.
#java #lesson #theory
Generics
Обобщения (Generics) позволяют нам уйти от жёстких ограничений используемых типов. Так мы сохраняем типобезопасность, но при этом используем разные классы.
Возьмём, к примеру, банковский счёт, где id может быть и Integer, и String, и UUID. Тогда нам надо создать класс, который принимает тип T и подставляет его там, где нужно.
При вызове обобщения передаются так:
#lesson #java #theory
Обобщения (Generics) позволяют нам уйти от жёстких ограничений используемых типов. Так мы сохраняем типобезопасность, но при этом используем разные классы.
Возьмём, к примеру, банковский счёт, где id может быть и Integer, и String, и UUID. Тогда нам надо создать класс, который принимает тип T и подставляет его там, где нужно.
При вызове обобщения передаются так:
Account<Integer>
. На месте, где раньше стоял T будет Integer.#lesson #java #theory
Atomic
Блокировки тяжеловесны, они мешают остальным потокам выполнятся, так как блокируют их, что сильно снижает производительность.
Разработчики придумали неблокирующие алгоритмы. Их сложнее реализовывать, но они более масштабируемые и быстрые.
Классы для реализации неблокирующих программ находятся в пакете
📌 Документация
#java #lesson #concurrent
Блокировки тяжеловесны, они мешают остальным потокам выполнятся, так как блокируют их, что сильно снижает производительность.
Разработчики придумали неблокирующие алгоритмы. Их сложнее реализовывать, но они более масштабируемые и быстрые.
Классы для реализации неблокирующих программ находятся в пакете
java.util.concurrent.atomic
. 📌 Документация
#java #lesson #concurrent
Atomic
Блокировки тяжеловесны, они мешают остальным потокам выполнятся, так как блокируют их, что сильно снижает производительность.
Разработчики придумали неблокирующие алгоритмы. Их сложнее реализовывать, но они более масштабируемые и быстрые.
Классы для реализации неблокирующих программ находятся в пакете
📌 Документация
#java #lesson #concurrent
Блокировки тяжеловесны, они мешают остальным потокам выполнятся, так как блокируют их, что сильно снижает производительность.
Разработчики придумали неблокирующие алгоритмы. Их сложнее реализовывать, но они более масштабируемые и быстрые.
Классы для реализации неблокирующих программ находятся в пакете
java.util.concurrent.atomic
. 📌 Документация
#java #lesson #concurrent
javadoc
Это генератор документации в HTML-формате из комментариев исходного кода Java. Комментарии для документации определяются так:
У javadoc есть дескрипторы:
#java #lesson #javadoc
Это генератор документации в HTML-формате из комментариев исходного кода Java. Комментарии для документации определяются так:
/** комментирование документации */
.У javadoc есть дескрипторы:
@author
, @version
, @since
, @see
, @param
, @return
, которые определяют какое значение мы записываем в комментариях.#java #lesson #javadoc
Не оставляйте try/catch блоки пустыми
Обязательно выводите ошибки или обрабатывайте их! Если их игнорировать, будет трудно найти баг и придётся дебажить код.
Исключения стоит выводить хотя бы через
#java #lesson #best_practices
Обязательно выводите ошибки или обрабатывайте их! Если их игнорировать, будет трудно найти баг и придётся дебажить код.
Исключения стоит выводить хотя бы через
System.out.println()
, но ещё лучше воспользоваться логгером log4j.#java #lesson #best_practices