logo

Статичні методи проти методів екземплярів у Java

У цій статті ми збираємося дізнатися про статичні методи та методи екземплярів у Java.

Методи екземплярів Java

Методи екземплярів — це методи, які перед викликом вимагають створення об’єкта свого класу. Щоб викликати метод екземпляра, ми повинні створити об’єкт класу, в якому визначено метод.



public void geek(String name) { // code to be executed.... } // Return type can be int, float String or user defined data type.>

Метод розподілу пам’яті екземпляра

Самі ці методи зберігаються в просторі постійної генерації купи (дійсно лише до Java 7, тепер замінено на метапростір від Java 8 і далі з покращеною ефективністю), але параметри (аргументи, що їм передані) та їхні локальні змінні та значення для повертаються, розміщуються в стеку. Їх можна викликати в тому самому класі, в якому вони знаходяться, або з різних класів, визначених або в одному пакеті, або в інших пакетах залежно від тип доступу надається потрібному методу примірника.

Важливі моменти:

  • Метод(и) екземпляра належать до об’єкта класу, а не до класу, тобто їх можна викликати після створення об’єкта класу.
  • Методи екземплярів не зберігаються на основі екземплярів, навіть у віртуальних методах. Вони зберігаються в одному місці пам’яті, і вони знають лише тому, до якого об’єкта належать, тому що цей вказівник передається під час виклику.
  • Їх можна перевизначити, оскільки вони вирішуються за допомогою динамічна прив'язка під час виконання.

Нижче наведено реалізацію доступу до методу екземпляра:



Java






// Example to illustrate accessing the instance method .> import> java.io.*;> class> Foo {> >String name =>''>;> >// Instance method to be called within the> >// same class or from a another class defined> >// in the same package or in different package.> >public> void> geek(String name) {>this>.name = name; }> }> class> GFG {> >public> static> void> main(String[] args)> >{> >// create an instance of the class.> >Foo ob =>new> Foo();> >// calling an instance method in the class 'Foo'.> >ob.geek(>'techcodeview.com'>);> >System.out.println(ob.name);> >}> }>

>

>

Вихід

techcodeview.com>

Статичні методи Java

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

public static void geek(String name) { // code to be executed.... } // Must have static modifier in their declaration. // Return type can be int, float, String or user defined data type.>

Розподіл пам'яті для статичних методів

Вони зберігаються в просторі постійної генерації купи, оскільки пов’язані з класом, у якому вони знаходяться, а не з об’єктами цього класу. Але їхні локальні змінні та передані їм аргументи зберігаються в стеку. Оскільки вони належать до класу, тому їх можна викликати без створення об’єкта класу.

Важливі моменти:

java сканер далі
  • Статичні методи пов’язані з класом, у якому вони знаходяться, тобто вони викликаються без створення екземпляра класу, тобто ClassName.methodName(args) .
  • Вони розроблені з метою спільного використання між усіма об’єктами, створеними з одного класу.
  • Статичні методи не можна перевизначати, оскільки вони вирішуються за допомогою статична прив'язка компілятором під час компіляції. Однак ми можемо мати однакові імена оголошених методів статичний в обох суперклас і підклас , але буде називатися Приховування методу оскільки метод похідного класу приховає метод базового класу.

Нижче наведено ілюстрації доступу до статичних методів:

Java




// Example to illustrate Accessing> // the Static method(s) of the class.> import> java.io.*;> class> Geek {> >public> static> String geekName =>''>;> >public> static> void> geek(String name)> >{> >geekName = name;> >}> }> class> GFG {> >public> static> void> main(String[] args)> >{> >// Accessing the static method geek()> >// and field by class name itself.> >Geek.geek(>'vaibhav'>);> >System.out.println(Geek.geekName);> >// Accessing the static method geek()> >// by using Object's reference.> >Geek obj =>new> Geek();> >obj.geek(>'mohit'>);> >System.out.println(obj.geekName);> >}> }>

>

>

Вихід

vaibhav mohit>

Примітка:

Статичні змінні та їхні значення (примітиви або посилання), визначені в класі, зберігаються в PermGen простір пам'яті.

Питання що часто задаються

1. Що робити, якщо статична змінна посилається на об’єкт?

static int i = 1; static Object obj = new Object();>

У першому рядку значення 1 буде збережено в розділі PermGen. У другому рядку еталонний об’єкт зберігатиметься в розділі PermGen, а об’єкт, на який він посилається, – у розділі купи.

2. Коли використовувати статичні методи?

  • Якщо у вас є код, який можна спільно використовувати для всіх екземплярів одного класу, помістіть цю частину коду в статичний метод.
  • Вони в основному використовуються для доступу до статичних полів класу.

3. Різниця між методом екземпляра та статичним методом

  • Метод екземпляра може отримати прямий доступ до методів екземпляра та змінних екземпляра.
  • Метод екземпляра може отримувати прямий доступ до статичних змінних і статичних методів.
  • Статичні методи можуть отримувати прямий доступ до статичних змінних і статичних методів.
  • Статичні методи не можуть отримати прямий доступ до методів і змінних екземплярів. Вони повинні використовувати посилання на об’єкт. І статичний метод не може використовуватися це ключове слово, оскільки немає екземпляра для посилання на «це».