V tem razdelku bomo razpravljali o označevalni vmesnik v Javi , svoje uporablja, vgrajen ( Serializable , Klonirati in oddaljeni vmesniki) in vmesnik markerjev po meri s primeri.
Kaj je vmesnik markerjev?
An vmesnik ki ne vsebuje metod, polj in konstant, se imenuje vmesnik markerjev . Z drugimi besedami, prazen vmesnik je znan kot vmesnik markerjev oz vmesnik oznake. Zagotavlja informacije o vrsti izvajalnega časa o objektu. To je razlog, da JVM in prevajalnik imata dodatne informacije o objektu. The Serializable in Klonirati vmesniki so primer vmesnika markerjev. Na kratko, označuje signal ali ukaz za JVM.
Deklaracija vmesnika markerjev je enaka vmesniku v Javi, vendar mora biti vmesnik prazen. Na primer:
razred matematike java
public interface Serializable { }
Obstajata dve možnosti vmesnika markerjev, ki dajeta enak rezultat kot vmesnik markerjev.
Uporaba označevalnega vmesnika
Vmesnik markerjev se uporablja kot oznaka, ki prevajalnik Java obvesti s sporočilom, tako da lahko razredu, ki ga izvaja, doda nekaj posebnega vedenja. Vmesnik označevalcev Java je uporaben, če imamo informacije o razredu in se te informacije nikoli ne spremenijo; v takih primerih uporabimo vmesnik označevalcev, ki predstavljajo isto. Implementacija praznega vmesnika naroči prevajalniku, naj izvede nekaj operacij.
Uporablja se za logično razdelitev kode in dober način za kategorizacijo kode. Uporabnejši je za razvoj API-ja in v okvirih, kot je Spring.
Vgrajen vmesnik za označevanje
notri Java , vgrajeni označevalni vmesniki so vmesniki, ki so že prisotni v JDK in pripravljeni za uporabo. Obstaja veliko vgrajenih vmesnikov za označevanje, nekateri med njimi so:
- Vmesnik, ki ga je mogoče klonirati
- Serializable vmesnik
- Oddaljeni vmesnik
Razpravljajmo enega za drugim podrobno.
Vmesnik, ki ga je mogoče klonirati
Čistilni vmesnik v Javi je tudi označevalni vmesnik, ki pripada java.lang paket. Ustvari repliko (kopijo) predmeta z drugačnim imenom. Vmesnik lahko implementiramo v razred, katerega predmet razreda naj se klonira. Označuje na klon() metoda razreda Object. Če v razredu ne implementiramo vmesnika Cloneable in pokličemo metodo clone(), vrže ClassNotSupportedException.
Upoštevajte, da mora razred, ki implementira vmesnik Cloneable, preglasiti metodo clone() z javno metodo. Poglejmo primer.
Product.java
import java.util.Scanner; public class Product implements Cloneable { int pid; String pname; double pcost; //Product class constructor public Product (int pid, String pname, double pcost) { this.pid = pid; this.pname = pname; this.pcost = pcost; } //method that prints the detail on the console public void showDetail() { System.out.println('Product ID: '+pid); System.out.println('Product Name: '+pname); System.out.println('Product Cost: '+pcost); } public static void main (String args[]) throws CloneNotSupportedException { //reading values of the product from the user Scanner sc = new Scanner(System.in); System.out.print('Enter product ID: '); int pid = sc.nextInt(); System.out.print('Enter product name: '); String pname = sc.next(); System.out.print('Enter product Cost: '); double pcost = sc.nextDouble(); System.out.println('-------Product Detail--------'); Product p1 = new Product(pid, pname, pcost); //cloning the object of the Product class using the clone() method Product p2 = (Product) p1.clone(); //invoking the method to print detail p2.showDetail(); } }
Izhod:
Enter product ID: 139872 Enter product name: Printer Enter product Cost: 3459.67 -------Product Detail-------- Product ID: 139872 Product Name: Printer Product Cost: 3459.67
Serializable vmesnik
Je označevalni vmesnik v Javi, ki je definiran v java.io paket. Če želimo narediti razred serializljiv, moramo implementirati Serializable vmesnik. Če razred implementira vmesnik Serializable, lahko serializiramo ali deserializiramo stanje objekta tega razreda.
Serializacija (pretvorba objekta v tok bajtov) je mehanizem, pri katerem stanje objekta se prebere iz pomnilnika in zapiše v datoteko ali bazo podatkov . Deserializacija (pretvorba toka bajtov v objekt) je nasprotje serializacije, kar pomeni, da branje stanja objekta iz datoteke ali baze podatkov in zapis nazaj v pomnilnik se imenuje deserializacija objekta.
Serializacijo (pisanje) je mogoče doseči z ObjectOutputStream razreda in deserializacijo (branje) je mogoče doseči z ObjectInputStream razred.
Oglejmo si primer serializacije in deserializacije.
Primer serializacije
Zaposleni.java
import java.io.Serializable; public class Employee implements Serializable { int empid; String empname; public Employee(int empid, String empname) { this.empid = empid; this.empname = empname; } }
SerializationExample.java
import java.io.*; class SerializationExample { public static void main(String args[]) { try { //Creating the object Employee emp =new Employee(1187345,'Andrew'); //Creating stream and writing the object FileOutputStream fout=new FileOutputStream('employee data.txt'); ObjectOutputStream out=new ObjectOutputStream(fout); out.writeObject(emp); out.flush(); //closing the stream out.close(); System.out.println('Data has been read from the file.'); } catch(Exception e) { e.printStackTrace(); } } }
Izhod:
Data has been read from the file.
Primer deserializacije
Deserializirajmo stanje objekta.
DeserializationExample.java
import java.io.*; class DeserializationExample { public static void main(String args[]) { try { //Creating stream to read the object ObjectInputStream in=new ObjectInputStream(new FileInputStream('employee data.txt')); Employee emp=(Employee)in.readObject(); //printing the data of the serialized object System.out.println(emp.empid+' '+emp.empname); //closing the stream in.close(); } catch(Exception e) { e.printStackTrace(); } } }
Izhod:
1187345 Andrew
Oddaljeni vmesnik
Oddaljeni vmesnik je označevalni vmesnik, ki pripada java.rmi paket. Označi objekt kot oddaljen, do katerega je mogoče dostopati z drugega stroja (gostitelja). Vmesnik Remote moramo implementirati, če želimo objekt narediti kot oddaljen. Identificira vmesnike, katerih metode je mogoče priklicati iz nelokalnega JVM. Vsak oddaljeni objekt mora implementirati vmesnik neposredno ali posredno.
Definirajmo oddaljeni vmesnik in ga implementirajo v program Java.
Definiranje oddaljenega vmesnika
import java.rmi.*; public interface AddAll extends Remote { public int add(int r, int s)throws RemoteException; }
Izvedite oddaljeni vmesnik
Obstajata dva načina za implementacijo vmesnika Remote:
- Z razširitvijo razreda UnicastRemoteObject
- Z uporabo metode exportObject() razreda UnicastRemoteObject
AddAllRemote.java
import java.rmi.*; import java.rmi.server.*; public class AddAllRemote extends UnicastRemoteObject implements Adder { AddAllRemote()throws RemoteException { super(); } public int add(int r, int s) { return r+s; }
Ustvarite in zaženite oddaljeno aplikacijo
Server.java
import java.rmi.*; import java.rmi.registry.*; public class Server { public static void main(String args[]) { try { AddAll stub=new AddAllRemote(); Naming.rebind('rmi://localhost:5000/sak',stub); } catch(Exception e) { System.out.println(e); } } }
Ustvarite in zaženite odjemalsko aplikacijo
Client.java
import java.rmi.*; public class Client { public static void main(String args[]) { try { AddAll stub=(AddAll)Naming.lookup('rmi://localhost:5000/sak'); System.out.println(stub.add(29,18)); } catch(Exception e) { } } }
Merilni vmesnik po meri
Poleg vgrajenega vmesnika za označevanje nam Java omogoča tudi ustvarjanje lastnega vmesnika za označevanje. Poglejmo primer.
CustomMarkerInterfaceExample.java
//custom marker interface interface Car { } //custom marker interface interface Engine { } //class that implements the Car marker interface class Vehicle implements Car { static void isVehicle() { System.out.println('Car is a vehicle.'); } } //class that implements the Engine marker interface class Status implements Engine { static void isWorking() { System.out.println('Yes, engine is working.'); } } //main class public class CustomMarkerInterfaceExample { public static void main(String args[]) { //invoking the methods of the class Vehicle.isVehicle(); Status.isWorking(); } }
Izhod:
Car is a vehicle. Yes, engine is working.