1 Востаннє редагувалося Lesko.Serhiy (26.01.2015 17:38:03)

Тема: Розуміння ключового слова Static в Java

Доброго дня форумчани.

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

Я не можу зрозуміти, що таке static. В інеті шукав, але не можу зрозуміти, для чого власне воно потрібно та де використовується. Чи не могли б ви мені роз'яснити?

Дякую за увагу.

2

Re: Розуміння ключового слова Static в Java

По перше ніколи не кажіть Java, бо це не пристойно.
Static це:

  • 1. ті дані є в одному екземплярі на всю програму (наприклад константи);

  • 2. Метод, що не оперує жодними даними (полями об'єкту);

  • n. ...

3

Re: Розуміння ключового слова Static в Java

static final int age; як це зрозуміти
як я розумію то так
якщо ти в класі пишеш privat static int age; - то цю зміну можна використовувати лише в статистичних методах наприклад  public static void main(String[] args)  або в статистичних методах.
Але тут питання якщо я присвоюю privat static int age = 0;
то ця команда age++; буде збільшувати зміну на 1.
А якщо я в одному методі виконаю таку операцію age++;
А в другому методі age--; то значення зміниться?

4

Re: Розуміння ключового слова Static в Java

Вам, певне, тра іншу книжку читати по джаві, оскільки в хороших книжках все дуже добре пояснено.
п.с. final - це означає, що перевизначати метод/змінну в класах, які будуть наслідуватися, не можна

5

Re: Розуміння ключового слова Static в Java

Lesko.Serhiy написав:

static final int age; як це зрозуміти
як я розумію то так
якщо ти в класі пишеш privat static int age; - то цю зміну можна використовувати лише в статистичних методах наприклад  public static void main(String[] args)  або в статистичних методах.
Але тут питання якщо я присвоюю privat static int age = 0;
то ця команда age++; буде збільшувати зміну на 1.
А якщо я в одному методі виконаю таку операцію age++;
А в другому методі age--; то значення зміниться?

У вас дуже дивні питання як для людини, що дійсно пробувала розібратись.
Статичні змінні можна використовувати в нестатичних методах, не можна навпаки.
Наведені інкременти нічим не відрізнятимуться від аналогічних для нестатичних змінних.
Всього-то варто знати, що статичні змінні належать класу, в той час як нестатичні - об'єктам.

Подякували: Lesko.Serhiy1

6

Re: Розуміння ключового слова Static в Java

Поясніть будь ласка к мені зрозуміти static.

7

Re: Розуміння ключового слова Static в Java

А ви знаєте, чим відрізняється клас від об'єкта? Розкажіть своїми словами, і тоді вам пояснять в зрозумілих вам термінах.

8 Востаннє редагувалося Q-bart (26.01.2015 18:50:29)

Re: Розуміння ключового слова Static в Java

Lesko.Serhiy написав:

Поясніть будь ласка к мені зрозуміти static.

Я не вчив java але, вводжу в гугл https://www.google.com.ua/search?q=stat … 1%82%D0%BE

Звідти
http://www.linkex.ru/java/static.php
http://otvety.google.ru/otvety/thread?t … bd1cac31da
...
...

І тут і там пояснено... А ви кажете шукали..

9

Re: Розуміння ключового слова Static в Java

Ну класс описує дані задає дії наприклад методи, а обєкт задає конкретне значення.

10

Re: Розуміння ключового слова Static в Java

Я можу відповісти в такому ж стилі, і ви не зрозумієте абсолютно нічого. Потрудіться і виразіть ваші думки чітко. Не виключено, що після того ви все зрозумієте і так.

11

Re: Розуміння ключового слова Static в Java

Ну можливо наговорю зараз дурниці вибачайте якщо щось
Я на прикладі розповім.
Наприклад клас Cat в класі ми як би говоримо, що в кота є
privat String name;//Ім'я
privat String age;//Вік
public void May(){}
Це щодо класса, а об'єкт дає можливість задавати властивості для кота викликати методи які нам потрібні.

12 Востаннє редагувалося volodimirg (27.01.2015 00:55:57)

Re: Розуміння ключового слова Static в Java

Lesko.Serhiy написав:

Ну можливо наговорю зараз дурниці вибачайте якщо щось
Я на прикладі розповім.
Наприклад клас Cat в класі ми як би говоримо, що в кота є
privat String name;//Ім'я
privat String age;//Вік
public void May(){}
Це щодо класса, а об'єкт дає можливість задавати властивості для кота викликати методи які нам потрібні.

Вам треба добре розібратися, що таке клас, а що таке об'єкти.  З відповіді я розумію, що таке об'єкт вам не до кінця зрозуміло, або ви погано висловлюєтеся. Клас - це абстрактне поняття кота, де ви задаєте ім'я цьому поняттю Cat, далі записуєте властивості і методи потрібні для роботи вашої програми. Це в принципі ви правильно написали. Об'єкт - це клас, але завантажений в пам'ять комп'ютера і його поля вже проініціалізовані.

На основі класу Cat ви можете створити безліч об'єктів (котів).

Cat cat1=new Cat(); 
Cat cat2=new Cat();

... і т.д. Кожен цей об'єкт матиме свої відокремлені поля(вони ж властивості) і власні методи.

Якщо ви далі десь в коді напишете 

cat1.name="Bob"
сat2.name="Mike"

, то ви кожному об'єкту(коту cat1 та cat2) задасте свої імена.

Щодо модифікаторів static та final, їхня дія дещо відрізняється в залежності від того до поля чи методу ви застосовуєте їх.

Якщо поле оголосити static - то це поле буде одне для всіх. Тобто, якщо поле буде оголошено static

static name;
...
cat1.name="bob"
cat2.name="mike"

то ви спочатку задасте всім котам ім'я bob, а потім усім котам задасте ім'я mike, тобто усі ваші коти будуть мати одне ім'я незалежно, яку об'єктну змінну ви застосовуєте, це може бути корисне, якщо у вас коти мають якусь спільну властивість, наприклад кількість лап чи ще щось, навіть не знаю що для котів придумати:)

