marker interface java
Цей підручник пояснює, що таке інтерфейс маркера в Java. Він також охоплює десеріалізацію та клонування серіалізації в Java із прикладами коду:
як відкрити .jar файли -
Ми обговоримо останню тему в розділі Інтерфейси, тобто Інтерфейс маркерів на Java.
Після того, як ми закінчимо з інтерфейсом маркера, ми обговоримо два приклади, тобто інтерфейс, що серіалізується та клонується в Java. Почнемо з інтерфейсу Marker.
=> Завітайте сюди, щоб вивчити Java з нуля
Що ви дізнаєтесь:
- Інтерфейс маркера в Java
- Серіалізація в Java
- Серіалізований інтерфейс Java
- Клонуючий інтерфейс в Java
- Висновок
Інтерфейс маркера в Java
Інтерфейс маркера в Java - це порожній інтерфейс, який не має полів або методів. Цей інтерфейс маркера повідомляє компілятору, що об’єкти класу, що реалізують інтерфейс маркера, різні і що до них слід поводитися по-різному.
Кожен інтерфейс маркера в Java вказує, що він представляє щось особливе для JVM або компілятора.
У Java ми маємо три інтерфейси, які є інтерфейсами Marker, як показано нижче:
# 1) Серійний інтерфейс: Серіалізація - це маркерний інтерфейс, присутній у пакеті java.io. За допомогою цього інтерфейсу ми можемо серіалізувати об'єкти, тобто зберегти стан об'єкта у файл.
# 2) Клонний інтерфейс: Клонований інтерфейс є частиною пакету java.lang і дозволяє клонувати об'єкти.
# 3) Віддалений інтерфейс: Віддалений інтерфейс є частиною пакету java.RMI, і ми використовуємо цей інтерфейс для створення додатків RMI. Цей інтерфейс в основному має справу з віддаленими об'єктами.
У цьому підручнику ми обговоримо інтерфейс, який можна серіалізувати та клонувати. Про віддалений інтерфейс поговоримо, коли ми перейдемо до RMI на Java.
Серіалізація в Java
Перш ніж ми вдамось до деталей інтерфейсу, який можна серіалізувати в Java, давайте розберемося в процесі серіалізації, а також десеріалізації в Java.
Серіалізацію можна визначити як процес, за допомогою якого ми перетворюємо стан об’єкта в його еквівалентний байтовий потік для збереження об’єкта в пам’яті у файлі або зберігаються об'єкта.
Коли ми хочемо отримати об’єкт із збереженого стану та отримати доступ до його вмісту, нам доведеться перетворити потік байтів назад у власне об’єкт Java, і цей процес називається десериалізацією.
Таким чином, може бути багато випадків, коли нам потрібно серіалізувати / десеріалізувати об’єкти Java протягом усього часу роботи програми Java.
Процес серіалізації / десеріалізації показаний нижче:
Як показано вище, серіалізація перетворює об'єкт на потік. Десеріалізація перетворює байтовий потік назад в об'єкт Java.
Весь механізм серіалізації та десериалізації не залежить від платформи. Це означає, що ми можемо серіалізувати об’єкт на одній платформі, а потім десеріалізувати його на іншій платформі.
Коли ми говоримо, що ми серіалізували об'єкт Java, це означає, що ми викликали метод ObjectOutputStream writeObject (), щоб записати об'єкт у файл.
public final void writeObect (Object obj) кидає IOException
Подібним чином, у випадку десериалізації, ми викликаємо метод ObjectInputStream :: readObject () для зчитування даних із файлу, що зберігав об'єкт.
public final Object readObject () кидає IOException, ClassNotFoundException
Серіалізований інтерфейс Java
Java надає інтерфейс із назвою „серіалізується”, за допомогою якого ми можемо реалізувати серіалізацію та десеріалізацію в Java.
Серіалізований інтерфейс є частиною пакету java.io. Це приклад інтерфейсу маркера, про який ми вже говорили вище та0, який не має методів або членів. Інтерфейс, який можна серіалізувати, «позначає» класи Java так, що об’єкти цих класів отримують можливість зберігати себе.
Отже, клас, об’єкт якого нам потрібно зберігати, повинен реалізувати інтерфейс, що серіалізується. Тоді об’єкт цього класу (реалізуючи інтерфейс, що серіалізується) використовуватиме методи writeObject () та readObject () відповідно для серіалізації та десеріалізації об’єкта класу.
Зверніть увагу, що всі класи обгортки та клас String реалізують java.io.Serializable за замовчуванням.
Ми повинні виконати наступну умову для успішної серіалізації об’єкта:
- Клас, об'єкти якого серіалізовані, повинен реалізувати інтерфейс java.io.Serializable.
- Усі поля-члени класу мають бути серіалізуються. Якщо певне поле не можна серіалізувати, тоді ми повинні позначити його як перехідне.
І навпаки, клас можна серіалізувати лише в тому випадку, якщо він реалізує інтерфейс java.io.Serializable, інакше його не можна серіалізувати.
Як серіалізувати та десеріалізувати об'єкт на Java
Коли ми серіалізуємо об’єкт у Java, ми використовуємо метод writeObject objectOutputStream для запису об’єкта у файл.
Для десеріалізації об’єкта в Java ми використовуємо метод readObject () ObjectInputStream для зчитування вмісту файлу та зчитування його в об’єкт.
У цьому прикладі у нас є клас Student, який реалізує інтерфейс Serializable. Це означає, що ми можемо серіалізувати або десеріалізувати об’єкти класу Student.
В основному методі програми Java ми створюємо об’єкт класу Student. Потім ми створюємо ObjectOutputStream, який вказує на об'єкт FileOutputStream, який, у свою чергу, вказує на файл, в який нам потрібно записати об'єкт Student. Потім ми викликаємо метод writeObject (), який записує об’єкт у файл.
Після успішного запису зазначеного об'єкта у вказаний файл програма видає відповідне вихідне повідомлення. Потім ми десеріалізуємо об’єкт, змінивши вищезазначений процес. Спочатку ми створюємо об’єкт ObjectOutputStream, в якому читаємо файл, вміст якого слід прочитати.
Потім ми використовуємо метод readObject (), щоб прочитати вміст і передати його об’єкту Student. Потім ми друкуємо вміст об’єкта Student.
Приклад серіалізації / десеріалізації
Наступна програма Java показує механізм серіалізації / десеріалізації в Java, як обговорювалося вище.
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);} } }
Вихід:
Зауважте, що після десеріалізації ми отримуємо той самий об’єкт, який ми вже серіалізували раніше, коли ми знову відкриваємо той самий файл.
автоматизований засіб тестування веб-додатків
Перехідне ключове слово Java
Перехідне ключове слово використовується для переходу члена даних, тобто ми не хочемо його серіалізувати.
Наприклад, розглянемо наступний клас Співробітник. Тут ми маємо поле Id працівника разом з іншими полями. Тепер, якщо ми вирішимо, що поле Ідентифікатор працівника не слід серіалізувати, тоді ми оголошуємо це як «перехідне».
Приклад програми Java наведено нижче.
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);} } }
Вихід:
У наведеній вище програмі ми серіалізували об’єкт Employee. Але зауважте, що поле ідентифікатора Employee класу Employee оголошено «тимчасовим». Тепер, щоб перевірити серіалізацію, ми десериалізуємо об’єкт. Результат показує об’єкт Employee як «0 Eddie». Це означає, що ідентифікатор працівника не було збережено у файлі.
Java.io.NotSerializableException У Java
Виняток java.io.NotSerializableException - це виняток, який видається, коли клас не має права на серіалізацію. Клас, який не реалізує серіалізований інтерфейс, стає непридатним для серіалізації.
Наведена нижче програма Java демонструє NotSerializableException.
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);} } }
Вихід:
Як видно з наведеної програми, клас Employee не реалізує інтерфейс, що серіалізується. Отже, коли ми намагаємося серіалізувати об’єкт класу Employee, викидається NotSerializableException.
Клонуючий інтерфейс в Java
Клонування об’єктів означає копіювання об’єктів. Java підтримує клонування об'єктів за допомогою Клонуючий ”Інтерфейс. Клонований інтерфейс є інтерфейсом маркера і є частиною пакету java.lang.
Коли клас реалізує інтерфейс Cloneable, це означає, що ми можемо клонувати об'єкти цього класу. Клас Object Java містить ' клон () ’. Отже, інтерфейс Cloneable, реалізований певним класом, уповноважує метод clone () робити копії екземплярів класу.
Якщо клас не реалізує інтерфейс Cloneable і все ще викликає метод clone (), то це виняток CloneNotSupportedException викидається компілятором Java.
Класи, що реалізують інтерфейс Cloneable, повинні замінити метод clone ().
Отже, що таке клонування об’єктів?
Клонування об'єкта - це процес, за допомогою якого ми створюємо точну копію об'єкта, використовуючи метод clone () класу Object. Щоб метод clone () був замінений і викликаний, клас повинен реалізувати інтерфейс Cloneable.
Загальний синтаксис методу clone () наведено нижче:
захищений Клон об'єкта () кидає CloneNotSupportedException
Метод clone () створює точну копію об'єкта з меншим часом обробки, ніж час, необхідний для створення нового об'єкта за допомогою нового ключового слова.
Наведена нижче програма Java демонструє використання методу clone () та інтерфейсу Cloneable.
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){} } }
Вихід:
У цій програмі у нас є клас Student, який реалізує інтерфейс Cloneable. Він також замінює метод clone (), викликаючи метод super.clone (). В основному методі ми створюємо новий об'єкт Student, а потім викликаємо метод clone () для цього об'єкта, який повертає новий об'єкт Student.
Клонувати масив в Java
Ми досліджували клонування масивів у нашому навчальному посібнику з масивів. Оскільки масиви Java за замовчуванням реалізують інтерфейс Cloneable, їх не потрібно явно реалізовувати. Коли клонується одновимірний масив, створюється глибока копія масиву. Коли клонується двовимірний масив, робиться неглибока копія.
Створення неглибокої копії - це поведінка методу clone () у Java за замовчуванням. Але більшу частину часу ми прагнемо глибокого клонування. При глибокому клонуванні ми робимо копію елемента об’єкта за членом і створюємо клон, який не залежить від вихідного об’єкта. Будь-які зміни, внесені в об'єкт клонування, не відображатимуться в оригінальному об'єкті.
Наступна програма Java демонструє клонування одновимірного масиву.
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 Вихід:

