marker interface java
Овај водич објашњава шта је Маркер Интерфаце у Јави. Такође покрива десериализацију и клонирање сериализације и клонирање у Јави са примерима кода:
Разговараћемо о последњој теми под Интерфејси, тј. Маркер Интерфаце у Јави.
Након што завршимо са интерфејсом маркера, разговараћемо о два примера, тј. О интерфејсу који се може серирати и клонирати у Јави. Почнимо са Маркер интерфејсом.
=> Посетите овде да бисте научили Јаву из нуле
Шта ћете научити:
шта је мрежни безбедносни кључ
- Маркер интерфејс у Јави
- Серијализација у Јави
- Јава серијски интерфејс
- Цлонеабле Интерфаце Ин Јава
- Закључак
Маркер интерфејс у Јави
Интерфејс маркера у Јави је празан интерфејс који нема поља или методе. Овај интерфејс маркера говори компајлеру да су објекти класе који примењују интерфејс маркера различити и да би према њима требало другачије поступати.
Сваки интерфејс маркера у Јави указује да представља нешто посебно за ЈВМ или компајлер.
У Јави имамо три интерфејса који су Маркер интерфејси, као што је приказано доле:
# 1) Интерфејс који се може серирати: Сериализабле је интерфејс маркера присутан у пакету јава.ио. Помоћу овог интерфејса можемо сериализовати објекте, тј. Сачувати стање објекта у датотеци.
# 2) Цлонеабле интерфејс: Клонибилни интерфејс је део пакета јава.ланг и омогућава клонирање објеката.
# 3) Удаљени интерфејс: Удаљени интерфејс је део пакета јава.РМИ и користимо овај интерфејс за креирање РМИ апликација. Овај интерфејс се углавном бави удаљеним објектима.
У овом упутству ћемо разговарати о интерфејсу који се може серирати и клонирати. О даљинском интерфејсу ћемо разговарати када пређемо на РМИ у Јави.
Серијализација у Јави
Пре него што улазимо у детаље интерфејса који се може серирати на Јави, схватимо процес сериализације као и десериализације на Јави.
Серијализација се може дефинисати као процес којим претварамо стање објекта у његов еквивалентни бајтни ток да бисмо га сачували у меморији у датотеци или устрајати објекат.
Када желимо да преузмемо објекат из сачуваног стања и приступимо његовом садржају, мораћемо да претворимо ток бајтова натраг у стварни Јава објекат и тај процес се назива десериализација.
На овај начин може бити много случајева у којима треба да сериализујемо / десериализујемо Јава објекте током целог трајања Јава апликације.
Процес сериализације / десериализације приказан је у наставку:
Као што је горе приказано, сериализација претвара објекат у ток. Десеријализација претвара бајтни ток назад у Јава објекат.
Читав механизам сериализације и десериализације не зависи од платформе. То значи да објект можемо сериализирати на једној платформи, а затим га десериализирати на другој платформи.
Када кажемо да смо сериализовали Јава објекат, то значи да смо позвали ОбјецтОутпутСтреам методу вритеОбјецт () да бисмо објект записали у датотеку.
јавна коначна воид вритеОбецт (Објецт обј) баца ИОЕкцептион
Слично томе, у случају десериализације, позивамо методу ОбјецтИнпутСтреам :: реадОбјецт () да бисмо прочитали податке из датотеке која је ускладиштила објекат.
јавни коначни Објект реадОбјецт () баца ИОЕкцептион, ЦлассНотФоундЕкцептион
Јава серијски интерфејс
Јава пружа интерфејс под називом „сериализабле“ помоћу којег можемо имплементирати сериализацију и десериализацију у Јави.
Серијализовани интерфејс је део пакета јава.ио. То је пример интерфејса маркера о којем смо раније дискутовали и који нема методе или чланове. Интерфејс који се може серирати „обележава“ Јава класе тако да објекти ових класа добијају могућност да истрају.
Дакле, класа чији објекат морамо да наставимо треба да имплементира серијски интерфејс. Тада ће објекат ове класе (имплементирајући серијски интерфејс) користити методе вритеОбјецт () и реадОбјецт () за сериализацију и десериализацију објекта класе.
Имајте на уму да све класе омотача и класа Стринг по дефаулту имплементирају јава.ио.Сериализабле.
Требали бисмо испунити следећи услов да би се објекат успешно сериализовао:
- Класа чији су објекти сериализовани мора да примени интерфејс јава.ио.Сериализабле.
- Сва поља члана класе морају бити серијска. Ако одређено поље није могуће сериализовати, требало би да га означимо као пролазно.
Супротно томе, класа је сериализабилна само ако имплементира јава.ио.Сериализабле интерфејс, у супротном није сериализабилна.
Како сериализовати и десеријализовати објекат на Јави
Када сериализујемо објекат у Јави, користимо објецтОутпутСтреам-ову методу вритеОбјецт за уписивање објекта у датотеку.
За десериализацију објекта у Јави користимо методу ОбјецтИнпутСтреам реадОбјецт () за читање садржаја датотеке и читање у објекат.
У овом примеру, имамо класу Студент која имплементира интерфејс који се може серирати. То значи да можемо да сериализујемо или десериализујемо објекте класе Студент.
У главној методи Јава програма креирамо објект класе Студент. Затим креирамо ОбјецтОутпутСтреам који указује на ФилеОутпутСтреам објекат који заузврат показује на датотеку у коју треба да напишемо објект Студент. Тада позивамо методу вритеОбјецт () која записује објекат у датотеку.
Након успешног писања наведеног објекта у наведену датотеку, програм даје одговарајућу излазну поруку. Затим извршавамо десериализацију објекта преокретањем горе наведеног процеса. Прво креирамо ОбјецтОутпутСтреам објекат у којем читамо датотеку чији садржај треба да се прочита.
Затим користимо методу реадОбјецт () за читање садржаја и пребацивање на објект Студент. Затим исписујемо садржај предмета Студент.
Пример сериализације / десериализације
Следећи Јава програм приказује механизам сериализације / десериализације у Јави, као што је горе речено.
import java.io.*; import java.io.Serializable; //Class Student implements class Student implements Serializable{ int id; String name; public Student(int id, String name) { this.id = id; this.name = name; } } class Main{ public static void main(String args()){ try{ //Create the object of student class Student s1 =new Student(27,'Eddie'); //Write the object to the stream by creating a output stream FileOutputStream fout=new FileOutputStream('Eddie.txt'); ObjectOutputStream out=new ObjectOutputStream(fout); out.writeObject(s1); out.flush(); //close the stream out.close(); System.out.println('Object successfully written to the file'); //Create a stream to read the object ObjectInputStream in=new ObjectInputStream(new FileInputStream('Eddie.txt')); Student s=(Student)in.readObject(); //print the data of the deserialized object System.out.println('Student object: ' + s.id+' '+s.name); //close the stream in.close(); }catch(Exception e){System.out.println(e);} } }
Излаз:
Имајте на уму да након десериализације добијамо исти објекат који смо раније сериализовали када поново отворимо исту датотеку.
Јава привремена кључна реч
Прелазна кључна реч се користи да би члан података постао привремен, тј. Не желимо да је сериализујемо.
На пример, размотрите следећу класу Запослени. Овде имамо поље Ид запосленог заједно са осталим пољима. Сада ако одлучимо да поље Ид запосленог не сме бити сериализовано, онда га проглашавамо као „пролазно“.
Пример Јава програма дат је у наставку.
import java.io.*; class Employee implements Serializable{ transient int id; String name; public Employee(int id, String name) { this.id = id; this.name = name; } } class Main{ public static void main(String args()){ try{ //Create the object of Employee class Employee s1 =new Employee(27,'Eddie'); //Write the object to the stream by creating a output stream FileOutputStream fout=new FileOutputStream('Eddie.txt'); ObjectOutputStream out=new ObjectOutputStream(fout); out.writeObject(s1); out.flush(); //close the stream out.close(); System.out.println('Object successfully written to the file'); //Create a stream to read the object ObjectInputStream in=new ObjectInputStream(new FileInputStream('Eddie.txt')); Employee s=(Employee)in.readObject(); //print the data of the deserialized object System.out.println('Employee object: ' + s.id+' '+s.name); //close the stream in.close(); }catch(Exception e){System.out.println(e);} } }
Излаз:
У горенаведеном програму смо сериализовали објект Емплоиее. Али имајте на уму да је поље ид запосленика класе запосленик проглашено за „пролазно“. Сада да бисмо проверили сериализацију, ми десериализујемо објекат. Излаз приказује запослени објекат као „0 Еддие“. То значи да Ид запосленог није сачуван у датотеци.
Јава.ио.НотСериализаблеЕкцептион У Јави
Изузетак јава.ио.НотСериализаблеЕкцептион је изузетак који се баца када класа не испуњава услове за сериализацију. Класа која не примењује интерфејс који се може серирати постаје неподесна за сериализацију.
Доле наведени Јава програм приказује НотСериализаблеЕкцептион.
import java.io.*; class Employee { transient int id; String name; public Employee(int id, String name) { this.id = id; this.name = name; } } class Main{ public static void main(String args()){ try{ //Create the object of Employee class Employee s1 =new Employee(27,'Eddie'); //Write the object to the stream by creating a output stream FileOutputStream fout=new FileOutputStream('Eddie.txt'); ObjectOutputStream out=new ObjectOutputStream(fout); out.writeObject(s1); out.flush(); //close the stream out.close(); System.out.println('Object successfully written to the file'); }catch(Exception e){System.out.println(e);} } }
Излаз:
Као што се види из горњег програма, класа Емплоиее не примењује интерфејс који се може серирати. Стога, када покушавамо да сериализујемо објекат класе Емплоиее, баца се НотСериализаблеЕкцептион.
Цлонеабле Интерфаце Ин Јава
Клонирање предмета значи прављење копије предмета. Јава подржава клонирање објеката користећи „ Цлонеабле ' интерфејс. Клонибилни интерфејс је маркерски интерфејс и део је пакета јава.ланг.
Када класа имплементира интерфејс Цлонеабле, то подразумева да можемо клонирати објекте ове класе. Класа Објецт Јава садржи „ клон () ’Метода. Дакле, интерфејс Цлонеабле који имплементира одређена класа овлашћује методу цлоне () да прави копије инстанци класе.
Ако класа не имплементира Цлонеабле интерфејс и још увек позива методу цлоне (), онда је изузетак ЦлонеНотСуппортедЕкцептион баца Јава компајлер.
Класе које примењују интерфејс Цлонеабле треба да замене методу цлоне ().
Па, шта је клонирање објеката?
Клонирање објекта је поступак помоћу којег креирамо тачну копију објекта методом цлоне () класе Објецт. Да би се метода цлоне () надјачала и позвала, класа треба да примени интерфејс Цлонеабле.
Питања и одговори аналитичара за техничку подршку
Општа синтакса методе цлоне () дата је у наставку:
заштићен Клон објекта () баца ЦлонеНотСуппортедЕкцептион
Метода цлоне () креира тачну копију објекта са мање времена обраде од оног потребно за креирање новог објекта помоћу нове кључне речи.
Доле наведени Јава програм приказује употребу методе цлоне () и интерфејса Цлонеабле.
class Student implements Cloneable{ int rollno; String name; //class constructor Student(int rollno,String name){ this.rollno=rollno; this.name=name; } //clone method public Object clone()throws CloneNotSupportedException{ return super.clone(); } } class Main{ public static void main(String args()){ try{ Student s1=new Student(101,'Lissa'); //clone the s1 object Student s2=(Student)s1.clone(); System.out.println('Original Student object: ' + s1.rollno+' '+s1.name); System.out.println('Cloned Student object: ' + s2.rollno+' '+s2.name); }catch(CloneNotSupportedException c){} } }
Излаз:
У овом програму имамо класу Студент која примењује интерфејс Цлонеабле. Такође замењује методу цлоне () позивањем методе супер.цлоне (). У главној методи креирамо нови објект Студент, а затим позивамо методу цлоне () на овом објекту који враћа нови објект Студент.
Клонирај низ у Јави
Клонирање низова истражили смо у нашем водичу о Низовима. С обзиром да Јава низови подразумевано имплементирају интерфејс који се може клонирати, они не морају бити експлицитно имплементирани. Када се једнодимензионални низ клонира, генерише се дубинска копија низа. Када се клонира дводимензионални низ, тада се прави плитка копија.
Израда плитке копије подразумевано је понашање методе цлоне () у Јави. Али већину времена желимо дубоко клонирање. У дубоком клонирању правимо копију члана објекта по члана и креирамо клон који је независан од оригиналног објекта. Све промене које су тада извршене на клонираном објекту неће се одразити на оригиналном објекту.
Следећи Јава програм приказује клонирање једнодимензионалног низа.
class Main { public static void main(String args()) { //define an array int intArray() = {2,6,3,7,1,8}; //invoke clone () method on intArray int cloneArray() = intArray.clone(); //print the arrays. System.out.println('Original intArray:'); for (int i = 0; i Излаз:

Листа клонирања у Јави
Програм у наставку показује како се методом цлоне () клонира листа у Јави.
import java.util.ArrayList; import java.util.Arrays; import java.util.List; // MyList Class implementing cloneable class MyList implements Cloneable { String name1; String name2; // Constructor MyList(String name1, String name2) { this.name1 = name1; this.name2 = name2; } // To print the objects in the desired format @Override public String toString() { return 'Hello ' + name1 + ',' + name2 + '
' ; } // Overriding the clone method @Override protected MyList clone() { return new MyList(name1 , name2); } } class Main { public static void main(String() args) { // Create a list List original = Arrays.asList( new MyList('Sydney','Rose'), new MyList('Joe','Ian')); // Create an empty list List cloned_list = new ArrayList(); // Loop through the list and clone each element for (MyList temp : original) cloned_list.add(temp.clone()); System.out.print(cloned_list); } }
Излаз:

У горе наведеном програму видимо да смо креирали класу МиЛист која имплементира интерфејс Цлонеабле и унутар ове класе замењујемо методу цлоне () која нам помаже да клонирамо Листу. У главној методи креирамо листу елемената, а затим клонирамо сваки елемент листе превлачењем преко листе.
Често постављана питања
П # 1) Чему служи Маркер Интерфаце у Јави?
Одговор: Интерфејс маркера који је познат и као „таговани интерфејс“ означава класу и обавештава компајлер да ова класа може применити посебно понашање.
П # 2) Који су све Маркер интерфејси у Јави?
Одговор: Серијализовани, клонирани и даљински су интерфејси који су примери интерфејса маркера у Јави.
П # 3) Зашто је серијски могуће Маркер Интерфаце?
Одговор: Интерфејс који се може серирати нема никакве методе или променљиве члана. То је празан интерфејс који га класификује као Маркер Интерфаце.
П # 4) Да ли се може покренути Маркер Интерфаце?
Одговор: Не, руннабле није интерфејс маркера. Интерфејс који се може покренути није празан и пружа декларацију методе рун () унутар њега.
П # 5) Зашто треба да имплементирамо Цлонеабле интерфејс?
Одговор: Имплементацијом клонирајућег интерфејса за класу, указујемо да се објекти ове класе могу клонирати методом цлоне () класе Објецт. Ако класа која користи методу цлоне () не примењује интерфејс који се може клонирати, бациће се изузетак „ЦлонеНотСуппортедЕкцептион“.
Закључак
Овим упутством завршили смо расправу о Интерфејсима у Јави. Разговарали смо о концепту интерфејса, њиховој структури, дефиницији, употреби итд. Такође смо разговарали о неким важним интерфејсима у интерфејсима сличним Јава-у, Цомпаратор, Маркер итд.
У овом упутству смо разговарали о два примера интерфејса маркера, тј. Сериализацији и клонирању. Интерфејс који се може серирати користи се за задржавање објекта. Клонибилни интерфејс се користи за клонирање објеката класе. Оба ова интерфејса су сучеља маркера, тј. Празна су.
Али када их класа имплементира, они указују да компајлер може очекивати неко посебно понашање од класа које их имплементирају.
На пример, када класа имплементира интерфејс који се може серирати, тада можемо сериализовати или десериализовати објекте класе и сачувати / преузети њихово стање.
Класа која имплементира клонирани интерфејс указује на то да можемо клонирати објекте ове класе. Подразумевана имплементација методе цлоне () ствара плитку копију објекта док можемо надјачати методу цлоне () да бисмо створили дубинску копију.
=> Овде истражите комплетну серију Јава обуке
Препоручено читање
- Постављање интерфејса у Јави: Водич за постављање Јава са примерима
- ЛистИтератор сучеље у Јави са примерима
- Примена Јава-а: Стварање и извршавање Јава ЈАР датотеке
- И Јава - и њена примена и дефиниције
- Основе Јава-а: Јава синтакса, Јава Цласс и основни Јава концепти
- Јава Цласс Вс Објецт - Како се користе класа и објекти у Јави
- Јава виртуелна машина: како ЈВМ помаже у покретању Јава апликације
- Упоредни и упоредни интерфејси у Јави