Яка різниця між статичними та нестатичними членами в Java?

Статичні змінні є спільними для всіх екземплярів класу. Нестатичні змінні є специфічними для цього екземпляра класу. Статична змінна схожа на глобальну змінну і доступна для всіх методів. Нестатична змінна схожа на локальну змінну, і до неї можна отримати доступ лише через екземпляр класу.

Статичний клас в основному такий самий, як і нестатичний клас, але є одна відмінність: статичний клас не може бути створений. Іншими словами, ви не можете використовувати оператор new для створення змінної типу класу.

Нестатичні блоки — це блоки рівня класу, які не мають жодного прототипу. Основна причина, чому нам потрібен нестатичний блок для виконання будь-якої логіки кожного разу, коли створюється об’єкт, незалежно від конструктора. JVM автоматично викликає нестатичні блоки кожного разу, коли об’єкт створюється в області стеку Java.

Статичні функції-члени не мають доступу до нестатичних (примірників) членів класу, включаючи члени даних і нестатичні функції-члени. Вони також не мають доступу до неявного вказівника 'this', оскільки вони не прив'язані до жодного екземпляра об'єкта.

Якщо константа не є статичною, Java виділить пам’ять для цієї константи в кожному об’єкті класу (тобто одна копія константи на об’єкт). Якщо константа є статичною, для цього класу буде лише одна копія константи (тобто одна копія на клас).

Статичні змінні є спільними для всіх екземплярів класу. Нестатичні змінні є специфічними для цього екземпляра класу. Статична змінна схожа на глобальну змінну і доступна для всіх методів. Нестатична змінна схожа на локальну змінну, і до неї можна отримати доступ лише через екземпляр класу.