5,9K подписчиков
Статья подготовлена для студентов курса «Разработчик Java» в образовательном проекте OTUS. В этой статье мы рассмотрим, что такое Java-переменные, что значит инициализация переменных, а также как объявлять константу, и зачем вообще нужны переменные и константы в Java. Переменная — это контейнер, содержащий какое-либо значение. При этом под переменным значением понимают строковое, числовое или логическое значение. Само определение говорит нам о том, что переменная может изменяться по ходу выполнения программы...
5 лет назад
5,9K подписчиков
Программирование предусматривает работу с разнообразными элементами кода. У Java, как и любого другого языка программирования есть так называемые переменные. Это – основные составляющие, с которыми предстоит контактировать как новичку, так и опытному разрабу. Они бывают разных «видов». В зависимости от того, какой тип переменной задан, устройство будет осуществлять выделение памяти для успешной работы программного кода. Поэтому разобраться в соответствующем вопросе – крайне важная задача. Также программеру предстоит использовать в своих кодификациях литералы...
1 год назад
55 подписчиков
🖥 20 приемов работы на Java, которые помогут вам улучшить качество кода

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

1. По возможности отдавайте предпочтение примитивам, а не классам-оболочкам
Long idNumber;
long idNumber; // long занимает меньше памяти, чем Long

2. Попробуйте использовать подходящий тип для вашей переменной

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

int birthYear;
short birthYear; // лучше, потому что год рождения не может быть пятизначным

int personRunningSpeedKmHour;
byte personRunningSpeedKmHour; // лучше, потому что скорость движения человека ограничена

3. При проверке нечетности числа побитовый оператор AND намного быстрее, чем арифметический оператор по модулю
public boolean isOdd(int num) {
return (num & 1) != 0;
}
// лучший способ проверить нечетность числа

4. Избегайте избыточной инициализации (0, false, null..)
Не инициализируйте переменные с их инициализацией по умолчанию, например, boolean по умолчанию имеет значение false, поэтому избыточно инициализировать его значением false.

String name = null; // избыточно
int speed = 0; // избыточно
boolean isOpen = false; // избыточно

String name;
int speed;
boolean isOpen;
// те же значения в более чистом коде

5. Объявляйте членов класса закрытыми везде, где это возможно, и всегда давайте модификатору доступа максимально ограниченный доступ

public int age; // очень плохо
int age; // плохо
private int age; // хорошо

6. Избегайте использования ключевого слова “new” при создании строки

String s1 = new String("AnyString") ; // плохая реализация
// Конструктор создает новый объект и добавляет литерал в кучу

String s2 = "AnyString" ; // хорошо: быстрое создание экземпляра

// Этот ярлык ссылается на элемент в пуле строк и создает новый объект, только если литерал отсутствует в пуле строк.

7. Для объединения нескольких строк используйте StringBuilder или StringBuffer вместо использования оператора +
Оператор + неэффективен, поскольку компилятор Java создает несколько промежуточных объектов String перед созданием окончательной объединенной строки.

StringBuilder или StringBuffer изменяют String без создания промежуточных объектов String.

String address = streetNumber +" "+ streetName +" "
+cityName+" "+cityNumber+" "+ countryName; // плохо

StringBuilder address = new StringBuilder(streetNumber).append(" ")
.append(streetName).append(" ").append(cityName).append(" ")
.append(cityNumber).append(" ").append(countryName); // хорошо

Учтите, что StringBuilder не потокобезопасен, не синхронизирован, но он быстрее, чем StringBuffer, который потокобезопасен и синхронизирован.

8. Используйте подчеркивание в числовых литералах

int myMoneyInBank = 58356823;
int myMoneyInBank = 58_356_823; // лучше читаемый код

long billsToPay = 1000000000L;
long billsToPay = 1_000_000_000L; // лучше читаемый код

9. Избегайте использования “for loop” с индексами
Не используйте for loop с переменной индекса (или счетчика), если вы можете заменить его расширенным циклом for (начиная с Java 5) или forEach (начиная с Java 8). Это связано с тем, что переменная индекса подвержена ошибкам, поскольку мы можем случайно изменить ее в теле цикла или начать индекс с 1 вместо 0.

for (int i = 0; i < names.length; i++)
{ saveInDb(names[i]); }

for (String name : names)
{ saveInDb(name); } // более чистый код

10. Заменяйте try-catch-finally на try-with-resources

Scanner scanner = null;
try
{scanner = new Scanner(new File("test.txt"));
while (scanner.hasNext())
{System.out.println(scanner.nextLine());}}
catch (FileNotFoundException e)
{e.printStackTrace();}
finally
{if (scanner != null)
{scanner.close();}}
// подвержено ошибкам, так как мы можем забыть закрыть сканер в блоке finally

try (Scanner scanner = new Scanner(new File("test.txt")))
{while (scanner.hasNext())
{System.out.println(scanner.nextLine());}}
catch (FileNotFoundException fnfe)
{fnfe.printStackTrace();}
// чище и более лаконично

1 год назад