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
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.
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.