Arasındaki fark nedir "Sınıf.() forName" ve "Sınıf.() forName.() newİnstance"?
Class.forName()
Class.forName().newInstance()
arasındaki fark nedir?
Önemli fark (onlar hakkında bir şey okudum!) anlamıyorum. Bana yardım eder misiniz? Teşekkürler.
CEVAP
Belki bir örnek her iki yöntem de nasıl kullanıldığını gösteren şeyleri daha iyi anlamanıza yardımcı olacaktır. Yani, düşünün, aşağıdaki sınıf:
package test;
public class Demo {
public Demo() {
System.out.println("Hi!");
}
@SuppressWarnings("unchecked")
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("test.Demo");
Demo demo = (Demo) clazz.newInstance();
}
}
Kendi javadoc Class.forName(String)
arayıp bilgilendirdiClass
nesnenin belirli bir dize adı ile sınıf veya arabirim ile ilişkili veriryani yazın clazz
değişken etkilenen test.Demo.class
döner Class
.
Sonra, clazz.newInstance()
aramaoluşturur sınıfının yeni bir örneği tarafından temsil edilen Class
nesne. Sınıfı boş bir bağımsız değişken listesi ile new
bir ifade gibi örneği.Diğer bir deyişle, bu aslında new Demo()
bir eşdeğerdir ve Demo
yeni bir örneğini döndürür.
Ve Demo
bu sınıf çalışan böylece aşağıdaki çıktıyı yazdırır:
Hi!
new
geleneksel büyük farkı newInstance
çalışma zamanı kadar, kodunuzu daha dinamik hale bilmediğin bir sınıf oluşturmak için izin vermektedir.
Tipik bir örnek, çalışma zamanında, tam sürücü çalışmayı gerçekleştirmek için gerekli olan BULUNMAKTAYDI API. Konteyner EJBs, Sunucu uygulaması kaplar başka güzel örnek: dinamik yük yükleme zamanı ve çalışma zamanı, daha önce hiçbir şey bilmiyorlar bileşenleri oluşturmak için kullanıyorlar.
Eğer daha ileri gitmek istiyorsanız aslında, paragrafın hemen üstünde alıntı olduğunu Understanding Class.forName() Ted Neward kağıt bakabilirsiniz.
EDİT(OP yorum olarak gönderilen bir soruya cevap): yerli mal sürücüleri biraz daha özel. Getting Started with the JDBC API DriverManager bölümde açıkladı:
( ... )
Driver
bir sınıf yüklü, ve bu nedenle otomatik olarak kayıtlı iki kişiden biriDriverManager
ile yol:
yöntemi
Class.forName
çağırarak. Bu açıkça yükler sürücü sınıfı. Etmediğinden herhangi bir dış kurulum bu şekilde bağlı yükleme sürücüsü önerilirDriverManager
kullanarak bir çerçeve. Aşağıdaki kod yükler sınıf 25**:Class.forName("acme.db.Driver");
Eğer
acme.db.Driver
yükleme öylesine yazılmış bir neden oluşturulacak örnek ve ayrıca aramalarDriverManager.registerDriver
ile parametre olarak örneği(bunun gibi yapmak gerekir), o zaman.DriverManager
'nın sürücülerinin listesi ve bir bağlantı oluşturmak için kullanılabilir.(...)
Her iki durumda da,
DriverManager.registerDriver
çağırarak kendini kayıt defterine yeni yüklenenDriver
sınıfının sorumluluğundadır. Belirtildiği gibi, bu sınıfı yüklendiğinde otomatik olarak yapılmalıdır.
Başlatma sırasında kendilerini kayıt için gerekli OLANLARI sürücüsü genellikle bu gibi statik başlatma bloğu kullanın:
package acme.db;
public class Driver {
static {
java.sql.DriverManager.registerDriver(new Driver());
}
...
}
Class.forName("acme.db.Driver")
arama acme.db.Driver
sınıfı başlatılması ve statik başlatma bloğu yürütme böylece neden olur. Ve Class.forName("acme.db.Driver")
aslında "" bir örnek, ama bu (iyi) OLANLARI (Sürücü nasıl uygulandığını sadece bir sonucudur. oluşturur
Bir yan not olarak, bu artık gerekli değil gerekli OLANLARI 4.0(Java 7'den beri varsayılan paket olarak eklendi) ve yeni otomatik yüklemeli OLANLARI 4.0 sürücüleri özellik ile belirtmek isterim. JDBC 4.0 enhancements in Java SE 6 bkz.
Arasındaki fark "ekran" ve &...
&Quot arasındaki fark nedir;kelime-bre...
&Quot arasındaki fark nedir CSS;."...
Tam da sözde bir " Sınıf Küme "Ob...
&Quot;text" ve yeni bir Dize(&quo...