Відповіді:
Див. Документація
Статична декларація про імпорт аналогічна звичайній декларації про імпорт. Якщо звичайна декларація про імпорт імпортує класи з пакетів, що дозволяє використовувати їх без кваліфікації пакунків, статична декларація про імпорт імпортує статичні члени з класів, дозволяючи використовувати їх без кваліфікації класів.
Тож коли слід використовувати статичний імпорт? Дуже щадно! Використовуйте його лише тоді, коли в іншому випадку ви б спокусилися оголосити локальні копії констант або зловживати спадщиною (постійний інтерфейс Antipattern). Іншими словами, використовуйте його, коли вам потрібен частий доступ до статичних членів з одного або двох класів. Якщо ви зловживаєте функцією статичного імпорту, вона може зробити вашу програму нечитабельною та нездійсненною, забруднивши її простір імен усіма статичними членами, які ви імпортуєте. Читачі вашого коду (включаючи вас, через кілька місяців після того, як ви його написали) не дізнаються, з якого класу походить статичний член. Імпорт усіх статичних членів з класу може бути особливо шкідливим для читабельності; якщо вам потрібно лише одного або двох членів, імпортуйте їх окремо. При належному використанні статичний імпорт може зробити вашу програму більш зрозумілою,
Немає різниці між тими двома імпортами, які ви заявляєте. Однак ви можете використовувати статичний імпорт, щоб дозволити некваліфікований доступ до статичних членів інших класів. Де я мав це робити:
import org.apache.commons.lang.StringUtils;
.
.
.
if (StringUtils.isBlank(aString)) {
.
.
.
Я можу зробити це:
import static org.apache.commons.lang.StringUtils.isBlank;
.
.
.
if (isBlank(aString)) {
.
.
.
Більше ви можете побачити в документації .
Статичний імпорт використовується для імпорту статичних полів / методу класу замість:
package test;
import org.example.Foo;
class A {
B b = Foo.B_INSTANCE;
}
Ви можете написати:
package test;
import static org.example.Foo.B_INSTANCE;
class A {
B b = B_INSTANCE;
}
Це корисно, якщо у вашому коді часто використовується константа з іншого класу та якщо статичний імпорт не є неоднозначним.
Btw, у вашому прикладі "імпортувати статичний org.example.Myclass;" не працюватиме: імпорт призначений для класу, імпорт - статичний для статичних членів класу.
Основна ідея статичного імпорту полягає в тому, що щоразу, коли ви використовуєте статичний клас, статичну змінну або enum, ви можете імпортувати їх і врятувати себе від певного набору тексту.
Свою точку я докладу на прикладі.
import java.lang.Math;
class WithoutStaticImports {
public static void main(String [] args) {
System.out.println("round " + Math.round(1032.897));
System.out.println("min " + Math.min(60,102));
}
}
Той самий код зі статичним імпортом:
import static java.lang.System.out;
import static java.lang.Math.*;
class WithStaticImports {
public static void main(String [] args) {
out.println("round " + round(1032.897));
out.println("min " + min(60,102));
}
}
Примітка : статичний імпорт може зробити ваш код заплутаним для читання.
import static java.lang.Math
без зірочки?
різниця між "імпортувати статичний com.showboy.Myclass" та "імпортувати com.showboy.Myclass"?
Перший повинен створити помилку компілятора, оскільки статичний імпорт працює лише для імпорту полів або типів членів. (припустимо, що MyClass не є внутрішнім класом або членом шоубоя)
Я думаю, ти мав на увазі
import static com.showboy.MyClass.*;
завдяки чому всі статичні поля та члени MyClass доступні у фактичному блоці компіляції без необхідності їх кваліфікації ... як пояснено вище
import
Дозволяє Java програмісту класів доступу пакета без пакета кваліфікації.
Ця static import
функція дозволяє отримати доступ до статичних членів класу без кваліфікації класу.
import
Надає доступ до класів і інтерфейс , тоді як static import
забезпечує доступ до статичних членів класу.
Приклад:
З імпортом
import java.lang.System.*;
class StaticImportExample{
public static void main(String args[]){
System.out.println("Hello");
System.out.println("Java");
}
}
Зі статичним імпортом
import static java.lang.System.*;
class StaticImportExample{
public static void main(String args[]){
out.println("Hello");//Now no need of System.out
out.println("Java");
}
}
Дивіться також: Що таке статичний імпорт у Java 5
Скажімо, у вас є статичні поля та методи всередині класу, який називається MyClass
всередині пакета, який називається, myPackage
і ви хочете отримати доступ до них безпосередньо, ввівши myStaticField
або myStaticMethod
не ввівши кожен раз MyClass.myStaticField
абоMyClass.myStaticMethod
.
Примітка. Вам потрібно зробити
import myPackage.MyClass
або myPackage.*
для доступу до інших ресурсів
static
Модифікатор після того, як import
для вилучення / с використанням статичних полів класу. Однією з областей, в якій я користуюсь, import static
є отримання констант з класу. Ми також можемо застосовувати import static
статичні методи. Обов’язково введіть, import static
оскільки static import
це неправильно.
Що static import
в Java - JavaRevisited - Дуже хороший ресурс, про який можна дізнатися більшеimport static
.