marker interface java
Ta vadnica pojasnjuje, kaj je vmesnik označevalnika v Javi. Zajema tudi serializacijo in kloniranje v Javi s primeri kode:
O zadnji temi bomo razpravljali v razdelku Interfaces, tj. Marker Interface v Javi.
Ko končamo z vmesnikom označevalcev, bomo razpravljali o dveh primerih, tj. Serializiranem in klonirnem vmesniku v Javi. Začnimo z vmesnikom Marker.
=> Obiščite tukaj, če se želite naučiti Jave iz nič
Kaj se boste naučili:
- Označevalni vmesnik v Javi
- Serializacija v Javi
- Java serijski vmesnik
- Cloneable Interface In Java
- Zaključek
Označevalni vmesnik v Javi
Vmesnik označevalnika v Javi je prazen vmesnik, ki nima polj ali metod. Ta vmesnik označevalnika sporoča prevajalniku, da so predmeti razreda, ki izvajajo vmesnik označevalnika, različni in da jih je treba obravnavati drugače.
Vsak označevalni vmesnik v Javi kaže, da predstavlja nekaj posebnega za JVM ali prevajalnik.
V Javi imamo tri vmesnike, ki so vmesniki Marker, kot je prikazano spodaj:
# 1) Serializiran vmesnik: Serializable je označevalni vmesnik, ki je prisoten v paketu java.io. Predmete lahko serializiramo s pomočjo tega vmesnika, tj. Stanje predmeta shranimo v datoteko.
# 2) Cloneable vmesnik: Klonirni vmesnik je del paketa java.lang in omogoča kloniranje predmetov.
# 3) Oddaljeni vmesnik: Oddaljeni vmesnik je del paketa java.RMI in ta vmesnik uporabljamo za ustvarjanje aplikacij RMI. Ta vmesnik se ukvarja predvsem z oddaljenimi predmeti.
V tej vadnici bomo razpravljali o serializiranem in klonirnem vmesniku. O oddaljenem vmesniku bomo razpravljali, ko v Java preidemo na RMI.
Serializacija v Javi
Preden se poglobimo v podrobnosti vmesnika, ki ga je mogoče serializirati v Javi, si oglejmo postopek serializacije in deserializacije v Javi.
Serializacijo lahko definiramo kot postopek, s katerim pretvorimo stanje predmeta v njegov enakovreden bajtni tok, da predmet shranimo v pomnilnik v datoteki ali vztrajajo predmeta.
Ko želimo objekt pridobiti iz shranjenega stanja in dostopati do njegove vsebine, bomo morali pretvoriti bajtni tok nazaj v dejanski objekt Java in ta postopek se imenuje deserializacija.
Tako je lahko veliko primerov, v katerih moramo v življenju Java-aplikacije serializirati / deserializirati predmete Java.
Postopek serializacije / deserializacije je prikazan spodaj:
Kot je prikazano zgoraj, serializacija pretvori objekt v tok. Deserializacija pretvori bajtni tok nazaj v objekt Java.
Celoten mehanizem serializacije in deserializacije ni odvisen od platforme. To pomeni, da lahko objekt serializiramo na eni platformi in nato deserializiramo na drugi platformi.
Ko rečemo, da smo serializirali objekt Java, to pomeni, da smo za zapis predmeta v datoteko poklicali metodo ObjectOutputStream writeObject ().
kako odpreti jar datoteke windows 10
public final void writeObect (Object obj) vrže IOException
Podobno v primeru deserializacije pokličemo metodo ObjectInputStream :: readObject () za branje podatkov iz datoteke, ki je shranila predmet.
javni končni objekt readObject () vrže IOException, ClassNotFoundException
Java serijski vmesnik
Java ponuja vmesnik z imenom 'serializable', s pomočjo katerega lahko v Java izvedemo serializacijo in deserializacijo.
Serializiran vmesnik je del paketa java.io. To je primer vmesnika označevalca, o katerem smo razpravljali zgoraj, in0 in nima metod ali članov. Serijski vmesnik 'označi' razrede Java, tako da predmeti teh razredov dobijo sposobnost vztrajanja.
Torej bi moral razred, katerega predmet moramo nadaljevati, implementirati vmesnik Serializable. Nato bo objekt tega razreda (ki izvaja serijski vmesnik) uporabil metode writeObject () in readObject () za serializacijo in deserializacijo predmeta razreda.
Upoštevajte, da vsi razredi ovitkov in razred String privzeto izvajajo java.io.Serializable.
Za uspešno serializacijo predmeta bi morali izpolniti naslednji pogoj:
- Razred, katerega objekti so serializirani, mora implementirati vmesnik java.io.Serializable.
- Vsa polja člana razreda morajo biti serializirana. Če določeno polje ni serializirano, ga moramo označiti kot prehodno.
Nasprotno pa je razred mogoče serializirati le, če implementira vmesnik java.io.Serializable, sicer ni serializirati.
Kako serializirati in deserializirati predmet v Javi
Ko v Javi serializiramo predmet, za zapis predmeta v datoteko uporabimo metodo writeObject objectOutputStream.
vprašanja za preizkus uspešnosti za izkušene
Za deserializacijo predmeta v Javi uporabljamo metodo ObjectInputStream readObject () za branje vsebine datoteke in njeno branje v objekt.
V tem primeru imamo tečaj Student, ki izvaja vmesnik Serializable. To pomeni, da lahko predmete študentskega razreda serializiramo ali deserializiramo.
V glavni metodi programa Java ustvarimo objekt razreda Student. Nato ustvarimo ObjectOutputStream, ki kaže na objekt FileOutputStream, ki pa kaže na datoteko, v katero moramo zapisati predmet Student. Nato pokličemo metodo writeObject (), ki objekt zapiše v datoteko.
Ob uspešnem zapisu določenega predmeta v določeno datoteko program da ustrezno izhodno sporočilo. Nato objekt deserializiramo tako, da zgornji postopek obrnemo nazaj. Najprej ustvarimo objekt ObjectOutputStream, v katerem preberemo datoteko, katere vsebino je treba prebrati.
Nato uporabimo metodo readObject () za branje vsebine in oddajo v predmet Student. Nato natisnemo vsebino predmeta Student.
Primer serializacije / deserializacije
Naslednji program Java prikazuje mehanizem serializacije / deserializacije v Javi, kot je opisano zgoraj.
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);} } }
Izhod:
Upoštevajte, da po deserializaciji dobimo isti predmet, ki smo ga prej serializirali, ko ponovno odpremo isto datoteko.
Prehodna ključna beseda Java
Prehodna ključna beseda se uporablja za prehod podatkovnega člana, tj. Ne želimo ga serializirati.
Na primer razmislite o naslednjem razredu Zaposleni. Tu imamo polje Id zaposlenega skupaj z drugimi polji. Zdaj, če se odločimo, da se polje Id zaposlenega ne sme serializirati, ga razglasimo za „prehodno“.
Primer programa Java je spodaj.
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);} } }
Izhod:
V zgornjem programu smo serializirali objekt Employee. Upoštevajte pa, da je polje id zaposlenega v razredu zaposleni razglašeno za „prehodno“. Zdaj, da preverimo serializacijo, objekt deserializiramo. Rezultat prikazuje objekt Employee kot ‘0 Eddie’. To pomeni, da ID zaposlenega ni bil shranjen v datoteko.
Java.io.NotSerializableException V Javi
Izjema java.io.NotSerializableException je izjema, ki se vrže, kadar razred ni primeren za serializacijo. Razred, ki ne izvaja vmesnika Serializable, postane neprimeren za serializacijo.
Spodnji program Java 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);} } }
Izhod:
Kot je razvidno iz zgornjega programa, razred Employee ne izvaja vmesnika Serializable. Ko poskušamo serializirati objekt razreda Employee, se vrže NotSerializableException.
Cloneable Interface In Java
Kloniranje predmetov pomeni kopiranje predmetov. Java podpira kloniranje predmetov z uporabo Klonirano ”Vmesnik. Klonirni vmesnik je označevalni vmesnik in je del paketa java.lang.
Ko razred implementira vmesnik Cloneable, to pomeni, da lahko kloniramo predmete tega razreda. Razred Object Java vsebuje klon () “. Tako Cloneable vmesnik, ki ga izvaja določen razred, pooblašča metodo clone () za kopiranje primerkov razreda.
Če razred ne izvaja vmesnika Cloneable in še vedno prikliče metodo clone (), potem izjema CloneNotSupportedException vrže prevajalnik Java.
Razredi, ki izvajajo vmesnik Cloneable, bi morali preglasiti metodo clone ().
Kaj je torej kloniranje predmetov?
Kloniranje predmeta je postopek, pri katerem z uporabo metode clone () razreda Object ustvarimo natančno kopijo predmeta. Da bo metoda clone () razveljavljena in priklicana, mora razred implementirati vmesnik Cloneable.
Splošna sintaksa metode clone () je podana spodaj:
zaščiten Klon predmeta () meti CloneNotSupportedException
Metoda clone () ustvari natančno kopijo predmeta z manj časa obdelave, kot je bil potreben za ustvarjanje novega predmeta z novo ključno besedo.
Spodnji program Java prikazuje uporabo metode clone () in vmesnika 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){} } }
Izhod:
V tem programu imamo študentski razred, ki izvaja vmesnik Cloneable. Prav tako preglasi metodo clone () s klicanjem metode super.clone (). V glavni metodi ustvarimo nov predmet Student in nato pri tem objektu pokličemo metodo clone (), ki vrne nov predmet Student.
Kloniraj polje v Javi
Kloniranje nizov smo raziskali v naši vadnici o nizih. Ker polja Java privzeto uporabljajo vmesnik Cloneable, jih ni treba izrecno izvajati. Ko je enodimenzionalno polje klonirano, se ustvari globinska kopija polja. Ko je dvodimenzionalno polje klonirano, se naredi plitva kopija.
Izdelava plitke kopije je privzeto vedenje metode clone () v Javi. Toda večino časa si želimo globokega kloniranja. Pri globokem kloniranju naredimo kopijo člana predmeta po članu in ustvarimo klon, ki je neodvisen od prvotnega predmeta. Kakršne koli spremembe, ki so bile nato izvedene na predmetu kloniranja, se ne bodo odražale v prvotnem predmetu.
Naslednji program Java prikazuje kloniranje enodimenzionalnega polja.
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 Izhod:

