marker interface java
Tento výukový program vysvetľuje, čo je značkovacie rozhranie v Jave. Zahŕňa tiež Serializáciu Deserializáciu a Klonovanie v Jave s príkladmi kódu:
Poslednú tému si rozoberieme v rámci Interfaces, teda Marker Interface v Jave.
Po dokončení značkovacieho rozhrania si povieme dva príklady, tj. Serializovateľné a klonovateľné rozhranie v Jave. Začnime rozhraním značiek.
=> Navštívte tu a dozviete sa Java od začiatku
Čo sa dozviete:
- Rozhranie značiek v Jave
- Serializácia v Jave
- Serializovateľné rozhranie Java
- Klonovateľné rozhranie v Jave
- Záver
Rozhranie značiek v Jave
Rozhranie značkovača v Jave je prázdne rozhranie, ktoré neobsahuje žiadne polia ani metódy. Toto značkovacie rozhranie informuje kompilátor o tom, že objekty triedy, ktoré implementujú značkovacie rozhranie, sú odlišné a malo by sa s nimi zaobchádzať odlišne.
Každé značkovacie rozhranie v Jave naznačuje, že predstavuje niečo špeciálne pre JVM alebo kompilátor.
V prostredí Java máme tri rozhrania, ktoré sú označovacími rozhraniami, ako je uvedené nižšie:
# 1) Serializovateľné rozhranie: Serializable je značkovacie rozhranie prítomné v balíku java.io. Pomocou tohto rozhrania môžeme objekty serializovať, t. J. Uložiť stav objektu do súboru.
# 2) Klonovateľné rozhranie: Klonovateľné rozhranie je súčasťou balíka java.lang a umožňuje klonovanie objektov.
# 3) Diaľkové rozhranie: Vzdialené rozhranie je súčasťou balíka java.RMI a toto rozhranie používame na vytváranie aplikácií RMI. Toto rozhranie sa zaoberá hlavne vzdialenými objektmi.
V tomto výučbe sa budeme zaoberať serializovateľným a klonovateľným rozhraním. O vzdialenom rozhraní bude reč, keď prejdeme na RMI v Jave.
Serializácia v Jave
Predtým, ako sa pozrieme na podrobnosti rozhrania Serializable v Jave, poďme pochopiť proces serializácie a deserializácie v Jave.
Serializáciu je možné definovať ako proces, ktorým prevádzame stav objektu na jeho ekvivalentný bajtový prúd, aby sme objekt uložili do pamäte v súbore alebo pretrvávať objekt.
Keď chceme získať objekt z uloženého stavu a získať prístup k jeho obsahu, budeme musieť konvertovať bajtový prúd späť na skutočný objekt Java a tento proces sa nazýva deserializácia.
Týmto spôsobom môže existovať veľa prípadov, keď budeme musieť serializovať / deserializovať objekty Java počas celej životnosti aplikácie Java.
Proces serializácie / deserializácie je uvedený nižšie:
Ako je uvedené vyššie, serializácia prevádza objekt na prúd. Deserializácia prevádza bajtový prúd späť na objekt Java.
Celý mechanizmus serializácie a deserializácie je nezávislý na platforme. To znamená, že môžeme objekt serializovať na jednej platforme a potom ju deserializovať na inej platforme.
čo môžete robiť s c ++
Keď hovoríme, že sme serializovali objekt Java, znamená to, že sme zavolali metódu ObjectOutputStream writeObject (), aby sme objekt zapísali do súboru.
public final void writeObect (Object obj) vyvolá IOException
Podobne v prípade deserializácie voláme metódu ObjectInputStream :: readObject () na načítanie údajov zo súboru, ktorý má objekt uložený.
public final Object readObject () vyvolá IOException, ClassNotFoundException
Serializovateľné rozhranie Java
Java poskytuje rozhranie s názvom „serializovateľné“, pomocou ktorého môžeme v Jave implementovať serializáciu a deserializáciu.
Serializovateľné rozhranie je súčasťou balíka java.io. Je to príklad značkovacieho rozhrania, o ktorom sme hovorili vyššie a0, ktoré nemá žiadne metódy ani členov. Serializovateľné rozhranie „označuje“ triedy Java, takže objekty týchto tried majú schopnosť vytrvať samy.
Trieda, ktorej objekt musíme vytrvať, by mala implementovať rozhranie Serializable. Potom objekt tejto triedy (implementujúci rozhranie Serializable) použije na serializáciu a deserializáciu objektu triedy metódy writeObject () a readObject ().
Všimnite si, že všetky triedy wrapperov a trieda String štandardne implementujú java.io.Serializable.
Mali by sme splniť nasledujúcu podmienku, aby mohol byť objekt úspešne serializovaný:
- Trieda, ktorej objekty sú serializované, musí implementovať rozhranie java.io.Serializable.
- Všetky členské polia triedy musia byť serializovateľné. Ak určité pole nie je serializovateľné, mali by sme ho označiť ako prechodné.
Naopak, trieda je serializovateľná, iba ak implementuje rozhranie java.io.Serializable, inak nie je serializovateľná.
Ako serializovať a deserializovať objekt v jazyku Java
Keď serializujeme objekt v prostredí Java, na zápis objektu do súboru použijeme metódu writeObject objektu objectOutputStream.
Na deserializáciu objektu v prostredí Java používame metódu readObject () ObjectInputStream na načítanie obsahu súboru a ich načítanie do objektu.
V tomto príklade máme triedu Student, ktorá implementuje rozhranie Serializable. To znamená, že môžeme serializovať alebo deserializovať objekty triedy Student.
V hlavnej metóde programu Java vytvoríme objekt triedy Student. Potom vytvoríme ObjectOutputStream, ktorý ukazuje na objekt FileOutputStream, ktorý zase ukazuje na súbor, do ktorého musíme napísať objekt Student. Potom zavoláme metódu writeObject (), ktorá zapíše objekt do súboru.
Po úspešnom zápise určeného objektu do zadaného súboru program poskytne príslušnú výstupnú správu. Potom objekt deserializujeme obrátením vyššie uvedeného procesu. Najskôr vytvoríme objekt ObjectOutputStream, v ktorom prečítame súbor, ktorého obsah sa má čítať.
Potom pomocou metódy readObject () prečítame obsah a nahodíme ho do objektu Student. Potom vytlačíme obsah objektu Student.
Príklad serializácie / deserializácie
Nasledujúci program Java zobrazuje mechanizmus serializácie / deserializácie v Jave, ako je uvedené vyššie.
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);} } }
Výkon:
Všimnite si, že po deserializácii dostaneme rovnaký objekt, ktorý sme serializovali už skôr, keď znova otvoríme ten istý súbor.
Prechodné kľúčové slovo Java
Prechodné kľúčové slovo sa používa na prechodný prechod dátového člena, t. J. Nechceme ho serializovať.
Napríklad, zvážte nasledujúcu triedu Zamestnanec. Tu máme pole ID zamestnanca spolu s ostatnými poľami. Ak sa teraz rozhodneme, že sa pole Employee Id nemá serializovať, potom ho vyhlásime za prechodné.
Nižšie je uvedený príklad programu Java.
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);} } }
Výkon:
Vo vyššie uvedenom programe sme serializovali objekt Employee. Upozorňujeme však, že pole Employee id v triede Employee je vyhlásené za „prechodné“. Teraz, aby sme skontrolovali serializáciu, objekt deserializujeme. Na výstupe je objekt Employee označený ako „0 Eddie“. To znamená, že ID zamestnanca nebolo uložené do súboru.
Java.io.NotSerializableException v jazyku Java
Výnimkou java.io.NotSerializableException je výnimka, ktorá sa vyvolá, keď trieda nie je spôsobilá na serializáciu. Trieda, ktorá neimplementuje rozhranie Serializable, sa stane neprípustnou pre serializáciu.
Nižšie uvedený program Java demonštruje 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);} } }
Výkon:
Ako je zrejmé z vyššie uvedeného programu, trieda Employee neimplementuje rozhranie Serializable. Preto, keď sa pokúsime serializovať objekt triedy Employee, je vyvolaná NotSerializableException.
Klonovateľné rozhranie v Jave
Klonovanie predmetov znamená vytvorenie kópie predmetov. Java podporuje klonovanie objektov pomocou „ Cloneable ' rozhranie. Klonovateľné rozhranie je označovacie rozhranie a je súčasťou balíka java.lang.
Keď trieda implementuje rozhranie Cloneable, znamená to, že môžeme klonovať objekty tejto triedy. Trieda Object jazyka Java obsahuje ‘ klon () “. Takže rozhranie Cloneable implementované konkrétnou triedou oprávňuje metódu clone () na vytváranie kópií inštancií triedy.
Ak trieda neimplementuje rozhranie Cloneable a napriek tomu vyvolá metódu clone (), potom výnimku CloneNotSupportedException je vyhodený kompilátorom Java.
Triedy implementujúce rozhranie Cloneable by mali prepísať metódu clone ().
Čo je to teda klonovanie objektov?
Klonovanie objektov je proces, pomocou ktorého vytvoríme presnú kópiu objektu metódou clone () triedy Object. Aby bola metóda clone () prepísaná a vyvolaná, musí trieda implementovať rozhranie Cloneable.
Všeobecná syntax metódy clone () je uvedená nižšie:
chránené Klon objektu () hodí CloneNotSupportedException
Metóda clone () vytvorí presnú kópiu objektu s kratším časom spracovania, než aký bol potrebný na vytvorenie nového objektu pomocou nového kľúčového slova.
Nižšie uvedený program Java demonštruje použitie metódy clone () a klonovateľného rozhrania.
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){} } }
Výkon:
V tomto programe máme triedu Student implementujúcu rozhranie Cloneable. Prepíše tiež metódu clone () volaním metódy super.clone (). V hlavnej metóde vytvoríme nový objekt Student a potom zavoláme metódu clone () na tomto objekte, ktorá vráti nový objekt Student.
Clone Array In Java
Klonovanie polí sme preskúmali v našom výučbe o poliach. Pretože polia Java štandardne implementujú Cloneable interface, nie je potrebné ich explicitne implementovať. Keď je jednorozmerné pole naklonované, vygeneruje sa hlboká kópia poľa. Keď je 2-rozmerné pole naklonované, vytvorí sa plytká kópia.
Vytvorenie plytkej kópie je predvolené správanie metódy clone () v Jave. Väčšinou však túžime po hlbokom klonovaní. Pri hlbokom klonovaní vytvoríme kópiu člena objektu po členovi a vytvoríme klon, ktorý je nezávislý od pôvodného objektu. Akékoľvek zmeny, ktoré sa potom vykonajú v klonovanom objekte, sa neprejavia v pôvodnom objekte.
Nasledujúci program Java zobrazuje klonovanie jednorozmerného poľa.
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 Výkon:
Klonovať zoznam v Jave
Nasledujúci program ukazuje, ako používať metódu clone () na klonovanie zoznamu v prostredí Java.
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); } }
Výkon:
zadarmo DVD Ripper pre Windows 7
Vo vyššie uvedenom programe vidíme, že sme vytvorili triedu MyList, ktorá implementuje rozhranie Cloneable, a vo vnútri tejto triedy prepíšeme metódu clone (), ktorá nám pomáha klonovať Zoznam. V hlavnej metóde vytvoríme zoznam prvkov a potom klonujeme každý prvok zoznamu opakovaním zoznamu.
často kladené otázky
Otázka č. 1) Aké je použitie značkovacieho rozhrania v Jave?
Odpoveď: Rozhranie značiek, ktoré sa tiež nazýva „označené rozhranie“, označí triedu a informuje kompilátor, že táto trieda môže implementovať špeciálne správanie.
Otázka 2) Čo sú všetky značkovacie rozhrania v Jave?
Odpoveď: Serializovateľné, klonovateľné a vzdialené sú rozhrania, ktoré sú príkladom značkovacích rozhraní v Jave.
Otázka č. 3) Prečo je serializovateľné značkovacie rozhranie?
Odpoveď: Serializovateľné rozhranie nemá žiadne metódy ani členské premenné. Jedná sa o prázdne rozhranie, ktoré ho klasifikuje ako rozhranie značiek.
Otázka č. 4) Je spustiteľné značkovacie rozhranie?
Odpoveď: Nie, spustiteľný súbor nie je rozhraním značiek. Spustiteľné rozhranie nie je prázdne a poskytuje v ňom deklaráciu metódy run ().
Otázka č. 5) Prečo musíme implementovať Cloneable rozhranie?
Odpoveď: Implementáciou klonovateľného rozhrania pre triedu naznačujeme, že objekty tejto triedy je možné klonovať pomocou metódy clone () triedy Object. Ak trieda používajúca metódu clone () neimplementuje klonovateľné rozhranie, je vyvolaná výnimka „CloneNotSupportedException“.
Záver
Týmto tutoriálom sme zavŕšili našu diskusiu o rozhraniach Java. Diskutovali sme o koncepcii rozhraní, ich štruktúre, definícii, použití atď. Diskutovali sme tiež o niektorých dôležitých rozhraniach v rozhraniach Java, ako sú porovnateľné, komparátorové, značkovacie atď.
V tomto tutoriáli sme diskutovali o dvoch príkladoch značkových rozhraní, tj. Serializovateľných a klonovateľných. Na uchovanie objektu sa používa sériové rozhranie. Klonovateľné rozhranie sa používa na klonovanie objektov triedy. Obe tieto rozhrania sú označovacie rozhrania, t. J. Sú prázdne.
Ale keď ich trieda implementuje, potom naznačujú, že kompilátor môže od tried, ktoré ich implementujú, očakávať nejaké zvláštne správanie.
Napríklad, keď trieda implementuje Serializovateľné rozhranie, potom môžeme objekty triedy serializovať alebo deserializovať a uložiť / načítať ich stav.
Trieda implementujúca klonovateľné rozhranie naznačuje, že môžeme klonovať objekty tejto triedy. Predvolená implementácia metódy clone () vytvorí plytkú kópiu objektu, zatiaľ čo metódu clone () môžeme prepísať a vytvoriť tak hlbokú kópiu.
=> Preskúmajte tu celú sériu školení Java
Odporúčané čítanie
- Nastaviť rozhranie v prostredí Java: Výukový program sady Java s príkladmi
- Rozhranie ListIterator v Jave s príkladmi
- Nasadenie Java: Vytvorenie a vykonanie súboru Java JAR
- A Java - a jej implementácia a definície
- Základy jazyka Java: Java Syntax, trieda Java a základné koncepty Java
- Objekt Java Class Vs - Ako používať triedy a objekty v Jave
- Virtuálny stroj Java: Ako JVM pomáha pri spúšťaní aplikácií Java
- Porovnateľné a porovnávacie rozhrania v Jave