Burada güncel ve derinlemesine bir cevap yazmayı düşündüm.
final
anahtar kelime birkaç yerde kullanılabilir.
- sınıflar
Bu final class
, başka hiçbir sınıfın bu son sınıfı genişletemeyeceği anlamına gelir . Java Çalışma Süresi ( JRE ) bir nesne başvurusunun son sınıf türünde olduğunu bildiğinde (örneğin F), bu başvurunun değerinin yalnızca F türünde olabileceğini bilir.
Ör:
F myF;
myF = new F(); //ok
myF = someOther; //someOther cannot be in type of a child class of F.
//because F cannot be extended.
Bu nedenle, bu nesnenin herhangi bir yöntemini çalıştırdığında, bu yöntemin çalışma zamanında sanal bir tablo kullanılarak çözülmesi gerekmez . yani çalışma zamanı polimorfizmi uygulanamaz. Bu yüzden çalışma süresi bununla uğraşmıyor. Bu, işlem süresini kısaltarak, performansı artıracağı anlamına gelir.
- yöntemleri
final method
Herhangi bir sınıfın A değeri , o sınıfı genişleten herhangi bir alt sınıfın bu son yöntem (ler) i geçersiz kılamayacağı anlamına gelir . Dolayısıyla bu senaryodaki çalışma zamanı davranışı da sınıflar için bahsettiğim önceki davranışla aynıdır.
- alanlar, yerel değişkenler, yöntem parametreleri
Yukarıdaki gibi herhangi bir tür belirtilirse final
, değer zaten sonlandırılmış demektir, bu nedenle değer değiştirilemez .
Ör:
Alanlar için yerel parametreler
final FinalClass fc = someFC; //need to assign straight away. otherwise compile error.
final FinalClass fc; //compile error, need assignment (initialization inside a constructor Ok, constructor can be called only once)
final FinalClass fc = new FinalClass(); //ok
fc = someOtherFC; //compile error
fc.someMethod(); //no problem
someOtherFC.someMethod(); //no problem
Yöntem parametreleri için
void someMethod(final String s){
s = someOtherString; //compile error
}
Bu sadece final
referans değerinin değiştirilemeyeceği anlamına gelir . yani yalnızca bir başlatmaya izin verilir. Bu senaryoda, çalışma zamanında, JRE değerlerin değiştirilemeyeceğini bildiğinden, tüm bu nihai değerleri (son referansların) L1 önbelleğine yükler . O Çünkü gerekmez için geri yüklemek dan tekrar ana belleğe . Aksi takdirde L2 önbelleğine yüklenir ve ana bellekten zaman zaman yüklenir. Yani aynı zamanda bir performans geliştirmesidir.
Bu nedenle, yukarıdaki 3 senaryoda, final
anahtar kelimeyi kullanabileceğimiz yerlerde belirtmediğimizde endişelenmemize gerek yok, derleyici optimizasyonları bunu bizim için yapacak. Derleyici optimizasyonlarının bizim için yaptığı birçok şey daha var. :)