Respostas:
Ver documentação
A declaração de importação estática é análoga à declaração de importação normal. Onde a declaração de importação normal importa classes de pacotes, permitindo que sejam usadas sem qualificação de pacote, a declaração de importação estática importa membros estáticos de classes, permitindo que sejam usados sem qualificação de classe.
Então, quando você deve usar a importação estática? Muito com moderação! Use-o apenas quando estiver tentado a declarar cópias locais de constantes ou a abusar da herança (o Antipadrão da interface constante). Em outras palavras, use-o quando precisar de acesso frequente a membros estáticos de uma ou duas classes. Se você usar demais o recurso de importação estática, ele poderá tornar seu programa ilegível e impossível de manter, poluindo seu espaço de nome com todos os membros estáticos importados. Os leitores do seu código (incluindo você, alguns meses depois de escrevê-lo) não saberão de qual classe um membro estático vem. A importação de todos os membros estáticos de uma classe pode ser particularmente prejudicial à legibilidade; se você precisar de apenas um ou dois membros, importe-os individualmente. Quando usada adequadamente, a importação estática pode tornar seu programa mais legível,
Não há diferença entre essas duas importações que você declara. No entanto, você pode usar a importação estática para permitir acesso não qualificado a membros estáticos de outras classes. Onde eu costumava fazer isso:
import org.apache.commons.lang.StringUtils;
.
.
.
if (StringUtils.isBlank(aString)) {
.
.
.
Eu posso fazer isso:
import static org.apache.commons.lang.StringUtils.isBlank;
.
.
.
if (isBlank(aString)) {
.
.
.
Você pode ver mais na documentação .
A importação estática é usada para importar campos / métodos estáticos de uma classe em vez de:
package test;
import org.example.Foo;
class A {
B b = Foo.B_INSTANCE;
}
Você pode escrever :
package test;
import static org.example.Foo.B_INSTANCE;
class A {
B b = B_INSTANCE;
}
É útil se você costuma usar uma constante de outra classe no seu código e se a importação estática não é ambígua.
Btw, no seu exemplo "import static.example.Myclass static;" não funcionará: a importação é para classe, a importação estática é para membros estáticos de uma classe.
A idéia básica da importação estática é que sempre que você estiver usando uma classe estática, uma variável estática ou uma enumeração, você poderá importá-las e poupar a digitação.
Vou elaborar meu argumento com exemplo.
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));
}
}
Mesmo código, com importações estáticas:
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));
}
}
Nota : a importação estática pode tornar seu código confuso para leitura.
import static java.lang.Math
sem o asterisco?
a diferença entre "importar estático com.showboy.Myclass" e "importar com.showboy.Myclass"?
O primeiro deve gerar um erro do compilador, pois a importação estática funciona apenas para importar campos ou tipos de membros. (supondo que MyClass não seja uma classe interna ou membro do showboy)
Eu acho que você quis dizer
import static com.showboy.MyClass.*;
que disponibiliza todos os campos e membros estáticos do MyClass na unidade de compilação real sem precisar qualificá-los ... como explicado acima
Isso import
permite que o programador java acesse as classes de um pacote sem qualificação do pacote.
O static import
recurso permite acessar os membros estáticos de uma classe sem a qualificação da classe.
O import
fornece acessibilidade para classes e interface, enquanto static import
fornece acessibilidade para membros estáticos da classe.
Exemplo:
Com importação
import java.lang.System.*;
class StaticImportExample{
public static void main(String args[]){
System.out.println("Hello");
System.out.println("Java");
}
}
Com importação estática
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");
}
}
Consulte também: O que é importação estática no Java 5
Digamos que você tenha campos e métodos estáticos dentro de uma classe chamada MyClass
dentro de um pacote chamado myPackage
e deseje acessá-los diretamente digitando myStaticField
ou myStaticMethod
sem digitar cada vez MyClass.myStaticField
ouMyClass.myStaticMethod
.
Nota: você precisa fazer um
import myPackage.MyClass
ou myPackage.*
para acessar os outros recursos
O static
modificador a seguir import
é para recuperar / usar campos estáticos de uma classe. Uma área na qual eu uso import static
é para recuperar constantes de uma classe. Também podemos aplicar import static
em métodos estáticos. Certifique-se de digitar import static
porque static import
está errado.
O que há static import
em Java - JavaRevisited - Um recurso muito bom para saber maisimport static
.