Список клонування в Java
У наведеній нижче програмі показано, як використовувати метод clone () для клонування списку на Java.
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); } }
Вихід:

У наведеній вище програмі ми бачимо, що ми створили клас MyList, який реалізує інтерфейс Cloneable, і всередині цього класу ми замінюємо метод clone (), який допомагає нам клонувати Список. В основному методі ми створюємо список елементів, а потім клонуємо кожен елемент списку, перебираючи список.
Часті запитання
Q # 1) Для чого використовується інтерфейс маркера в Java?
Відповідь: Інтерфейс маркера, який також відомий як 'тегований інтерфейс', позначає клас і повідомляє компілятору, що цей клас може реалізувати особливу поведінку.
Q # 2) Які всі інтерфейси маркера в Java?
Відповідь: Серіалізований, клонуючий та віддалений - це інтерфейси, які є прикладами маркерних інтерфейсів у Java.
Q # 3) Чому серіалізується маркерний інтерфейс?
Відповідь: Інтерфейс, що серіалізується, не має жодних методів або змінних-членів. Це порожній інтерфейс, який класифікує його як маркерний інтерфейс.
Q # 4) Чи можна запустити маркерний інтерфейс?
Відповідь: Ні, runnable - це не інтерфейс маркера. Інтерфейс, який можна запустити, не порожній, і він забезпечує декларацію методу run () всередині нього.
Q # 5) Чому нам потрібно реалізовувати інтерфейс Cloneable?
Відповідь: Реалізуючи клонований інтерфейс для класу, ми вказуємо, що об’єкти цього класу можна клонувати за допомогою методу clone () класу Object. Якщо клас, що використовує метод clone (), не реалізує клонований інтерфейс, виникає виняток „CloneNotSupportedException“.
Висновок
Цим підручником ми завершили обговорення інтерфейсів у Java. Ми обговорили концепцію інтерфейсів, їх структуру, визначення, використання тощо. Ми також обговорили деякі важливі інтерфейси в Java-подібних інтерфейсах Comparable, Comparator, Marker тощо.
У цьому підручнику ми обговорили два приклади інтерфейсів маркерів, тобто серіалізується та клонується. Інтерфейс, який можна серіалізувати, використовується для збереження об’єкта. Клонований інтерфейс використовується для клонування об’єктів класу. Обидва ці інтерфейси є інтерфейсами маркерів, тобто вони порожні.
Але коли клас реалізує їх, тоді вони вказують на те, що компілятор може очікувати якоїсь особливої поведінки від класів, що їх реалізують.
Наприклад, коли клас реалізує серіалізований інтерфейс, тоді ми можемо серіалізувати або десеріалізувати об'єкти класу та зберігати / отримувати їх стан.
як використовувати stringstream c ++ - -
Клас, що реалізує клонований інтерфейс, вказує на те, що ми можемо клонувати об'єкти цього класу. Реалізація за замовчуванням методу clone () створює поверхневу копію об’єкта, тоді як ми можемо замінити метод clone () для створення глибокої копії.
=> Ознайомтесь із повною серією навчальних програм Java тут
Рекомендована література
- Встановити інтерфейс у Java: Підручник із набору Java з прикладами
- Інтерфейс ListIterator в Java з прикладами
- Розгортання Java: Створення та виконання файлу JAR Java
- І Java - і її реалізація та визначення
- Основи Java: Синтаксис Java, клас Java та основні концепції Java
- Java Class Vs Object - Як використовувати клас і об'єкт в Java
- Віртуальна машина Java: як JVM допомагає у запуску програми Java
- Порівнянні та порівняльні інтерфейси в Java