Прочитав про static, але не можу зрозуміти до кінця його принцип роботи і чим загрожує його використання. Іноді в коді потрібно (наприклад при використанні enum) використання static змінних або методів. Чому коду взагалі потрібно статики? Для того щоб можна було простіше писати PageOne.setName (). І чому коли ми звертаємося до static, все що до нього "торкається", теж перетворюється в static? Я розумію що всі елементи з цієї припискою займають в пам'яті місце тільки один раз і надалі тільки вона використовується, але я не розумію цього моменту. Чому тоді все методи і змінні не робити static? Дякуємо.
Чому коду взагалі потрібно статики?
- Для виклику статичного методу або Філда не потрібно створювати екземпляр класу.
- Константи можуть бути тільки статичними.
- Значення статичних Філд шарятся між усіма інстанси.
- Статичний імпорт скорочує написання коду.
- За допомогою статики легше організувати централізований доступ до потрібного функціоналу.
- Статичний контекст в основному використовують в так званих хелпери.
Чому тоді все методи і змінні не робити static?
Тому що основні концепції ООП припускають усвідомлення того факту, що принципово різні за своєю природою об'єкти не можуть змінювати властивості або керувати поведінкою один одного. А родинні об'єкти повинні вміти зберігати "секрети". Бездумне використання публічного статичного контексту може призвести до сумних наслідків.
Банальний приклад: поширена помилка всіх початківців автоматизаторів, бажаючих распараллелить свої тести зі статичним потокоуязвімим драйвером.
- Статичний контекст в основному використовують в так званих хелпери.
Говорячи про хелпери, уявіть модулі, що полегшують вам життя в процесі автоматизації: DateTimeUtils, CurrencyUtils, EmailUtils, StringUtils, ReflectionUtils, PropertiesUtils, XMLUtils, DataProviderUtils, ReportUtils і т.п. Всі ті речі, які фактично можуть бути використані в різних частинах програми, і технічно не вимагають створення додаткових сутностей. Обертаючи сирі API якихось готових бібліотек, і формуючи своєрідний single public entry point, ви полегшуєте собі розробку як фреймворка в цілому, так і доменної частини.
static визначається на етапі компіляції, тому в коді ти завжди сміливо можеш до них звертатися, і тобі не потрібно створювати екземпляр класу. тобі потрібно зрозуміти як виконується код в java
Так я розумію, просто мені завжди здавалося що використовувати всюди статики погано. Наприклад, мені потрібно використовувати анотації @BeforeClass і @AfterClass. а методи пов'язані з ними зобов'язує зробити все навколо статики (і самі методи і все що в них). І поки я не зовсім розумію як в подальшому це відіб'ється на роботі Framework.
канешно погано, все залежить від завдання десь тобі потрібна динаміка, де то статика