marker interface java
Ovaj vodič objašnjava što je sučelje markera u Javi. Također obuhvaća deserializaciju i kloniranje serializacije u Javi s primjerima koda:
Razgovarat ćemo o posljednjoj temi pod Interfaces, tj. Marker Interface u Javi.
Nakon što završimo sa sučeljem markera, razgovarat ćemo o dva primjera, tj. Serijskom i klonirajućem sučelju u Javi. Počnimo s Marker sučeljem.
=> Posjetite ovdje da biste naučili Javu ispočetka
Što ćete naučiti:
Marker sučelje u Javi
Sučelje markera u Javi je prazno sučelje koje nema polja ili metode. Ovo sučelje markera govori kompajleru da su objekti klase koji implementiraju sučelje markera različiti i da ih treba različito tretirati.
Svako sučelje markera u Javi ukazuje da predstavlja nešto posebno za JVM ili kompajler.
U Javi imamo tri sučelja koja su Marker sučelja, kao što je prikazano dolje:
# 1) Sučelje koje se može serirati: Serializable je sučelje markera prisutno u paketu java.io. Objekte možemo serializirati pomoću ovog sučelja, tj. Spremiti stanje objekta u datoteku.
# 2) Sklopivo sučelje: Sučelje koje se može klonirati dio je paketa java.lang i omogućuje kloniranje objekata.
# 3) Udaljeno sučelje: Udaljeno sučelje dio je paketa java.RMI i to sučelje koristimo za stvaranje RMI aplikacija. Ovo se sučelje uglavnom bavi udaljenim objektima.
U ovom uputstvu razgovarat ćemo o sučelju koje se može serirati i klonirati. O udaljenom sučelju razgovarat ćemo kad prijeđemo na RMI u Javi.
Serijalizacija u Javi
Prije nego što krenemo u detalje sučelja koje se može serirati na Javi, shvatimo proces serializacije kao i deserializacije na Javi.
Serijalizacija se može definirati kao postupak kojim pretvaramo stanje objekta u njegov ekvivalentni tok bajtova za pohranu objekta u memoriju u datoteci ili ustrajati predmet.
Kada želimo dohvatiti objekt iz spremljenog stanja i pristupiti njegovu sadržaju, morat ćemo pretvoriti bajtni tok natrag u stvarni Java objekt i taj se proces naziva deserializacija.
anime web stranice za besplatno gledanje animea
Na taj način može postojati mnogo slučajeva u kojima trebamo serializirati / deserializirati Java objekte u životu Java aplikacije.
Postupak serializacije / deserializacije prikazan je u nastavku:
Kao što je gore prikazano, serializacija pretvara objekt u tok. Deserijalizacija pretvara bajtni tok natrag u Java objekt.
Cijeli mehanizam serializacije i deserializacije neovisan je o platformi. To znači da objekt možemo serializirati na jednoj platformi, a zatim deserializirati na drugoj platformi.
Kad kažemo da smo serializirali Java objekt, to znači da smo pozvali ObjectOutputStream metodu writeObject () da bismo objekt zapisali u datoteku.
javna konačna void writeObect (Object obj) baca IOException
Slično tome, u slučaju deserializacije, pozivamo metodu ObjectInputStream :: readObject () za čitanje podataka iz datoteke koja je pohranila objekt.
javni konačni Objekt readObject () baca IOException, ClassNotFoundException
Java serivno sučelje
Java nudi sučelje nazvano 'serializable' pomoću kojeg možemo implementirati serializaciju i deserializaciju u Javi.
Serijalizirano sučelje dio je paketa java.io. To je primjer sučelja markera o kojem smo gore govorili i0 koje nema metode ili članove. Serijalizirano sučelje 'označava' Java klase tako da objekti tih klasa dobivaju sposobnost trajanja.
Dakle, klasa čiji objekt trebamo ustrajati trebala bi implementirati sučelje koje se može serirati. Tada će objekt ove klase (koji implementira sučelje koje se može serirati) koristiti metode writeObject () i readObject () za serializaciju i deserializaciju objekta klase.
Imajte na umu da sve klase omotača i klasa String prema zadanim postavkama implementiraju java.io.Serializable.
Morali bismo ispuniti sljedeći uvjet da bi se objekt mogao uspješno serijalizirati:
- Klasa čiji su objekti serializirani mora implementirati sučelje java.io.Serializable.
- Sva polja člana klase moraju se serirati. Ako određeno polje nije moguće serializirati, trebali bismo ga označiti kao prolazno.
Suprotno tome, klasa je serializabilna samo ako implementira sučelje java.io.Serializable, inače nije serializabilna.
Kako serializirati i deserijalizirati objekt na Javi
Kad serializiramo objekt u Javi, koristimo objectOutputStreamovu metodu writeObject za zapisivanje objekta u datoteku.
Za deserializaciju objekta u Javi koristimo metodu ObjectInputStream readObject () za čitanje sadržaja datoteke i čitanje u objekt.
U ovom primjeru, imamo klasu Student koja implementira sučelje koje se može serirati. To znači da možemo serializirati ili deserializirati objekte klase Student.
U glavnoj metodi Java programa stvaramo objekt klase Student. Zatim stvaramo ObjectOutputStream koji upućuje na objekt FileOutputStream koji zauzvrat pokazuje na datoteku u koju trebamo upisati objekt Student. Tada pozivamo metodu writeObject () koja zapisuje objekt u datoteku.
Nakon uspješnog upisivanja navedenog objekta u navedenu datoteku, program daje odgovarajuću izlaznu poruku. Zatim objekt deserijaliziramo preokrenuvši gornji postupak. Prvo stvorimo ObjectOutputStream objekt u kojem čitamo datoteku čiji sadržaj treba pročitati.
Zatim koristimo metodu readObject () za čitanje sadržaja i prebacivanje na objekt Student. Zatim ispisujemo sadržaj predmeta Student.
Primjer serializacije / deserijalizacije
Sljedeći Java program prikazuje mehanizam serializacije / deserializacije u Javi, kao što je gore spomenuto.
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);} } }
Izlaz:
Imajte na umu da nakon deserializacije dobivamo isti objekt koji smo ranije serializirali kad ponovno otvorimo istu datoteku.
Java privremena ključna riječ
Privremena ključna riječ koristi se za pretvaranje člana podataka, tj. Ne želimo je serializirati.
Na primjer, razmotrite sljedeći razred zaposlenika. Ovdje imamo polje Id zaposlenika zajedno s ostalim poljima. Sada ako odlučimo da se polje Id zaposlenika ne smije serializirati, tada ga proglašavamo kao 'privremeno'.
Primjer Java programa dat je u nastavku.
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);} } }
Izlaz:
U gore navedenom programu serizirali smo objekt Employee. No, imajte na umu da je polje id zaposlenika klase zaposlenik proglašeno 'privremenim'. Sada da provjerimo serializaciju, deserializiramo objekt. Izlaz prikazuje zaposlenički objekt kao ‘0 Eddie’. To znači da Id zaposlenika nije spremljen u datoteku.
Java.io.NotSerializableException U Javi
Izuzetak java.io.NotSerializableException je iznimka koja se izbacuje kada klasa ne ispunjava uvjete za serializaciju. Klasa koja ne implementira sučelje koje se može serirati postaje neprihvatljiva za serializaciju.
Sljedeći Java program prikazuje NotSerializableException.
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);} } }
Izlaz:
Kao što se vidi iz gornjeg programa, klasa Employee ne implementira sučelje koje se može serirati. Stoga, kada pokušavamo serializirati objekt klase Employee, baca se NotSerializableException.
Sklopivo sučelje u Javi
Kloniranje predmeta znači izradu kopije predmeta. Java podržava kloniranje objekata pomoću ' Klonirajući ' sučelje. Klonirajuće sučelje je sučelje markera i dio je paketa java.lang.
Kad klasa implementira Cloneable sučelje, to podrazumijeva da možemo klonirati objekte ove klase. Klasa Object Java sadrži ' klon () ’Metoda. Dakle, Cloneable sučelje koje implementira određena klasa ovlašćuje metodu clone () za kopiranje primjera klase.
Ako klasa ne implementira Cloneable sučelje i još uvijek poziva metodu clone (), tada je iznimka CloneNotSupportedException baca Java kompajler.
Klase koje implementiraju Cloneable sučelje trebale bi nadjačati metodu clone ().
napraviti privremenu lažnu e-adresu
Pa, što je kloniranje objekata?
Kloniranje objekata je postupak pomoću kojeg stvaramo točnu kopiju objekta metodom clone () klase Object. Da bi se metoda clone () nadjačala i pozvala, klasa mora implementirati sučelje Cloneable.
Općenita sintaksa metode clone () dana je u nastavku:
zaštićen Klon objekta () baca CloneNotSupportedException
Metoda clone () stvara točnu kopiju objekta s manje vremena obrade od onog potrebno za stvaranje novog objekta pomoću nove ključne riječi.
Sljedeći Java program prikazuje upotrebu metode clone () i sučelja Cloneable.
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){} } }
Izlaz:
U ovom programu imamo tečaj Student koji implementira Cloneable sučelje. Također zamjenjuje metodu clone () pozivanjem metode super.clone (). U glavnoj metodi stvaramo novi Student objekt, a zatim pozivamo metodu clone () na ovom objektu koji vraća novi objekt Student.
Kloniraj niz u Javi
Kloniranje nizova istražili smo u našem vodiču o Nizovima. Budući da Java nizovi prema zadanim postavkama implementiraju Cloneable sučelje, oni ne moraju biti eksplicitno implementirani. Kada se klonira jednodimenzionalni niz, generira se dubinska kopija niza. Kada se klonira dvodimenzionalni niz, tada se pravi plitka kopija.
Izrada plitke kopije zadano je ponašanje metode clone () u Javi. Ali većinu vremena želimo duboko kloniranje. U dubokom kloniranju izrađujemo kopiju člana objekta po člana i stvaramo klon koji je neovisan o izvornom objektu. Sve promjene koje su tada izvršene na kloniranom objektu neće se odraziti na izvornom objektu.
Sljedeći Java program prikazuje kloniranje jednodimenzionalnog niza.
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 Izlaz:
![Kloniraj niz u Javi](//myservername.com/img/other/22/marker-interface-java-7.png)
Popis kloniranja u Javi
Program u nastavku pokazuje kako koristiti metodu clone () za kloniranje popisa u Javi.
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); } }
Izlaz:
![Popis kloniranja u Javi](//myservername.com/img/other/22/marker-interface-java-8.png)
U gornjem programu vidimo da smo stvorili klasu MyList koja implementira sučelje Cloneable i unutar ove klase nadjačavamo metodu clone () koja nam pomaže klonirati Popis. U glavnoj metodi kreiramo popis elemenata, a zatim kloniramo svaki element popisa prevlačenjem po popisu.
Često postavljana pitanja
P # 1) Čemu služi Marker Interface u Javi?
Odgovor: Označno sučelje koje je poznato i kao 'označeno sučelje' označava klasu i obavještava sastavljač da ova klasa može primijeniti posebno ponašanje.
P # 2) Koja su sve Marker sučelja u Javi?
Odgovor: Serijalizirajući, klonirani i udaljeni sučelja su primjeri sučelja markera u Javi.
P # 3) Zašto se serijski može označiti sučelje?
Odgovor: Sučelje koje se može serirati nema nikakve metode ili varijable člana. To je prazno sučelje koje ga klasificira kao Marker Interface.
P # 4) Može li se pokrenuti Marker sučelje?
Odgovor: Ne, pokrenuti nije sučelje markera. Izvozivo sučelje nije prazno i unutar njega pruža izjavu metode run ().
P # 5) Zašto trebamo implementirati Cloneable sučelje?
Odgovor: Implementacijom kloniranog sučelja za klasu naznačujemo da se objekti ove klase mogu klonirati metodom clone () klase Object. Ako klasa koja koristi metodu clone () ne implementira klonirajuće sučelje, izbacuje se iznimka 'CloneNotSupportedException'.
Zaključak
Ovim uputstvom završili smo raspravu o Sučeljima u Javi. Razgovarali smo o konceptu sučelja, njihovoj strukturi, definiciji, upotrebi itd. Također smo razgovarali o nekim važnim sučeljima u sučeljima sličnim Java-i, Comparatoru, Markeru itd.
U ovom uputstvu raspravljali smo o dva primjera sučelja markera, tj. Serializirajuće i klonirajuće. Sučelje koje se može serirati koristi se za zadržavanje objekta. Sučelje koje se može klonirati koristi se za kloniranje objekata klase. Oba sučelja su sučelja s markerima, tj. Prazna su.
Ali kad ih klasa implementira, tada ukazuju da kompajler može očekivati neko posebno ponašanje od klasa koje ih implementiraju.
Na primjer, kada klasa implementira sučelje koje se može serirati, tada možemo serializirati ili deserializirati objekte klase i spremiti / dohvatiti njihovo stanje.
prodajno mjesto za ipad
Klasa koja implementira klonirano sučelje ukazuje na to da možemo klonirati objekte ove klase. Zadana implementacija metode clone () stvara plitku kopiju objekta, dok metodu clone () možemo nadjačati kako bismo stvorili dubinsku kopiju.
=> Ovdje istražite kompletnu seriju Java treninga
Preporučena literatura
- Postavljanje sučelja u Javi: Vodič za postavljanje Java s primjerima
- ListIterator sučelje u Javi s primjerima
- Implementacija Jave: Izrada i izvršavanje Java JAR datoteke
- I Java - i njezina implementacija i definicije
- Osnove Java-a: Java sintaksa, Java Class i osnovni Java koncepti
- Java Class Vs Objekt - Kako koristiti klasu i objekt u Javi
- Java virtualni stroj: kako JVM pomaže u pokretanju Java aplikacije
- Usporediva i usporedbena sučelja u Javi