Якщо поле буде оголошене як final - то це буде константа, яку можна ініціалізувати (задати значення) лише раз.

Щодо методів, то там дещо по іншому, але схоже. Статичний метод можна викликати без об'єкта, наприклад якщо б ваш метод May був би статичний, то можна написати

Cat.May()

.
До статичного поля також можна звернутися не через об'єктну змінну, а через назву класу і взагалі рекомендують саме так звертатися:

Cat.name="Bob";

final до методів застосовується, щоб заборонити їхнє заміщення (overriding)

про методи я колись писав тут https://uk.wikibooks.org/wiki/%D0%9E%D1 … 0%B4%D0%B8

Взагалі присвятіть час і поекспериментуйте зі всім цим.

Подякували: Lesko.Serhiy1

13

Re: Розуміння ключового слова Static в Java

Поки говорили про клас, все було більш-менш нормально, а от об’єкти якось сумбурно, явно не розумієте, нащо вони треба.

Об’єкт — це втілення описаного в класі поняття. Після того, як ви описали клас котів подібним чином, ви можете створити об’єкти, які відповідають коту Мурчику, 3 роки, і коту Тому, 5 років. Вік та ім’я — очевидні властивості котів. А як бути з, наприклад, кількістю котів? Це не властивість кожного з котів, скоріше це властивість всіх котів, разом взятих — властивість поняття, властивість класу. От для таких властивостей і методів і використовують static.

Подякували: Lesko.Serhiy1

14

Re: Розуміння ключового слова Static в Java

Я вже починаю розуміти дуже допомогли ваші відповіді дякую гарно.
Да ви праві я не розумію що до об'єкта.

15

Re: Розуміння ключового слова Static в Java

Chemist-i написав:

