, başlatılıyor Alanlar (vurgu benim): Her yapıcı içineNeden örnek başlatıcı bloğu içinde son alanları kullanamıyorum? Oracle'ın <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html" rel="nofollow">guide</a> itibaren
Java derleyici kopya başlatıcısı blokları. Bu nedenle, bu yaklaşım çoklu kurucular arasında bir kod bloğunu paylaşmak için kullanılabilir. Ayrıca
gelen DOJ en article Java örneği başlatıcıları (vurgu benim) hakkında:
Örnek başlatma blok kodu, diğer bir deyişle, doğru bir yapıcı içinde süper() çağrısının ardından ishal sonra Tüm süper kurucular'u çalıştırdılar.
Bunu göz önünde bulundurduğumda, derleyici, aşağıdaki gibi başlatıcı blok içerisindeki (atanan) son alanları kullanmaya çalıştığımda neden her zaman uyarır?
final class PpTitleBook implements TitleBook {
private final Resources resources;
private final Log log;
PpTitleBook(Resources resources, Log log) {
this.resources = resources;
this.log = log;
}
{
String[] resTitles = resources.getStringArray(R.array.titles);
if (book().getAllKeys().isEmpty()) {
for (int i = 0; i < resTitles.length; i++) {
newTitle(resTitles[i]);
}
}
}
Yukarıda gösterilenlerden başka başka bir yapıcım yok. Peki uyarının arkasındaki gerçek sebep nedir?
Yanıt şu soruya cevap veriyor: * Örnek başlatma bloğu kodu, kurucudaki * (superm) çağrısından hemen sonra çalışır, böylece kurucunun kalan kodu, son alanı başlatmadan önce yürütülür. Ve bu da uyarı mesajının da söylediği şey. –
Ayrıca bkz. Http://stackoverflow.com/questions/20593606/how-non-static-initializer-block-invoked?rq=1 (soru kötüyse de, yanıtlar iyi) –