transient Alanları ve serialVersionUID
transient ile hassas alanları hariç tutun ve serialVersionUID ile sürüm uyumluluğunu koruyun.
transient Alanları ve serialVersionUID, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Neden transient?
Bazı alanlar kaydedilmemelidir: parolalar, açık dosya tanıtıcıları ve önbelleğe alınmış hesaplamalar. Bunları transient olarak işaretleyin; serileştirme sırasında atlanırlar.
public class Session implements Serializable {
private String username;
private transient String password; // NOT serialized
private transient Connection dbConn; // NOT serialized
}Serileştirmeden Çıkarma Sonrasında transient Alanının Değeri
Serileştirmeden çıkarma sonrasında transient alanlar Java'nın varsayılan değerini alır: nesneler için null, sayılar için 0, mantıksal değerler için false.
Session s = (Session) ois.readObject();
System.out.println(s.username); // "alice"
System.out.println(s.password); // null (transient)serialVersionUID Nedir?
serialVersionUID, sürüm damgası görevi gören bir long sabitidir. Sınıf değişir ve UID dosyadakiyle eşleşmezse serileştirmeden çıkarma işlemi InvalidClassException fırlatır.
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
}Otomatik Oluşturulan ve Açıkça Belirtilen UID
serialVersionUID belirtmezseniz Java, sınıf yapısından bir değer oluşturur. Herhangi bir alan değişikliği UID'yi fark ettirmeden değiştirerek eski verilerin bozulmasına neden olur. Bu değeri her zaman açıkça bildirin.
import java.io.ObjectStreamClass;
long uid = ObjectStreamClass.lookup(User.class).getSerialVersionUID();
System.out.println(uid); // e.g. 3526749255685047947Sürüm Uyuşmazlığında InvalidClassException
UID'si değişmiş bir sınıfla eski serileştirilmiş veriler okunurken Java, InvalidClassException: local class incompatible: stream classdesc serialVersionUID = X, local class serialVersionUID = Y fırlatır.
Sınıfın Güvenli Geliştirilmesi
UID'yi değiştirmeden serileştirilebilir bir sınıfa güvenle yeni alanlar ekleyebilirsiniz. Eski akışlar, yeni alanı varsayılan değeriyle serileştirmeden çıkarır. Alanları kaldırmak veya yeniden adlandırmak daha tehlikelidir.
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
private String email; // Added in v2 — safe if UID unchanged
}Tembel Başlatma ile transient
Yaygın bir yaklaşım şudur: önbelleğe alınmış veya türetilmiş bir alanı transient olarak işaretleyin ve serileştirmeden çıkarma sonrasında readResolve kullanarak veya erişim yönteminde bu alanı gerektiğinde yeniden hesaplayın.
public class Document implements Serializable {
private static final long serialVersionUID = 1L;
private String content;
private transient int wordCount = -1;
public int getWordCount() {
if (wordCount == -1) wordCount = content.split("\\s+").length;
return wordCount;
}
}static Alanlar Asla Serileştirilmez
static alanlar örneğe değil, sınıfa aittir. Serileştirilmiş akışa hiçbir zaman eklenmezler; yalnızca örnek alanları serileştirilir.
public class Counter implements Serializable {
private static final long serialVersionUID = 1L;
private static int instanceCount = 0; // NOT serialized
private int value;
}serialver Aracını Kullanma
serialver JDK aracı, bir sınıfın varsayılan serialVersionUID değerini yazdırır: serialver com.example.User. Değeri açıkça eklemeden önce öğrenmek için bu aracı kullanın.
Alternatif Olarak Externalizable
Externalizable, Serializable'ı genişletir ve writeExternal / readExternal aracılığıyla tam denetim sağlar. transient kullanmadan alanları açıkça denetlemek istediğinizde yararlıdır.
public class Config implements Externalizable {
private String host;
private transient String secret;
public void writeExternal(ObjectOutput out) throws IOException {
out.writeUTF(host);
}
public void readExternal(ObjectInput in) throws IOException {
host = in.readUTF();
}
}En İyi Uygulamalar
serialVersionUID değerini her zaman bildirin. Parolaları, tanıtıcıları ve önbellekleri transient olarak işaretleyin. Uyumsuz değişiklikler yaptığınızda UID'yi artırın. Sürüm geçmişini belgeleyin.
Hızlı Kontrol
Bir transient int alanı, serileştirmeden çıkarma sonrasında hangi değere sahip olur?
Özet
Alanları serileştirmeden çıkarmak için transient kullanın. Sürümlemeyi denetlemek için serialVersionUID değerini her zaman bildirin. Statik alanlar hiçbir durumda serileştirilmez.
Sıkça Sorulan Sorular
“transient Alanları ve serialVersionUID” dersi ücretsiz mi?
Evet — “transient Alanları ve serialVersionUID” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“transient Alanları ve serialVersionUID” dersinde ne öğreneceğim?
transient ile hassas alanları hariç tutun ve serialVersionUID ile sürüm uyumluluğunu koruyun. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“transient Alanları ve serialVersionUID” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Java Serileştirmesinin Temelleri
- transient Alanları ve serialVersionUID
- Özel Serileştirme: writeObject ve readObject
- Modern Alternatifler: JSON ve Protocol Buffers