При таком использовании:
import static com.showboy.Myclass;
public class Anotherclass{}
в чем разница между import static com.showboy.Myclass и import com.showboy.Myclass?




См. Документация
The static import declaration is analogous to the normal import declaration. Where the normal import declaration imports classes from packages, allowing them to be used without package qualification, the static import declaration imports static members from classes, allowing them to be used without class qualification.
So when should you use static import? Very sparingly! Only use it when you'd otherwise be tempted to declare local copies of constants, or to abuse inheritance (the Constant Interface Antipattern). In other words, use it when you require frequent access to static members from one or two classes. If you overuse the static import feature, it can make your program unreadable and unmaintainable, polluting its namespace with all the static members you import. Readers of your code (including you, a few months after you wrote it) will not know which class a static member comes from. Importing all of the static members from a class can be particularly harmful to readability; if you need only one or two members, import them individually. Used appropriately, static import can make your program more readable, by removing the boilerplate of repetition of class names.
- для контрольной вставки очень длинного и не очень привлекательного файла документации вместо написания простых пояснений.
@xsl Нижняя часть сообщения должна быть в блоке цитаты? похоже, вы его набрали.
@Ferrybig: это цитата из связанной документации.
Статический импорт используется для импорта статических полей / методов класса вместо:
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;
}
Это полезно, если вы часто используете в своем коде константу из другого класса и если статический импорт не является неоднозначным.
Кстати, в вашем примере «import static org.example.Myclass;» не будет работать: импорт для класса, статический импорт для статических членов класса.
Вы указываете, что нет никакой разницы между этими двумя импортами. Однако вы можете использовать статический импорт, чтобы разрешить неквалифицированный доступ к статическим членам других классов. Где мне приходилось это делать:
import org.apache.commons.lang.StringUtils;
.
.
.
if (StringUtils.isBlank(aString)) {
.
.
.
Я могу это сделать:
import static org.apache.commons.lang.StringUtils.isBlank;
.
.
.
if (isBlank(aString)) {
.
.
.
Вы можете увидеть больше в документация.
the difference between "import static com.showboy.Myclass" and "import com.showboy.Myclass"?
Первый должен вызвать ошибку компилятора, поскольку статический импорт работает только для импорта полей или типов членов. (при условии, что MyClass не является внутренним классом или членом Showboy)
Я думаю ты имел ввиду
import static com.showboy.MyClass.*;
что делает все статические поля и члены из MyClass доступными в фактическом модуле компиляции без необходимости их квалификации ... как объяснено выше
Основная идея статического импорта состоит в том, что всякий раз, когда вы используете статический класс, статическую переменную или перечисление, вы можете импортировать их и избавиться от некоторой типизации.
Я поясню свою точку зрения на примере.
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 без звездочки?
@AmadeusDrZaius нет, статический импорт предназначен только для статических членов класса.
Хороший ответ! Поскольку многие «новички» читают этот пост, тем не менее, следует сделать одно небольшое предупреждение: Не злоупотребляйте звездочкой, чтобы предотвратить загрязнение пространства имен.
Допустим, у вас есть статические поля и методы внутри класса MyClass внутри пакета myPackage, и вы хотите получить к ним доступ напрямую, набирая myStaticField или myStaticMethod, не вводя каждый раз MyClass.myStaticField или MyClass.myStaticMethod.
Примечание: вам нужно сделать
import myPackage.MyClass или myPackage.*
для доступа к другим ресурсам
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
Модификатор static после import предназначен для получения / использования статических полей класса. Одна из областей, в которой я использую import static, - это получение констант из класса.
Мы также можем применить import static к статическим методам. Обязательно введите import static, потому что static import неправильный.
Что такое static import в Java - JavaRevisited - очень хороший ресурс, чтобы узнать больше о import static.
Очень хороший пример. npt типичный с MAth в wwww ....
https://www.java2novice.com/java-fundamentals/static-import/
public class MyStaticMembClass {
public static final int INCREMENT = 2;
public static int incrementNumber(int number){
return number+INCREMENT;
}
}
в другом файле включить
import static com.java2novice.stat.imp.pac1.MyStaticMembClass.*;
Я полностью согласен с предупреждениями @xsl выше. Одна из областей, где он определенно очень полезен, - это junit Assert: импортировать статический org.junit.Assert. * для всех ваших модульных тестов.