2011-08-16 11 views
23

Şu anda S (O) CJP'yi Sierra & Bates kitabı ile hazırlıyorum.Nihai anahtar kelimeyi neden anonim iç sınıflarla kullanıyoruz?

İç sınıflar hakkında (yerel veya anonim yöntem), yerel değişkenlere erişemediğimizi, çünkü sınıf yığın üzerinde yaşadıklarında ve yöntem tarafından döndürüldüklerinde yığın üzerinde yaşadıklarını söylerler. Bu değişkenler yığında bulunan ancak yöntem sona ermesinden beri artık mevcut değil ...

Hepimizin bildiği gibi, bunu son anahtar sözcüğünü kullanarak geçebiliriz. Bu kitapta söyledikleri şeydir, ancak bu son anahtar kelimenin etkisinin ne olduğunu açıklamıyorlar ... Bildiğim kadarıyla, bir yerel değişkendeki son anahtar sözcüğün kullanılması, onu yığınta yaşatamaz ... Peki daha fazla yığın olabilir iken sınıf hala yığın üzerinde yaşayan bir nihai değişken erişmek mümkün olurdu ???

Sanırım iç sınıftaki bu son yerel değişkenin bir çeşit “kopyası” olmalı. Değer değişemediğinden, neden bu bilgiyi çoğaltmıyorsunuz? Birisi bunu onaylayabilir mi, yoksa bir şey mi özlediğimi söyleyebilir mi?

cevap

18

Sezginiz doğrudur, çünkü değişken son olduğundan bir kopyasını almak güvenlidir. Tabii ki, referans türleri için bu, referansı nesneye değil, referans aldığı nesneye kopyalamak anlamına gelir.

11

Derleyici, iç sınıfın dış sınıftaki son alana gitmesine izin vermek için son referansı kapaklar altında kopyalayan ince bir numara kullanır. Kopyalama, alanın nihaî olmasının nedeni bu yüzden değerin değişmemesidir.

Bkz. Ör. http://tech-read.com/2008/06/19/why-inner-class-can-access-only-final-variable/

+0

Evet, ancak derleyici, son olmasa bile değişkeni yine de kopyalayabilir. Benim tahminim, son halini gerektirmesi, kodu değişmeyecek şekilde daha açık bir hale getiriyor. –

+2

Sorun - benim anlayışım için - eğer son halini gerektirmemeniz durumunda, bunu değiştirmenin ve dış değişken değiştiğinde güncellenmenin çok daha dikkatli olmasına ihtiyaç vardır. İç sınıfın sayısız örneğine sahipseniz ve hepsinin güncellenmesi gerekiyorsa? –