У цій статті ми збираємося дізнатися про статичні методи та методи екземплярів у 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. Різниця між методом екземпляра та статичним методом
- Метод екземпляра може отримати прямий доступ до методів екземпляра та змінних екземпляра.
- Метод екземпляра може отримувати прямий доступ до статичних змінних і статичних методів.
- Статичні методи можуть отримувати прямий доступ до статичних змінних і статичних методів.
- Статичні методи не можуть отримати прямий доступ до методів і змінних екземплярів. Вони повинні використовувати посилання на об’єкт. І статичний метод не може використовуватися це ключове слово, оскільки немає екземпляра для посилання на «це».