Ключевое слово final
Ключевое слово final используется в трех местах: переменные, методы, классы.
Для конечной переменной final, если она является переменной базового типа данных, ее значение не может быть изменено после инициализации, а если она является переменной ссылочного типа, она не может указанывать на другой объект после ее инициализации.
Когда класс декорирован с помощью final, это означает, что класс не может быть унаследован. Все методы-члены в конечном классе неявно указываются как конечные методы final.
Есть две причины для использования окончательного метода final. Первая причина заключается в блокировке метода в случае, если какой-либо класс наследования изменяет его значение, вторая причина - эффективность. В ранних версиях реализаций Java метод final преобразовывался во встроенный вызов. Но если метод слишком велик, вы не увидите какого-либо прироста производительности от встроенных вызовов (текущая версия Java не требует финального метода для этих оптимизаций). Все приватные методы в классе неявно указаны как final.
Ключевое слово static
Ключевое слово static имеет следующие четыре сценария использования:
Переменные-члены и методы-члены. Члены, которые модифицируются с помощью static, принадлежат классу, и не принадлежат ни одному объекту этого класса, они являются общими для всех объектов в классе и могут вызываться по имени класса. Переменные-члены, объявленные static, принадлежат статическим переменным-членам, а статические переменные хранятся в области методов области памяти Java.
Статические блоки кода: статические блоки кода определяются вне методов в классе, и статические блоки кода выполняются перед нестатическими блоками кода (статические блоки кода -> нестатические блоки кода -> конструкторы). Этот блок выполняется только один раз, независимо от того, сколько объектов создано.
Статические внутренние классы (статические модификаторы могут применяться только к внутренним классам): существует одно большое отличие между статическими внутренними классами и нестатическими внутренними классами: нестатические внутренние классы неявно сохраняют ссылку после завершения компиляции, ссылку, которая указывает на периферийный класс, который его создал, а статический внутренний класс - нет. Без этой ссылки это означает: 1. Он создан без использования периферийных классов. 2. Он не может использовать нестатические переменные-члены и методы любого периферийного класса.
Статический импорт (используется для импорта статических ресурсов в классе.
Формат: import static Эти два ключевых слова могут использоваться для указания статического ресурса в классе, и для вызова не нужно использовать имя класса.
Ключевое слово this используется для ссылки на текущий экземпляр класса. Например:
class Manager {
Employees[] employees;
void manageEmployees() {
int totalEmp = this.employees.length;
System.out.println("Total employees: " + totalEmp);
this.report();
}
void report() { }
}
В приведенном выше примере ключевое слово this используется в двух местах:
This.employees.length: переменная, которая обращается к текущему экземпляру класса Manager.
This.report(): метод, который вызывает текущий экземпляр класса Manager.
Ключевое слово this является необязательным, что означает, что приведенный выше пример делает то же самое без использования этого ключевого слова. Однако использование этого ключевого слова может сделать код более читабельным или понятным.
Ключевое слово super
Ключевое слово super используется для доступа к переменным и методам родительского класса из подкласса. Например:
public class Super {
protected int number;
protected showNumber() {
System.out.println("number = " + number);
}
}
public class Sub extends Super {
void bar() {
super.number = 10;
super.showNumber();
}
}
В приведенном выше примере под-класс обращается к переменной члена родительского класса и вызывает метод showNumber() своего родительского класса.
Вопросы, которые следует учитывать при использовании this и super:
Когда super вызывает другие конструкторы в родительском классе, при вызове он помещается в первую строку конструктора! Когда this вызывает другие конструкторы в этом классе, он также помещается в первую строку.
this супер нельзя использовать в статическом методе.
Член, который декорирован как статический, принадлежит классу, не принадлежит ни одному объекту этого класса и является общим для всех объектов в классе. И this представляет ссылку на этот объект класса, указывая на этот объект класса, а super представляет ссылку на объект родительского класса, указывая на объект родительского класса, поэтому this и super являются вещами, принадлежащими к категории объекта, а статические методы - вещами, принадлежащими к категории класса.