Метод, що не оперує жодними даними (полями об'єкту);

Насправді оперує й полями, але лише статичними (які необов'язково є константами — просто є спільними для всього класу, на відміну від звичайних нестатичних полів, які створюються в кожному об'єкті-екземплярі класу окремо). А оскільки статичні поля та методи не прив'язані до конкретного об'єкта (лише до класу), доступ до них можна здійснювати через ім'я класу (що неможливо зробити з нестатичними — там потрібен вже конкретний екземпляр).

Для тих, хто вчив Delphi раніше, зійде таке порівняння: оскільки Java не має unit'ів (модулів), клас у ній поєднує можливості класу й модуля, і статичні поля та методи можна порівняти з глобальними змінними та процедурами цього модуля.

Подякували: Chemist-i1

16

Re: Розуміння ключового слова Static в Java

Master_Sergius написав:

Вам, певне, тра іншу книжку читати по джаві, оскільки в хороших книжках все дуже добре пояснено.
п.с. final - це означає, що перевизначати метод/змінну в класах, які будуть наслідуватися, не можна

тобто final змінні і методи належать до статичної ініціалізації
п.п.с а ще, що після того, як final ссилці ми присвоїли об'єкт інший об'єкт ми присвоїти не можемо, проте можемо модифікувати даний, якщо final ссилці не присвоїне жодне значення ні під час ініціалізації, ні у конструкторі- отримуємо помилку компіляції

17

Re: Розуміння ключового слова Static в Java

quez написав:

Поки говорили про клас, все було більш-менш нормально, а от об’єкти якось сумбурно, явно не розумієте, нащо вони треба.

Об’єкт — це втілення описаного в класі поняття. Після того, як ви описали клас котів подібним чином, ви можете створити об’єкти, які відповідають коту Мурчику, 3 роки, і коту Тому, 5 років. Вік та ім’я — очевидні властивості котів. А як бути з, наприклад, кількістю котів? Це не властивість кожного з котів, скоріше це властивість всіх котів, разом взятих — властивість поняття, властивість класу. От для таких властивостей і методів і використовують static.

простий підрахунок ссилок маєте на увазі?

18

Re: Розуміння ключового слова Static в Java

Regen написав:
quez написав:

Поки говорили про клас, все було більш-менш нормально, а от об’єкти якось сумбурно, явно не розумієте, нащо вони треба.

Об’єкт — це втілення описаного в класі поняття. Після того, як ви описали клас котів подібним чином, ви можете створити об’єкти, які відповідають коту Мурчику, 3 роки, і коту Тому, 5 років. Вік та ім’я — очевидні властивості котів. А як бути з, наприклад, кількістю котів? Це не властивість кожного з котів, скоріше це властивість всіх котів, разом взятих — властивість поняття, властивість класу. От для таких властивостей і методів і використовують static.

простий підрахунок ссилок маєте на увазі?

Ні, до чого тут підрахунок ссилок?

19 Востаннє редагувалося Regen (06.02.2015 18:53:46)

Re: Розуміння ключового слова Static в Java

quez написав:
Regen написав:
quez написав:

Поки говорили про клас, все було більш-менш нормально, а от об’єкти якось сумбурно, явно не розумієте, нащо вони треба.

Об’єкт — це втілення описаного в класі поняття. Після того, як ви описали клас котів подібним чином, ви можете створити об’єкти, які відповідають коту Мурчику, 3 роки, і коту Тому, 5 років. Вік та ім’я — очевидні властивості котів. А як бути з, наприклад, кількістю котів? Це не властивість кожного з котів, скоріше це властивість всіх котів, разом взятих — властивість поняття, властивість класу. От для таких властивостей і методів і використовують static.

простий підрахунок ссилок маєте на увазі?

Ні, до чого тут підрахунок ссилок?

до кількості котів і статичного поля) хоча, забийте, ми ж типу хіба про об'єкти і класи говоримо

20

Re: Розуміння ключового слова Static в Java

Regen написав:
quez написав:
Regen написав:

простий підрахунок ссилок маєте на увазі?

Ні, до чого тут підрахунок ссилок?

до кількості котів і статичного поля) хоча, забийте, ми ж типу хіба про об'єкти і класи говоримо

Все одно не бачу зв’язку між кількістю екземплярів та підрахунком ссилок.