logo

Merkin käyttöliittymä Javassa

Tässä osiossa keskustelemme aiheesta merkin käyttöliittymä Javassa , sen käyttää, sisäänrakennettu ( Sarjasoitavissa , Kloonattavissa ja etäkäyttöliittymät ) ja mukautetun merkin käyttöliittymä esimerkkien kanssa.

Mikä on merkin käyttöliittymä?

An käyttöliittymä joka ei sisällä menetelmiä, kenttiä ja vakioita, tunnetaan nimellä merkin käyttöliittymä . Toisin sanoen tyhjä käyttöliittymä tunnetaan nimellä merkin käyttöliittymä tai tagin käyttöliittymä. Se toimittaa ajonaikaiset tiedot objektista. Se on syy siihen, että JVM ja kääntäjällä on lisätietoja objektista. The Sarjasoitavissa ja Kloonattavissa rajapinnat ovat esimerkki merkin käyttöliittymästä. Lyhyesti sanottuna se osoittaa signaalin tai komennon JVM:lle.

Merkkirajapinnan ilmoitus on sama kuin Javassa, mutta käyttöliittymän on oltava tyhjä. Esimerkiksi:

 public interface Serializable { } 

Merkin käyttöliittymässä on kaksi vaihtoehtoa, jotka tuottavat saman tuloksen kuin merkin käyttöliittymä.

avl-puun kierto
    Sisäiset liput:Sitä voidaan käyttää merkkirajapinnan sijasta osoittamaan mitä tahansa tiettyä toimintaa.Huomautukset:Java 5:stä lähtien merkkirajapinnat jätetään pois . Merkintäliittymän sijaan Java 5 tarjoaa huomautuksia saavuttaaksesi samat tulokset. Se mahdollistaa joustavan metatietojen käytön. Siksi voimme suorittaa tietyn toiminnon käyttämällä huomautuksia mihin tahansa luokkaan.

Marker-liittymän käyttötarkoitukset

Merkintärajapintaa käytetään tagina, joka ilmoittaa Java-kääntäjälle viestillä, jotta se voi lisätä erityiskäyttäytymistä sitä toteuttavaan luokkaan. Java-merkkirajapinta on hyödyllinen, jos meillä on tietoa luokasta ja se tieto ei muutu koskaan, tällaisissa tapauksissa käytämme merkkirajapintaa edustamaan samaa. Tyhjän käyttöliittymän toteuttaminen käskee kääntäjää tekemään joitain toimintoja.

Sitä käytetään koodin loogiseen jakamiseen ja hyvä tapa luokitella koodi. Se on hyödyllisempi API-kehityksessä ja kehyksissä, kuten Spring.

Sisäänrakennettu merkintäliittymä

Sisään Java , sisäänrakennetut merkkirajapinnat ovat rajapintoja, jotka ovat jo JDK:ssa ja valmiita käyttöön. On olemassa monia sisäänrakennettuja merkkirajapintoja, joista osa on:

  • Kloonattava käyttöliittymä
  • Serialisoitava käyttöliittymä
  • Etäkäyttöliittymä

Keskustellaan yksitellen yksityiskohtaisesti.

Kloonattava käyttöliittymä

Puhdistettava käyttöliittymä Javassa on myös merkkirajapinta, joka kuuluu java.lang paketti. Se luo replikan (kopion) objektista, jolla on eri nimi. Voimme toteuttaa rajapinnan luokassa, minkä luokan objektin kloonataan. Se osoittaa klooni() Object-luokan menetelmä. Jos emme toteuta Cloneable-rajapintaa luokassa ja kutsumme clone()-metodin, se heittää ClassNotSupportedException.

Huomaa, että luokan, joka toteuttaa Cloneable-rajapinnan, on ohitettava clone()-metodi julkisella menetelmällä. Katsotaanpa esimerkkiä.

Tuote.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(); } } 

Lähtö:

 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 

Serialisoitava käyttöliittymä

Se on Java-merkkiliittymä, joka on määritelty java.io paketti. Jos haluamme tehdä luokasta serialoitavaksi, meidän on toteutettava Sarjasoitavissa käyttöliittymä. Jos luokka toteuttaa Serializable-rajapinnan, voimme serialisoida tai deserialisoida kyseisen luokan objektin tilan.

Serialisointi (objektin muuntaminen tavuvirraksi) on mekanismi, jossa objektin tila luetaan muistista ja kirjoitetaan tiedostoon tai tietokantaan . Deserialisointi (tavuvirran muuntaminen objektiksi) on vastakohta serialisaatiolle objektin tilan lukeminen tiedostosta tai tietokannasta ja kirjoitettu takaisin muistiin kutsutaan objektin deserialisaatioksi.

Merkin käyttöliittymä Javassa

Serialisointi (kirjoittaminen) voidaan saavuttaa ObjectOutputStream luokka ja deserialisointi (lukeminen) voidaan saavuttaa ObjectInputStream luokkaa.

Katsotaanpa esimerkkiä serialisoinnista ja deserialisoinnista.

Esimerkki serialisoinnista

Työntekijä.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(); } } } 

Lähtö:

 Data has been read from the file. 

Esimerkki deserialisoinnista

Tehdään objektin serialisointi.

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(); } } } 

Lähtö:

 1187345 Andrew 

Etäkäyttöliittymä

Etäkäyttöliittymä on merkkirajapinta, joka kuuluu java.rmi paketti. Se merkitsee kohteen etäkäyttöiseksi, jota voidaan käyttää toiselta koneelta (isäntä). Meidän on otettava käyttöön Remote-käyttöliittymä, jos haluamme tehdä objektista etäkäyttöisen. Se tunnistaa rajapinnat, joiden menetelmiä voidaan kutsua ei-paikallisesta JVM:stä. Kaikkien etäobjektien on toteutettava käyttöliittymä suoraan tai epäsuorasti.

Määritellään etäkäyttöliittymä ja toteutetaan se Java-ohjelmassa.

Etäkäyttöliittymän määrittely

 import java.rmi.*; public interface AddAll extends Remote { public int add(int r, int s)throws RemoteException; } 

Ota käyttöön etäkäyttöliittymä

On olemassa kaksi tapaa ottaa käyttöön etäkäyttöliittymä:

  • Laajentamalla UnicastRemoteObject-luokkaa
  • Käyttämällä UnicastRemoteObject-luokan exportObject()-metodia

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; } 

Luo ja käynnistä etäsovellus

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); } } } 

Luo ja käynnistä asiakassovellus

Asiakas.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) { } } } 

Mukautettu merkin käyttöliittymä

Sisäänrakennetun merkkirajapinnan lisäksi Java mahdollistaa myös oman merkintäliittymän luomisen. Katsotaanpa esimerkkiä.

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(); } } 

Lähtö:

 Car is a vehicle. Yes, engine is working.