Рубрики
Без рубрики

Java static и final, что это такое и как их использовать

Когда я впервые начал кодировать на Java, я изо всех сил пытался понять различия между “статическими” и “окончательными”, в чем они заключались и когда их использовать, поэтому я решил написать краткое резюме для новичков. С пометкой java, новички.

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

К делу! Давайте посмотрим, как мы можем использовать их в нашем коде.

Его можно использовать в переменных, методах и классах.

Конечные переменные

Конечные переменные предназначены для использования в качестве констант , значений, которые не должны (и не будут) когда-либо меняться:

    class Car {
        public final int numberOfWheels = 4; 
    }

Даже если бы мы захотели изменить это значение, компилятор выдал бы ошибку:

Car myCar = new Car();
myCar.numberOfWheels = 1;

>>> The final field Car.numberOfWheels cannot be assigned

Окончательные методы

Конечные методы не могут быть переопределены никакими подклассами. Предположим, что класс Автомобиль и класс Седан :

class Car {

    public final int getNumberOfWheels() {
        return 4;
    }
}

class Sedan extends Car {

    // This won't work because the method getWeight is final!
    @Override
    public double getNumberOfWheels() {
        return 3;
    }
}

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

Заключительные занятия

Использование ключевого слова final в классе предотвращает его расширение:

final class Pear {
    private double weight;
    private String color;
}

// This won't work because the Pear class is final! 
class MagicalPear extends Pear {

}

В Java статический просто подразумевает, что поле или метод не изменят свое значение или поведение во всех экземплярах объекта.

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

Итак, если мы определим конвертер валют:

class CurrencyConverter {

    public static String EUR = "€";

    public static double convertDollarsToEuros(double amountInDollars) {
        double rate = 0.90; 
        return amountInDollars * rate;
    }
}

Затем мы можем вызвать метод конвертировать доллары в евро без объявления какого-либо экземпляра класса:

System.out.println(CurrencyConverter.convertDollarsToEuros(5.43D));

CurrencyConverter converter = new CurrencyConverter();
System.out.print(converter.convertDollarsToEuros(5.43D));

>>> 4.887
>>> 4.887

Таким же образом мы можем вызвать статическую переменную EUR без создания экземпляра объекта и, в отличие от конечных переменных , мы даже можем изменить его.

Но то, что мы можем это сделать, не означает, что мы должны это делать, поскольку изменение статических переменных считается плохой практикой.

Вот почему чаще всего статические переменные также являются окончательными:

public static final String EUR = "€"

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

Предложения и конструктивная критика всегда приветствуются!

Оригинал: “https://dev.to/xgrimau/java-static-and-final-how-are-they-used-4b73”