logo

Rozhraní značek v Javě

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.

    Interní příznaky:Může být použit místo rozhraní markeru k označení jakékoli specifické operace.Anotace:Od Java 5, rozhraní značek jsou vynechána . Místo rozhraní značek poskytuje Java 5 anotace dosáhnout stejných výsledků. Umožňuje flexibilní schopnost metadat. Použitím anotací na jakoukoli třídu tedy můžeme provést konkrétní akci.

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.

Rozhraní značek v Javě

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.