The статичне ключове слово в Java в основному використовується для керування пам'яттю. Ключове слово static у Java використовується для спільного використання однієї змінної або методу даного класу. Користувачі можуть застосовувати статичні ключові слова зі змінними, методами, блоками та вкладеними класами. Ключове слово static належить до класу, ніж екземпляр класу. Ключове слово static використовується для постійної змінної або методу, який є однаковим для кожного екземпляра класу.
The статичний Ключове слово є модифікатором доступу в Java, який можна застосувати для наступного:
матриця мовою c
- Блоки
- Змінні
- методи
- Заняття
Примітка: Щоб створити статичний член (блок, змінну, метод, вкладений клас), додайте перед його оголошенням ключове слово статичний .
Характеристики статичного ключового слова:
Ось деякі характеристики ключового слова static у Java:
- Спільний розподіл пам’яті: статичні змінні та методи виділяють простір пам’яті лише один раз під час виконання програми. Цей простір пам’яті ділиться між усіма примірниками класу, що робить статичні члени корисними для підтримки глобального стану або спільної функціональності. Доступ без створення екземпляра об’єкта: до статичних членів можна отримати доступ без необхідності створення екземпляра класу. Це робить їх корисними для надання службових функцій і констант, які можна використовувати в усій програмі. Пов’язані з класом, а не з об’єктами: статичні члени пов’язані з класом, а не з окремими об’єктами. Це означає, що зміни в статичному члені відображаються в усіх екземплярах класу, і що ви можете отримати доступ до статичних членів за допомогою імені класу, а не посилання на об’єкт. Неможливо отримати доступ до нестатичних членів: статичні методи та змінні не можуть отримати доступ до нестатичних членів класу, оскільки вони не пов’язані з жодним конкретним екземпляром класу. Можна перевантажувати, але не перевизначати: статичні методи можна перевантажувати, що означає, що ви можете визначити кілька методів з однаковою назвою, але різними параметрами. Однак їх не можна перевизначити, оскільки вони пов’язані з класом, а не з окремим екземпляром класу.
Коли член оголошено статичним, до нього можна отримати доступ до створення будь-яких об’єктів його класу та без посилання на будь-який об’єкт. Наприклад, у наведеній нижче програмі Java ми отримуємо доступ до статичного методу m1() без створення будь-якого об’єкта Тест клас.
Java
// Java program to demonstrate that a static member> // can be accessed before instantiating a class> class> Test> {> > // static method> > static> void> m1()> > {> > System.out.println(> 'from m1'> );> > }> > public> static> void> main(String[] args)> > {> > // calling m1 without creating> > // any object of class Test> > m1();> > }> }> |
>
>Вихід
from m1>
Статичні блоки
Якщо вам потрібно виконати обчислення, щоб ініціалізувати ваш статичні змінні , ви можете оголосити статичний блок, який виконується рівно один раз, коли клас завантажується вперше.
Розглянемо наступну програму Java, яка демонструє використання статичних блоків.
Java
// Java program to demonstrate use of static blocks> class> Test> {> > // static variable> > static> int> a => 10> ;> > static> int> b;> > > // static block> > static> {> > System.out.println(> 'Static block initialized.'> );> > b = a *> 4> ;> > }> > public> static> void> main(String[] args)> > {> > System.out.println(> 'from main'> );> > System.out.println(> 'Value of a : '> +a);> > System.out.println(> 'Value of b : '> +b);> > }> }> |
>
>Вихід
Static block initialized. from main Value of a : 10 Value of b : 40>
Докладну статтю про статичні блоки див. у статичних блоках
Статичні змінні
Коли змінна оголошується як статична, створюється єдина копія змінної, яка використовується для всіх об’єктів на рівні класу. Статичні змінні, по суті, є глобальними змінними. Усі екземпляри класу спільно використовують ту саму статичну змінну.
Важливі моменти для статичних змінних:
- Ми можемо створювати статичні змінні лише на рівні класу. Дивіться тут
- статичний блок і статичні змінні виконуються в тому порядку, в якому вони присутні в програмі.
Нижче наведено програму Java, яка демонструє, що статичний блок і статичні змінні виконуються в тому порядку, в якому вони присутні в програмі.
Java
// Java program to demonstrate execution> // of static blocks and variables> class> Test> {> > // static variable> > static> int> a = m1();> > > // static block> > static> {> > System.out.println(> 'Inside static block'> );> > }> > > // static method> > static> int> m1() {> > System.out.println(> 'from m1'> );> > return> 20> ;> > }> > > // static method(main !!)> > public> static> void> main(String[] args)> > {> > System.out.println(> 'Value of a : '> +a);> > System.out.println(> 'from main'> );> > }> }> |
>
>Вихід
from m1 Inside static block Value of a : 20 from main>
Статичні методи
Коли метод оголошено з статичний ключове слово, він відомий як статичний метод. Найпоширенішим прикладом статичного методу є головний ( ) метод. Як обговорювалося вище, до будь-якого статичного члена можна отримати доступ до того, як будуть створені будь-які об’єкти його класу, і без посилання на будь-який об’єкт. Методи, оголошені як статичні, мають кілька обмежень:
- Вони можуть лише безпосередньо викликати інші статичні методи.
- Вони можуть отримати лише прямий доступ до статичних даних.
- Вони не можуть посилатися це або супер в будь-якому випадку.
Нижче наведено програму Java для демонстрації обмежень на статичні методи.
Java
// Java program to demonstrate restriction on static methods> class> Test> {> > // static variable> > static> int> a => 10> ;> > > // instance variable> > int> b => 20> ;> > > // static method> > static> void> m1()> > {> > a => 20> ;> > System.out.println(> 'from m1'> );> > > // Cannot make a static reference to the non-static field b> > b => 10> ;> // compilation error> > > // Cannot make a static reference to the> > // non-static method m2() from the type Test> > m2();> // compilation error> > > // Cannot use super in a static context> > System.out.println(> super> .a);> // compiler error> > }> > > // instance method> > void> m2()> > {> > System.out.println(> 'from m2'> );> > }> > > > > public> static> void> main(String[] args)> > {> > // main method> > }> }> |
>
>
Вихід:
prog.java:18: error: non-static variable b cannot be referenced from a static context b = 10; // compilation error ^ prog.java:22: error: non-static method m2() cannot be referenced from a static context m2(); // compilation error ^ prog.java:25: error: non-static variable super cannot be referenced from a static context System.out.println(super.a); // compiler error ^ prog.java:25: error: cannot find symbol System.out.println(super.a); // compiler error ^ symbol: variable a 4 errors>
Коли використовувати статичні змінні та методи?
Використовуйте статичну змінну для властивості, яка є спільною для всіх об’єктів. Наприклад, у класі Student усі студенти мають однакову назву коледжу. Використовуйте статичні методи для зміни статичних змінних.
Розглянемо наступну програму Java, яка ілюструє використання статичний ключові слова зі змінними та методами.
Java
як перетворити рядок на char
// A java program to demonstrate use of> // static keyword with methods and variables> // Student class> class> Student {> > String name;> > int> rollNo;> > // static variable> > static> String cllgName;> > // static counter to set unique roll no> > static> int> counter => 0> ;> > public> Student(String name)> > {> > this> .name = name;> > this> .rollNo = setRollNo();> > }> > // getting unique rollNo> > // through static variable(counter)> > static> int> setRollNo()> > {> > counter++;> > return> counter;> > }> > // static method> > static> void> setCllg(String name) { cllgName = name; }> > // instance method> > void> getStudentInfo()> > {> > System.out.println(> 'name : '> +> this> .name);> > System.out.println(> 'rollNo : '> +> this> .rollNo);> > // accessing static variable> > System.out.println(> 'cllgName : '> + cllgName);> > }> }> // Driver class> public> class> StaticDemo {> > public> static> void> main(String[] args)> > {> > // calling static method> > // without instantiating Student class> > Student.setCllg(> 'XYZ'> );> > Student s1 => new> Student(> 'Alice'> );> > Student s2 => new> Student(> 'Bob'> );> > s1.getStudentInfo();> > s2.getStudentInfo();> > }> }> |
>
>Вихід
name : Alice rollNo : 1 cllgName : XYZ name : Bob rollNo : 2 cllgName : XYZ>
Статичні класи
Можна створити клас статичний лише якщо це вкладений клас. Ми не можемо оголосити клас верхнього рівня зі статичним модифікатором, але можемо оголосити вкладені класи як статичні. Такі типи класів називаються вкладеними статичними класами. Вкладений статичний клас не потребує посилання на зовнішній клас. У цьому випадку статичний клас не може отримати доступ до нестатичних членів зовнішнього класу.
Примітка: Для статичного вкладеного класу див. a статичний вкладений клас у java
Реалізація:
Java
рядок n java
// A java program to demonstrate use> // of static keyword with Classes> import> java.io.*;> public> class> GFG {> > private> static> String str => 'techcodeview.com'> ;> > // Static class> > static> class> MyNestedClass {> > > // non-static method> > public> void> disp(){> > System.out.println(str);> > }> > }> > > public> static> void> main(String args[])> > {> > GFG.MyNestedClass obj> > => new> GFG.MyNestedClass();> > obj.disp();> > }> }> |
>
>Вихід
techcodeview.com>
Ось приклад програми Java, яка демонструє використання ключового слова static:
Java
public> class> ExampleClass {> > public> static> int> count => 0> ;> > public> int> id;> > public> ExampleClass() {> > count++;> > id = count;> > }> > public> static> void> printCount() {> > System.out.println(> 'Number of instances: '> + count);> > }> > public> void> printId() {> > System.out.println(> 'Instance ID: '> + id);> > }> > public> static> void> main(String[] args) {> > ExampleClass e1 => new> ExampleClass();> > ExampleClass e2 => new> ExampleClass();> > ExampleClass e3 => new> ExampleClass();> > e1.printId();> > e2.printId();> > e3.printId();> > ExampleClass.printCount();> > }> }> |
>
>Вихід
Instance ID: 1 Instance ID: 2 Instance ID: 3 Number of instances: 3>
Переваги:
- Ефективність пам’яті: пам’ять статичним членам виділяється лише один раз під час виконання програми, що може призвести до значної економії пам’яті для великих програм. Покращена продуктивність: оскільки статичні члени пов’язані з класом, а не з окремими екземплярами, до них можна отримати доступ швидше та ефективніше, ніж до нестатичних членів. Глобальна доступність: доступ до статичних членів можна отримати з будь-якої точки програми, незалежно від того, чи було створено екземпляр класу. Інкапсуляція службових методів: статичні методи можна використовувати для інкапсуляції службових функцій, які не потребують жодної інформації про стан об’єкта. Це може покращити організацію коду та спростити повторне використання службових функцій у кількох класах. Константи: статичні фінальні змінні можна використовувати для визначення констант, які є спільними для всієї програми. Функціональність на рівні класу: статичні методи можна використовувати для визначення функціональності на рівні класу, яка не потребує жодної інформації про стан від об’єкта, як-от фабричні методи чи допоміжні функції.
Загалом ключове слово static є потужним інструментом, який може допомогти підвищити ефективність і організацію ваших програм Java.