ProgramlamaJava geliştirici

Java'da 'transient' anahtar kelimesi nasıl çalışır? Amaçlarını ve nesnelerin seri hale getirilmesi sırasında kullanımına dair özelliklerini açıklayın.

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

transient anahtar kelimesi, Java'da bir sınıfın alanlarını belirlemek için kullanılır; seri hale getirme sürecinden hariç tutulması gereken alanları belirtir – yani, bu alanlar nesne bir byte akışına kaydedilirken saklanmayacaktır.

Bu, şu durumlarda faydalıdır:

  • Alan, hassas bilgiler içeriyorsa (örneğin, parolalar)
  • Alan, seri hale getirmeden sonra yeniden elde edilebiliyorsa
  • Alanın durumu JVM için spesifikse ve başka bir JVM arasında iletilmesi gerekmezse

Kullanım örneği:

import java.io.*; class User implements Serializable { private String username; private transient String password; // seri hale getirilmeyecek public User(String username, String password) { this.username = username; this.password = password; } }

Seri hale getirdikten sonra password alanı null değerine sahip olacaktır.

Zor Bir Soru

Eğer transient alan bir nesneye referanssa ve o nesne Serializable'ı uygularsa ne olur?

Cevap: Alan yine de seri hale getirilmeyecek – bu durum, alana özel olup, nesnenin türüne bağlı değildir. Alan transient olarak işaretlenmişse, nesne Serializable'ı uygulasa bile, o alanın seri hale getirilmesinde kaybolmayacaktır.

Örnek:

class Credentials implements Serializable { String password; } class Account implements Serializable { transient Credentials credentials; }

credentials alanı, Credentials nesnesi serileştirilebilir olsa bile, deserileştirmeden sonra her zaman null olacaktır.

Konuya dair ince ayrıntılardan dolayı gerçek hata örnekleri


Hikaye

Bir internet bankasında "Kullanıcı Oturumu" nesnesini tasarlarken, oturumun kimlik doğrulama alanını transient olarak tanımlamayı unuttular, bu nedenle seri hale getirilmiş nesneler gizli bilgilerle dosyaya kaydedildi. Bu durum, kişisel verilerin sızmasına yol açtı.


Hikaye

Bir aracı kurumda bazı önbellek alanları varsayılan olarak seri hale getirildi. Seri hale getirilmiş durumdan geri yüklendikten sonra, uygulama önbellekten eski verileri kullanmaya başladı ve bu da hesaplarda gerçek ve gösterilen tutarlar arasında tutarsızlıklara yol açtı.


Hikaye

Bir geliştirici, transient alanının deserileştirmeden sonra otomatik olarak doldurulacağını varsayarak implementasyon yaptı. Özelleştirilmiş readObject/writeObject yapılarına sahip olmadığından, alan her zaman null kalıyordu – bu da bu alana ilk erişimde programın aniden kapanmasına neden oldu.