Yanıtlar:
Belgelere Bakın
Statik ithalat beyanı, normal ithalat beyanına benzer. Normal içe aktarma bildiriminin sınıfları paketlerden içe aktardığı ve paket niteliği olmadan kullanılmasına izin verdiği durumlarda, statik içe aktarma bildirimi, statik nitelikleri sınıflardan alır ve sınıf niteliği olmadan kullanılmasına izin verir.
Peki statik içe aktarmayı ne zaman kullanmalısınız? Çok tutumlu! Bunu yalnızca sabitlerin yerel kopyalarını bildirme veya mirasın (Sabit Arayüz Antipattern'i) kötüye kullanma isteğinde bulunduğunuzda kullanın. Başka bir deyişle, bir veya iki sınıftan statik üyelere sık erişmeniz gerektiğinde kullanın. Statik içe aktarma özelliğini aşırı kullanırsanız, programınızı okunamaz ve sürdürülemez hale getirerek ad alanını içe aktardığınız tüm statik üyelerle kirletebilir. Kodunuzun okuyucuları (siz de dahil, yazdıktan birkaç ay sonra), statik bir üyenin hangi sınıftan geldiğini bilmeyecektir. Tüm statik üyelerin bir sınıftan içe aktarılması, okunabilirliğe özellikle zararlı olabilir; yalnızca bir veya iki üyeye ihtiyacınız varsa, ayrı ayrı içe aktarın. Uygun şekilde kullanıldığında, statik içe aktarma programınızı daha okunabilir hale getirebilir,
Belirttiğiniz iki ithalat arasında hiçbir fark yoktur. Ancak, diğer sınıfların statik üyelerine niteliksiz erişime izin vermek için statik içe aktarmayı kullanabilirsiniz. Bunu yapmak zorunda olduğum yerde:
import org.apache.commons.lang.StringUtils;
.
.
.
if (StringUtils.isBlank(aString)) {
.
.
.
Bunu yapabilirim:
import static org.apache.commons.lang.StringUtils.isBlank;
.
.
.
if (isBlank(aString)) {
.
.
.
Belgelerde daha fazlasını görebilirsiniz .
Statik içe aktarma, sınıf yerine statik alanları / yöntemi içe aktarmak için kullanılır:
package test;
import org.example.Foo;
class A {
B b = Foo.B_INSTANCE;
}
Yazabilirsin :
package test;
import static org.example.Foo.B_INSTANCE;
class A {
B b = B_INSTANCE;
}
Kodunuzda genellikle başka bir sınıftan bir sabit kullanılıyorsa ve statik içe aktarma belirsiz değilse kullanışlıdır.
Btw, örneğinizde "içe aktarma statik org.example.Myclass;" çalışmaz: import sınıf, import static bir sınıfın statik üyeleri içindir.
Statik içe aktarmanın temel fikri, bir statik sınıf, statik bir değişken veya bir numaralandırma kullandığınızda, bunları içe aktarabileceğiniz ve kendinizi bazı yazımlardan kurtarabileceğinizdir.
Konuyu örnekle açıklayacağım.
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));
}
}
Statik içe aktarmalarla aynı kod:
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));
}
}
Not : statik içe aktarma kodunuzu okumak için kafa karıştırıcı hale getirebilir.
import static java.lang.Math
Yıldız işareti olmadan yazmak bir şey ifade eder mi?
statik com.showboy.Myclass "ve" import com.showboy.Myclass "arasındaki fark nedir?
Statik içe aktarma yalnızca alanların veya üye türlerinin içe aktarılması için çalıştığından birincisi derleyici hatası oluşturmalıdır. (Sınıfımın bir iç sınıf veya şovmen üyesi olmadığı varsayılarak)
Bence demek istedin
import static com.showboy.MyClass.*;
Bu, MyClass'taki tüm statik alanları ve üyeleri, onları nitelemek zorunda kalmadan gerçek derleme biriminde kullanılabilir hale getirir ... yukarıda açıklandığı gibi
import
Paket yeterlilik olmadan bir paketin erişim sınıflarına java programcısı sağlar.
Bu static import
özellik, sınıf kalifikasyonu olmadan bir sınıfın statik üyelerine erişmenizi sağlar.
import
Sınıflara ulaşmak sadece ve arayüz oysa static import
sınıfın statik üyelerine yakınınızda.
Misal :
ile ithalat
import java.lang.System.*;
class StaticImportExample{
public static void main(String args[]){
System.out.println("Hello");
System.out.println("Java");
}
}
İle statik ithalat
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");
}
}
Ayrıca bkz: Java 5'te statik içe aktarma nedir
Diyelim ki bir sınıfın MyClass
içinde denilen paketin içinde denilen statik alanlar ve yöntemler var myPackage
ve her seferinde yazarak myStaticField
veya yazmadan bunlara doğrudan erişmek istiyorsunuz veyamyStaticMethod
MyClass.myStaticField
MyClass.myStaticMethod
.
Not:
Diğer kaynaklara erişmek için import myPackage.MyClass
veyamyPackage.*
static
Sonra değiştirici import
/ alınırken bir sınıfın statik alanlar kullanarak içindir. Kullandığım bir alan import static
, bir sınıftan sabitleri almak içindir. import static
Statik yöntemlere de başvurabiliriz . Yazdığınızdan emin olun import static
çünkü static import
yanlış.
static import
Java nedir - JavaRevisited - Hakkında daha fazla bilgi edinmek için çok iyi bir kaynakimport static
.