V této části budeme diskutovat o rozhraní značek v Javě , své použití, vestavěný ( Serializovatelné , Klonovatelné a vzdálená rozhraní) a uživatelské rozhraní značek s příklady.
Co je rozhraní značky?
An rozhraní který neobsahuje metody, pole a konstanty je známý jako rozhraní značky . Jinými slovy, prázdné rozhraní je známé jako rozhraní značky nebo rozhraní značky. Poskytuje informace o typu běhu o objektu. To je důvod, proč JVM a kompilátor mají další informace o objektu. The Serializovatelné a Klonovatelné rozhraní jsou příkladem rozhraní markerů. Stručně řečeno, indikuje signál nebo příkaz pro JVM.
Deklarace rozhraní markeru je stejná jako rozhraní v Javě, ale rozhraní musí být prázdné. Například:
a-b prořezávání
public interface Serializable { }
Existují dvě alternativy rozhraní markeru, které poskytuje stejný výsledek jako rozhraní markeru.
Použití rozhraní značek
Rozhraní Marker se používá jako značka, která informuje kompilátor Java zprávou, aby mohl přidat nějaké speciální chování do třídy, která jej implementuje. Java marker interface jsou užitečné, pokud máme informace o třídě a tyto informace se nikdy nemění, v takových případech používáme marker interface reprezentovat k reprezentaci stejného. Implementace prázdného rozhraní říká kompilátoru, aby provedl nějaké operace.
Používá se k logickému rozdělení kódu a dobrý způsob kategorizace kódu. Je užitečnější pro vývoj API a ve frameworkech jako Spring.
Vestavěné rozhraní značek
v Jáva , vestavěná rozhraní značek jsou rozhraní, která jsou již přítomna v JDK a jsou připravena k použití. Existuje mnoho vestavěných rozhraní značek, z nichž některé jsou:
- Klonovatelné rozhraní
- Serializovatelné rozhraní
- Vzdálené rozhraní
Pojďme diskutovat jeden po druhém podrobně.
Klonovatelné rozhraní
Čistitelné rozhraní v Javě je také marker rozhraní, které patří java.lang balík. Vygeneruje repliku (kopii) objektu s jiným názvem. Rozhraní můžeme implementovat do třídy, do které třídní objekt má být klonován. Označuje to klon() metoda třídy Object. Pokud do třídy neimplementujeme rozhraní Cloneable a vyvoláme metodu clone(), vyvolá to ClassNotSupportedException.
Všimněte si, že třída, která implementuje rozhraní Cloneable, musí přepsat metodu clone() veřejnou metodou. Podívejme se na příklad.
Produkt.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(); } }
Výstup:
Shilpa Shetty
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
Serializovatelné rozhraní
Je to značkovací rozhraní v Javě, které je definováno v java.io balík. Pokud chceme, aby třída byla serializovatelná, musíme implementovat Serializovatelné rozhraní. Pokud třída implementuje rozhraní Serializable, můžeme serializovat nebo deserializovat stav objektu této třídy.
Serializace (převod objektu na byte stream) je mechanismus, ve kterém stav objektu je načten z paměti a zapsán do souboru nebo databáze . Deserializace (převod byte streamu na objekt) je opakem serializace, což znamená, že čtení stavu objektu ze souboru nebo databáze a zápis zpět do paměti se nazývá deseralizace objektu.
Serializaci (zápis) lze dosáhnout pomocí ObjectOutputStream třídy a deserializace (čtení) lze dosáhnout pomocí ObjectInputStream třída.
Podívejme se na příklad serializace a deserializace.
Příklad serializace
Employee.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
localdate 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(); } } }
Výstup:
Data has been read from the file.
Příklad deseralizace
Pojďme deserializovat stav objektu.
žádný vstupní signál
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(); } } }
Výstup:
1187345 Andrew
Vzdálené rozhraní
Vzdálené rozhraní je rozhraní značek, které patří java.rmi balík. Označuje objekt jako vzdálený, ke kterému lze přistupovat z jiného počítače (hostitele). Pokud chceme, aby objekt byl vzdálený, musíme implementovat rozhraní Remote. Identifikuje rozhraní, jejichž metody lze vyvolat z nelokálního JVM. Jakýkoli vzdálený objekt musí implementovat rozhraní přímo nebo nepřímo.
Pojďme definovat Vzdálené rozhraní a implementovat jej do Java programu.
Definování vzdáleného rozhraní
import java.rmi.*; public interface AddAll extends Remote { public int add(int r, int s)throws RemoteException; }
Implementujte vzdálené rozhraní
Existují dva způsoby, jak implementovat vzdálené rozhraní:
- Rozšířením třídy UnicastRemoteObject
- Pomocí metody exportObject() třídy 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; }
Vytvořte a spusťte vzdálenou aplikaci
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); } } }
Vytvořte a spusťte klientskou aplikaci
Client.java
příklady automatů dfa
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) { } } }
Vlastní rozhraní značek
Kromě vestavěného rozhraní značek nám Java také umožňuje vytvářet vlastní rozhraní značek. Podívejme se na příklad.
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(); } }
Výstup:
Car is a vehicle. Yes, engine is working.