Рассмотрим этот сценарий ...
Class XYZ{
public static void functionTest(){
// Your code
}
public static void main(String args[]){
XYZ x = new XYZ();
//Here we can execute the method functionTest() in 2 ways.
x.functionTest();
XYZ.functionTest();
}
}
Каждый класс будет иметь то, что называется Context класса , что означает, что все статические методы и статические переменные получают память, выделенную в RAM, без создания объекта этого класса, и мы называем эту память как Context класс.
И ссылка (x) содержит две части: одна - это фактический адрес объекта (экземпляра), а другая - адрес контекста класса.
Когда мы вызываем x.function () в вышеприведенном сценарии, сначала он всегда ищет контекст класса, если он находит там метод, он его выполняет, если не найден, он выполняет его из экземпляра класса. ,
Итак, каким бы способом вы ни пытались выполнить статический метод, он всегда будет выполняться из контекста класса, а не из экземпляра класса.
Именно поэтому статические члены класса можно вызывать обоими способами.
и при вызове метода из экземпляра нам не нужно создавать объект, который вообще не требуется (ненужное распределение памяти)