marker interface java
Bu eğitim, Java'da Marker Arayüzünün ne olduğunu açıklamaktadır. Ayrıca, kod örnekleriyle birlikte Java'da Seri Hale Getirme ve Klonlamayı da kapsar:
Son konuyu Arayüzler, yani Java'da Marker Arayüzü altında tartışacağız.
Markör arayüzünü bitirdikten sonra, Java'da serileştirilebilir ve klonlanabilir arayüz olmak üzere iki örneği tartışacağız. Marker arayüzüyle başlayalım.
=> Sıfırdan Java Öğrenmek İçin Burayı Ziyaret Edin
Ne öğreneceksin:
- Java'da Marker Arayüzü
- Java'da Serileştirme
- Java Serileştirilebilir Arayüz
- Java'da Klonlanabilir Arayüz
- Sonuç
Java'da Marker Arayüzü
Java'daki bir işaretleyici arabirimi, alanı veya yöntemi olmayan boş bir arabirimdir. Bu işaretleyici arabirimi, derleyiciye işaretleyici arabirimini uygulayan sınıfın nesnelerinin farklı olduğunu ve farklı şekilde ele alınması gerektiğini söyler.
Java'daki her işaretleyici arabirimi, JVM veya derleyiciye özel bir şeyi temsil ettiğini gösterir.
Java'da, aşağıda gösterildiği gibi Marker arabirimi olan üç arabirimimiz vardır:
# 1) Serileştirilebilir arayüz: Serileştirilebilir, java.io paketinde bulunan bir işaretleyici arabirimdir. Bu arayüzü kullanarak nesneleri serileştirebiliriz, yani nesne durumunu bir dosyaya kaydedebiliriz.
# 2) Klonlanabilir arayüz: Klonlanabilir arayüz, java.lang paketinin bir parçasıdır ve nesnelerin klonlanmasına izin verir.
# 3) Uzak arayüz: Uzak arabirim, java.RMI paketinin bir parçasıdır ve bu arabirimi RMI uygulamaları oluşturmak için kullanırız. Bu arayüz esas olarak uzak nesnelerle ilgilenir.
Bu eğitimde, serileştirilebilir ve klonlanabilir arayüzü tartışacağız. Java'da RMI'ye geçtiğimizde uzak arayüz tartışılacaktır.
Java'da Serileştirme
Java'daki Serileştirilebilir arayüzün ayrıntılarına girmeden önce, Java'daki serileştirme sürecini ve serileştirmeyi kaldırmayı anlayalım.
Serileştirme, nesneyi bir dosyada belleğe depolamak için nesne durumunu eşdeğer bayt akışına dönüştürdüğümüz bir süreç olarak tanımlanabilir. ısrar etmek nesne.
Nesneyi kaydedilmiş durumundan almak ve içeriğine erişmek istediğimizde, bayt akışını gerçek Java nesnesine geri dönüştürmemiz gerekecek ve bu işleme seriyi kaldırma adı verilir.
Bu şekilde, Java uygulamasının ömrü boyunca Java nesnelerini serileştirmemiz / seriyi kaldırmamız gereken birçok örnek olabilir.
Serileştirme / seriyi kaldırma süreci aşağıda gösterilmiştir:
Yukarıda gösterildiği gibi, serileştirme nesneyi bir akışa dönüştürür. Seriyi kaldırma, bayt akışını bir Java nesnesine geri dönüştürür.
Serileştirme ve seriyi kaldırma mekanizmasının tamamı platformdan bağımsızdır. Bu, nesneyi bir platformda serileştirebileceğimiz ve ardından farklı bir platformda serisini kaldırabileceğimiz anlamına gelir.
Java nesnesini serileştirdiğimizi söylediğimizde, nesneyi bir dosyaya yazmak için ObjectOutputStream yöntemini writeObject () olarak adlandırdığımız anlamına gelir.
wep anahtarı nasıl görünür
public final void writeObect (Nesne nesnesi) IOException oluşturur
Benzer şekilde serileştirme durumunda, verileri nesneyi depolayan dosyadan okumak için ObjectInputStream :: readObject () yöntemini çağırırız.
public final Object readObject () IOException, ClassNotFoundException oluşturur
Java Serileştirilebilir Arayüz
Java, Java'da serileştirme ve serileştirmeyi kaldırmayı uygulayabileceğimiz 'serileştirilebilir' adlı arabirimi sağlar.
Serileştirilebilir arayüz, java.io paketinin bir parçasıdır. Bu, yukarıda tartıştığımız ve hiçbir yöntemi veya üyesi olmayan bir işaretleyici arayüz örneğidir. Serileştirilebilir arabirim, Java sınıflarını 'işaretler', böylece bu sınıfların nesneleri kendi başlarına kalabilme yeteneğine sahip olur.
Dolayısıyla, nesnesini sürdürmemiz gereken sınıf, Serializable arabirimini uygulamalıdır. Daha sonra bu sınıfın nesnesi (Serializable arabirimi uygulayarak), sınıf nesnesini serileştirmek ve seriyi kaldırmak için sırasıyla writeObject () ve readObject () yöntemlerini kullanacaktır.
Tüm sarmalayıcı sınıflarının ve String sınıfının varsayılan olarak java.io.Serializable'ı uyguladığını unutmayın.
Bir nesnenin başarıyla serileştirilmesi için aşağıdaki koşulu yerine getirmeliyiz:
- Nesneleri serileştirilen sınıf, java.io.Serializable arabirimini uygulamalıdır.
- Sınıfın tüm üye alanları serileştirilebilir olmalıdır. Belirli bir alan serileştirilebilir değilse, onu geçici olarak işaretlemeliyiz.
Tersine, bir sınıf yalnızca java.io.Serializable arabirimini uygularsa serileştirilebilir, aksi takdirde serileştirilemez.
Java'da Bir Nesneyi Seri Hale Getirme ve Seri Durumdan Çıkarma
Java'da bir nesneyi serileştirdiğimizde, nesneyi bir dosyaya yazmak için objectOutputStream’in writeObject yöntemini kullanırız.
Java'da nesnenin serisini kaldırırken, dosyanın içeriğini okumak ve bunları bir nesneye okumak için ObjectInputStream’in readObject () yöntemini kullanırız.
Bu örnekte, Serileştirilebilir arayüzü uygulayan bir Öğrenci sınıfımız var. Bu, Öğrenci sınıfının nesnelerini serileştirebileceğimiz veya seriyi kaldırabileceğimiz anlamına gelir.
Java programının ana yönteminde, bir Öğrenci sınıfı nesnesi oluşturuyoruz. Ardından, Student nesnesini yazmamız gereken bir dosyaya işaret eden bir FileOutputStream nesnesine işaret eden bir ObjectOutputStream oluştururuz. Daha sonra nesneyi dosyaya yazan writeObject () yöntemini çağırıyoruz.
Belirtilen nesneyi belirtilen dosyaya başarıyla yazdığınızda, program uygun bir çıktı mesajı verir. Ardından, yukarıdaki işlemi tersine çevirerek nesnenin serisini kaldırıyoruz. İlk olarak, içeriği okunacak dosyayı okuduğumuz bir ObjectOutputStream nesnesi oluşturuyoruz.
Daha sonra içeriği okumak ve Öğrenci nesnesine dönüştürmek için readObject () yöntemini kullanırız. Ardından Student nesnesinin içeriğini yazdırıyoruz.
Serileştirme / Seriyi Kaldırma Örneği
Aşağıdaki Java programı, yukarıda tartışıldığı gibi Java'daki serileştirme / seriyi kaldırma mekanizmasını göstermektedir.
import java.io.*; import java.io.Serializable; //Class Student implements class Student implements Serializable{ int id; String name; public Student(int id, String name) { this.id = id; this.name = name; } } class Main{ public static void main(String args()){ try{ //Create the object of student class Student s1 =new Student(27,'Eddie'); //Write the object to the stream by creating a output stream FileOutputStream fout=new FileOutputStream('Eddie.txt'); ObjectOutputStream out=new ObjectOutputStream(fout); out.writeObject(s1); out.flush(); //close the stream out.close(); System.out.println('Object successfully written to the file'); //Create a stream to read the object ObjectInputStream in=new ObjectInputStream(new FileInputStream('Eddie.txt')); Student s=(Student)in.readObject(); //print the data of the deserialized object System.out.println('Student object: ' + s.id+' '+s.name); //close the stream in.close(); }catch(Exception e){System.out.println(e);} } }
Çıktı:
Serileştirmeden sonra, aynı dosyayı tekrar açtığımızda daha önce serileştirdiğimiz nesnenin aynısını elde ettiğimize dikkat edin.
Java Geçici Anahtar Kelimesi
Bir veri üyesini geçici hale getirmek için geçici bir anahtar kelime kullanılır, yani onu serileştirmek istemiyoruz.
Örneğin, Aşağıdaki sınıf Çalışanı düşünün. Burada, diğer alanlarla birlikte çalışan kimliği alanı var. Şimdi, Çalışan Kimliği alanının serileştirilmemesi gerektiğine karar verirsek, bunu 'geçici' olarak ilan ederiz.
Örnek bir Java programı aşağıda verilmiştir.
import java.io.*; class Employee implements Serializable{ transient int id; String name; public Employee(int id, String name) { this.id = id; this.name = name; } } class Main{ public static void main(String args()){ try{ //Create the object of Employee class Employee s1 =new Employee(27,'Eddie'); //Write the object to the stream by creating a output stream FileOutputStream fout=new FileOutputStream('Eddie.txt'); ObjectOutputStream out=new ObjectOutputStream(fout); out.writeObject(s1); out.flush(); //close the stream out.close(); System.out.println('Object successfully written to the file'); //Create a stream to read the object ObjectInputStream in=new ObjectInputStream(new FileInputStream('Eddie.txt')); Employee s=(Employee)in.readObject(); //print the data of the deserialized object System.out.println('Employee object: ' + s.id+' '+s.name); //close the stream in.close(); }catch(Exception e){System.out.println(e);} } }
Çıktı:
Yukarıdaki programda Employee nesnesini serileştirdik. Ancak Employee sınıfının Employee id alanının 'geçici' olarak bildirildiğini unutmayın. Şimdi serileştirmeyi kontrol etmek için nesnenin serisini kaldırıyoruz. Çıktı, Employee nesnesini ‘0 Eddie’ olarak gösterir. Bu, Çalışan Kimliği'nin dosyaya kaydedilmediği anlamına gelir.
Java'da Java.io.NotSerializableException
Java.io.NotSerializableException istisnası, sınıf serileştirme için uygun olmadığında atılan bir istisnadır. Serileştirilebilir arabirimi uygulamayan sınıf, serileştirme için uygun olmaz.
Aşağıdaki Java programı NotSerializableException'ı göstermektedir.
import java.io.*; class Employee { transient int id; String name; public Employee(int id, String name) { this.id = id; this.name = name; } } class Main{ public static void main(String args()){ try{ //Create the object of Employee class Employee s1 =new Employee(27,'Eddie'); //Write the object to the stream by creating a output stream FileOutputStream fout=new FileOutputStream('Eddie.txt'); ObjectOutputStream out=new ObjectOutputStream(fout); out.writeObject(s1); out.flush(); //close the stream out.close(); System.out.println('Object successfully written to the file'); }catch(Exception e){System.out.println(e);} } }
Çıktı:
Yukarıdaki programdan görüldüğü gibi, Employee sınıfı Serializable arabirimini uygulamaz. Bu nedenle, Employee sınıf nesnesini serileştirmeye çalıştığımızda, NotSerializableException atılır.
Java'da Klonlanabilir Arayüz
Nesnelerin klonlanması, nesnelerin bir kopyasının yapılması anlamına gelir. Java, ' Klonlanabilir ' arayüz. Klonlanabilir arabirim, bir işaret arabirimidir ve java.lang paketinin bir parçasıdır.
Bir sınıf Klonlanabilir arabirimi uyguladığında, bu sınıfın nesnelerini klonlayabileceğimiz anlamına gelir. Java'nın Object sınıfı ' klon ()' yöntem. Bu nedenle, belirli bir sınıf tarafından uygulanan Klonlanabilir arabirim, clone () yöntemini sınıf örneklerinin kopyalarını yapmak için yetkilendirir.
Bir sınıf Cloneable arabirimi uygulamıyorsa ve yine de clone () yöntemini çağırıyorsa, istisna CloneNotSupportedException Java derleyicisi tarafından atılır.
Cloneable arayüzü uygulayan sınıflar, clone () yöntemini geçersiz kılmalıdır.
Peki Nesne Klonlama nedir?
Nesne klonlama, Object sınıfının clone () yöntemini kullanarak nesnenin tam bir kopyasını oluşturduğumuz bir işlemdir. Clone () yönteminin geçersiz kılınması ve çağrılması için, sınıfın Cloneable arabirimini uygulaması gerekir.
Clone () yönteminin genel sözdizimi aşağıda verilmiştir:
korumalı Nesne klonu () atar CloneNotSupportedException
Clone () yöntemi, new anahtar sözcüğünü kullanarak yeni bir nesne oluşturmak için gerekenden daha az işlem süresiyle nesnenin tam bir kopyasını oluşturur.
Aşağıdaki Java programı clone () yönteminin ve Cloneable arayüzünün kullanımını göstermektedir.
class Student implements Cloneable{ int rollno; String name; //class constructor Student(int rollno,String name){ this.rollno=rollno; this.name=name; } //clone method public Object clone()throws CloneNotSupportedException{ return super.clone(); } } class Main{ public static void main(String args()){ try{ Student s1=new Student(101,'Lissa'); //clone the s1 object Student s2=(Student)s1.clone(); System.out.println('Original Student object: ' + s1.rollno+' '+s1.name); System.out.println('Cloned Student object: ' + s2.rollno+' '+s2.name); }catch(CloneNotSupportedException c){} } }
Çıktı:
Bu programda, Klonlanabilir arayüzü uygulayan bir Öğrenci sınıfımız var. Ayrıca super.clone () yöntemini çağırarak clone () yöntemini geçersiz kılar. Ana yöntemde yeni bir Student nesnesi oluştururuz ve ardından bu nesne üzerinde yeni Student nesnesini döndüren clone () yöntemini çağırırız.
Java'da Dizi Klonlama
Diziler hakkındaki eğitimimizde dizilerin klonlanmasını araştırdık. Java dizileri varsayılan olarak Klonlanabilir arabirimi uyguladığından, açıkça uygulanmaları gerekmez. Tek boyutlu dizi klonlandığında, dizinin derin bir kopyası oluşturulur. 2 boyutlu bir dizi klonlandığında, sığ bir kopya yapılır.
Yüzeysel bir kopya oluşturmak, Java'daki clone () yönteminin varsayılan davranışıdır. Ama çoğu zaman derin klonlamayı arzu ederiz. Derin klonlamada, üye tarafından nesne üyesinin bir kopyasını oluşturur ve orijinal nesneden bağımsız bir klon oluştururuz. Daha sonra klon nesnesinde yapılan herhangi bir değişiklik orijinal nesneye yansıtılmayacaktır.
Aşağıdaki Java programı, tek boyutlu bir dizinin klonlanmasını göstermektedir.
class Main { public static void main(String args()) { //define an array int intArray() = {2,6,3,7,1,8}; //invoke clone () method on intArray int cloneArray() = intArray.clone(); //print the arrays. System.out.println('Original intArray:'); for (int i = 0; i Çıktı:
Java'da Klon Listesi
Aşağıdaki program, Java'da bir listeyi klonlamak için bir clone () yönteminin nasıl kullanılacağını gösterir.
import java.util.ArrayList; import java.util.Arrays; import java.util.List; // MyList Class implementing cloneable class MyList implements Cloneable { String name1; String name2; // Constructor MyList(String name1, String name2) { this.name1 = name1; this.name2 = name2; } // To print the objects in the desired format @Override public String toString() { return 'Hello ' + name1 + ',' + name2 + '
' ; } // Overriding the clone method @Override protected MyList clone() { return new MyList(name1 , name2); } } class Main { public static void main(String() args) { // Create a list List original = Arrays.asList( new MyList('Sydney','Rose'), new MyList('Joe','Ian')); // Create an empty list List cloned_list = new ArrayList(); // Loop through the list and clone each element for (MyList temp : original) cloned_list.add(temp.clone()); System.out.print(cloned_list); } }
Çıktı:
Yukarıdaki programda Cloneable arabirimini uygulayan bir MyList sınıfı oluşturduğumuzu görüyoruz ve bu sınıfın içinde List'i klonlamamıza yardımcı olan clone () yöntemini geçersiz kılıyoruz. Ana yöntemde, bir öğe listesi oluştururuz ve ardından listenin her öğesini yineleyerek listenin her öğesini klonlarız.
Sıkça Sorulan Sorular
S # 1) Java'da Marker Arayüzünün kullanımı nedir?
Cevap: 'Etiketli arabirim' olarak da bilinen işaretçi arabirimi, sınıfı etiketler ve derleyiciye bu sınıfın özel bir davranış uygulayabileceği konusunda bilgi verir.
S # 2) Java'daki tüm Marker Arayüzleri nelerdir?
Cevap: Serileştirilebilir, Klonlanabilir ve Uzak, Java'daki işaret arabirimlerinin örnekleri olan arabirimlerdir.
S # 3) Neden Marker Arabirimi serileştirilebilir?
Cevap: Serileştirilebilir arabirimin herhangi bir yöntemi veya üye değişkeni yoktur. Marker Arayüzü olarak sınıflandıran boş bir arayüzdür.
S # 4) Bir Marker Arayüzü çalıştırılabilir mi?
Cevap: Hayır, çalıştırılabilir bir işaret arayüzü değildir. Runnable arabirimi boş değildir ve içinde bir run () yöntemi bildirimi sağlar.
S # 5) Neden Klonlanabilir bir arayüz uygulamamız gerekiyor?
Cevap: Bir sınıf için klonlanabilir bir arabirim uygulayarak, bu sınıfın nesnelerinin, Object sınıfının clone () yöntemi kullanılarak klonlanabileceğini belirtiyoruz. Clone () yöntemini kullanan bir sınıf, klonlanabilir bir arabirim uygulamazsa, 'CloneNotSupportedException' istisnası atılır.
Sonuç
Bu eğitimle, Java'da Arayüzler hakkındaki tartışmamızı tamamladık. Arayüzler kavramını, yapılarını, tanımlarını, kullanımlarını vb. Tartıştık. Java benzeri Karşılaştırılabilir, Karşılaştırıcı, İşaretleyici arayüzlerindeki vb. Önemli arayüzlerden bazılarını da tartıştık.
Bu eğiticide, serileştirilebilir ve klonlanabilir gibi iki işaret arabirimi örneğini tartıştık. Bir nesneyi sürdürmek için serileştirilebilir bir arabirim kullanılır. Klonlanabilir arabirim, sınıf nesnelerini klonlamak için kullanılır. Bu arayüzlerin ikisi de işaret arayüzleridir, yani boştur.
Ancak bir sınıf bunları uyguladığında, derleyicinin bunları uygulayan sınıflardan bazı özel davranışlar bekleyebileceğini belirtirler.
Örneğin, Bir sınıf Seri hale getirilebilir bir arabirim uyguladığında, sınıf nesnelerini serileştirebilir veya serisini kaldırabilir ve durumlarını kaydedebilir / alabiliriz.
Klonlanabilir bir arayüz uygulayan bir sınıf, bu sınıfın nesnelerini klonlayabileceğimizi gösterir. Clone () yönteminin varsayılan uygulaması, derin bir kopya oluşturmak için clone () yöntemini geçersiz kılabilirken nesnenin basit bir kopyasını oluşturur.
=> Tam Java Eğitim Serisini Buradan Keşfedin
Önerilen Kaynaklar
- Java'da Arayüzü Ayarlayın: Örneklerle Java Seti Eğitimi
- Java'da ListIterator Arayüzü Örneklerle
- Java Dağıtımı: Java JAR Dosyasının Oluşturulması ve Yürütülmesi
- Ve Java - ve uygulaması ve Tanımları
- Java Temelleri: Java Sözdizimi, Java Sınıfı ve Temel Java Kavramları
- Java Class Vs Object - Java'da Sınıf ve Nesne Nasıl Kullanılır
- Java Sanal Makinesi: JVM, Java Uygulamasını Çalıştırmada Nasıl Yardımcı Olur?
- Java'da Karşılaştırılabilir ve Karşılaştırıcı Arayüzler