kaj je najboljši mp3 downloader
Kloniraj seznam v Javi
Spodnji program prikazuje, kako uporabiti metodo clone () za kloniranje seznama v 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); } }
Izhod:

V zgornjem programu vidimo, da smo ustvarili razred MyList, ki izvaja vmesnik Cloneable, in znotraj tega razreda preglasimo metodo clone (), ki nam pomaga klonirati seznam. V glavni metodi ustvarimo seznam elementov in nato kloniramo vsak element seznama s ponovitvijo po seznamu.
Pogosto zastavljena vprašanja
V # 1) Kakšna je uporaba vmesnika Marker v Javi?
Odgovor: Označevalni vmesnik, ki je znan tudi kot 'tagged interface', označi razred in obvesti prevajalnik, da lahko ta razred izvaja posebno vedenje.
V # 2) Kateri so vsi vmesniki označevalnikov v Javi?
Odgovor: Serializable, Cloneable in Remote so vmesniki, ki so primeri vmesnikov markerjev v Javi.
V # 3) Zakaj je serijski vmesnik označevalnika?
Odgovor: Serijski vmesnik nima nobenih metod ali spremenljivk članov. To je prazen vmesnik, ki ga uvršča med označevalne vmesnike.
V # 4) Ali je mogoče voditi označevalni vmesnik?
Odgovor: Ne, runnable ni označevalni vmesnik. Vmesnik, ki ga je mogoče zagnati, ni prazen in v njem vsebuje izjavo metode run ().
V # 5) Zakaj moramo implementirati Cloneable vmesnik?
Odgovor: Z izvajanjem klonirnega vmesnika za razred nakazujemo, da je mogoče predmete tega razreda klonirati z uporabo metode clone () razreda Object. Če razred, ki uporablja metodo clone (), ne izvaja vmesnika, ki ga je mogoče klonirati, se vrže izjema 'CloneNotSupportedException'.
Zaključek
S to vadnico smo zaključili razpravo o vmesnikih v Javi. Razpravljali smo o konceptu vmesnikov, njihovi strukturi, definiciji, uporabi itd. Razpravljali smo tudi o nekaterih pomembnih vmesnikih v podobnih vmesnikih Java, podobnih, primerjalnih, markerskih itd.
V tej vadnici smo razpravljali o dveh primerih vmesnikov označevalcev, tj. Serijski vmesnik se uporablja za vztrajanje predmeta. Klonirni vmesnik se uporablja za kloniranje predmetov razreda. Oba vmesnika sta vmesnika označevalnika, torej sta prazna.
Ko pa jih razred implementira, potem nakazujejo, da lahko prevajalnik pričakuje nekaj posebnega vedenja od razredov, ki jih izvajajo.
Na primer ko razred implementira vmesnik, ki ga je mogoče serializirati, lahko predmete razreda serializiramo ali deserializiramo in shranimo / pridobimo njihovo stanje.
Razred, ki izvaja klonirni vmesnik, kaže, da lahko kloniramo predmete tega razreda. Privzeta izvedba metode clone () ustvari plitvo kopijo predmeta, medtem ko lahko metodo clone () preglasimo, da ustvarimo globoko kopijo.
=> Tukaj raziščite celotno serijo usposabljanja za Java
Priporočeno branje
- Nastavitev vmesnika v Javi: Vadnica za nastavitev Java s primeri
- ListIterator vmesnik v Javi s primeri
- Uvajanje Java: Ustvarjanje in izvajanje datoteke Java JAR
- In Java - ter njeno izvajanje in opredelitve
- Osnove Java: Sintaksa Java, Razred Java in Osnovni koncepti Java
- Predmet Java Class Vs - Kako uporabljati razred in predmet v Javi
- Navidezni stroj Java: kako JVM pomaga pri zagonu aplikacije Java
- Primerljivi in primerjalni vmesniki v Javi