logo

כיצד ליצור אובייקט ב-Java

ה לְהִתְנַגֵד הוא אבן בניין בסיסית של an אופס שפה. ב Java , אנחנו לא יכולים להפעיל שום תוכנית בלי ליצור לְהִתְנַגֵד . יש דרכים שונות ליצור אובייקט ב-Java שנדון בסעיף זה, וגם נלמד כיצד ליצור אובייקט ב-Java.

Java מספק חמש דרכים ליצור אובייקט.

  • באמצעות חָדָשׁ מילת מפתח
  • באמצעות clone() שיטה
  • באמצעות newInstance() שיטת ה מעמד מעמד
  • באמצעות newInstance() שיטת ה בַּנַאִי מעמד
  • באמצעות דה-סריאליזציה

שימוש במילת מפתח חדשה

משתמש ב חָדָשׁ מילת מפתח היא הדרך הפופולרית ביותר ליצור אובייקט או מופע של המחלקה. כאשר אנו יוצרים מופע של המחלקה באמצעות מילת המפתח החדשה, הוא מקצה זיכרון (ערימה) עבור המפתח החדש שנוצר לְהִתְנַגֵד וגם מחזיר את התייחסות של החפץ הזה לזיכרון הזה. מילת המפתח החדשה משמשת גם ליצירת מערך. התחביר ליצירת אובייקט הוא:

 ClassName object = new ClassName(); 

בואו ניצור תוכנית שמשתמשת במילת מפתח חדשה כדי ליצור אובייקט.

CreateObjectExample1.java

 public class CreateObjectExample1 { void show() { System.out.println('Welcome to javaTpoint'); } public static void main(String[] args) { //creating an object using new keyword CreateObjectExample1 obj = new CreateObjectExample1(); //invoking method using the object obj.show(); } } 

תְפוּקָה:

 Welcome to javaTpoint 

על ידי שימוש במילת המפתח החדשה, נוכל גם להפעיל את הבנאי (ברירת מחדל או פרמטריזציה) של המחלקה.

CreateObjectExample2.java

לא null ב-js
 public class CreateObjectExample2 { //constructor of the class CreateObjectExample2() { System.out.println('Welcome to javaTpoint'); } public static void main(String[] args) { //creating an object using new keyword CreateObjectExample2 obj = new CreateObjectExample2(); } } 

תְפוּקָה:

 Welcome to javaTpoint 

שימוש בשיטת clone()

ה clone() שיטה היא השיטה של לְהִתְנַגֵד מעמד. זה יוצר עותק של אובייקט ומחזיר את אותו עותק. ה JVM יוצר אובייקט חדש כאשר מתודה clone() מופעלת. הוא מעתיק את כל התוכן של האובייקט שנוצר בעבר לאובייקט אחד חדש. שים לב שזה לא קורא לאף בנאי. עלינו ליישם את ניתן לשחזור ממשק תוך שימוש בשיטת clone() . השיטה זורקת CloneNotSupportedException חריג אם המחלקה של האובייקט אינה תומכת בממשק Cloneable. תת המחלקות שעוקפות את שיטת clone() יכולות לזרוק חריג אם לא ניתן לשכפל מופע.

הערה: השיטה יוצרת עותק של האובייקט ולא אובייקט חדש.

תחביר:

 protected Object clone() throws CloneNotSupportedException 

אנו משתמשים במשפט הבא כדי ליצור אובייקט חדש.

 ClassName newobject = (ClassName) oldobject.clone(); 

CreateObjectExample3.java

מספר ראשוני ב-java
 public class CreateObjectExample3 implements Cloneable { @Override protected Object clone() throws CloneNotSupportedException { //invokes the clone() method of the super class return super.clone(); } String str = 'New Object Created'; public static void main(String[] args) { //creating an object of the class CreateObjectExample3 obj1 = new CreateObjectExample3(); //try catch block to catch the exception thrown by the method try { //creating a new object of the obj1 suing the clone() method CreateObjectExample3 obj2 = (CreateObjectExample3) obj1.clone(); System.out.println(obj2.str); } catch (CloneNotSupportedException e) { e.printStackTrace(); } } } 

תְפוּקָה:

 New Object Created 

שימוש בשיטת newInstance() של Class Class

ה newInstance() השיטה של ​​המחלקה Class משמשת גם ליצירת אובייקט. זה קורא לבנאי ברירת המחדל כדי ליצור את האובייקט. זה מחזיר מופע חדש שנוצר של המחלקה המיוצגת על ידי האובייקט. הוא משתמש באופן פנימי בשיטת newInstance() של המחלקה Constructor.

תחביר:

 public T newInstance() throws InstantiationException, IllegalAccessException 

זה זורק את חריגה בלתי חוקית, InstantiationException, ExceptionInInitializerError חריגים.

אנו יכולים ליצור אובייקט בדרכים הבאות:

 ClassName object = ClassName.class.newInstance(); 

אוֹ

 ClassName object = (ClassName) Class.forName('fully qualified name of the class').newInstance(); 

בהצהרה לעיל, forName() היא שיטה סטטית של Class class. זה מנתח פרמטר className מסוג String. זה מחזיר את האובייקט עבור המחלקה עם השם המלא. זה טוען את המחלקה אבל לא יוצר שום אובייקט. זה זורק ClassNotFoundException אם לא ניתן לטעון את המחלקה ו שגיאת קישור אם ההצמדה נכשלת.

כדי ליצור את האובייקט, אנו משתמשים ב- newInstance() שיטת המחלקה Class. זה עובד רק כשאנחנו יודעים את שם המחלקה ולמחלקה יש בנאי ברירת מחדל ציבורי.

בתוכנית הבאה, יצרנו אובייקט חדש באמצעות שיטת newInstance() .

CreateObjectExample4.java

הוספת מחרוזות java
 public class CreateObjectExample4 { void show() { System.out.println('A new object created.'); } public static void main(String[] args) { try { //creating an instance of Class class Class cls = Class.forName('CreateObjectExample4'); //creates an instance of the class using the newInstance() method CreateObjectExample4 obj = (CreateObjectExample4) cls.newInstance(); //invoking the show() method obj.show(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } 

תְפוּקָה:

 A new object created. 

שימוש בשיטת newInstance() של המחלקה Constructor

זה דומה ל newInstance() שיטת ה מעמד מעמד. זה ידוע כדרך רפלקטיבית ליצור אובייקטים. השיטה מוגדרת ב- בַּנַאִי מחלקה שהיא המחלקה שלjava.lang.reflectחֲבִילָה. אנו יכולים גם לקרוא לבנאי בעל הפרמטרים ולקונסטרוקטור הפרטי באמצעות ה- newInstance() שיטה. היא מועדפת באופן נרחב בהשוואה לשיטת newInstance() של המחלקה Class.

תחביר:

 public T newInstance(Object... initargs) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException 

השיטה מנתחת מערך של אובייקטים כארגומנט. הערכים של טיפוסים פרימיטיביים עטופים בעטיפה אובייקט מהסוג המתאים. הוא מחזיר אובייקט חדש שנוצר על ידי קריאה לבנאי. זה זורק IllegalAccessException, IllegalArgumentException, InstantiationException, InvocationTargetException, ExceptionInInitializerError Exceptions .

אנו יכולים ליצור אובייקט בצורה הבאה:

 Constructor constructor = Employee.class.getConstructor(); Employee emp3 = constructor.newInstance(); 

בואו ניצור תוכנית שיוצרת אובייקט באמצעות שיטת newInstance() .

gzip עבור לינוקס

CreateObjectExample5.java

 import java.lang.reflect.*; public class CreateObjectExample5 { private String str; CreateObjectExample5() { } public void setName(String str) { this.str = str; } public static void main(String[] args) { try { Constructor constructor = CreateObjectExample5.class.getDeclaredConstructor(); CreateObjectExample5 r = constructor.newInstance(); r.setName('JavaTpoint'); System.out.println(r.str); } catch (Exception e) { e.printStackTrace(); } } } 

תְפוּקָה:

 JavaTpoint 

שימוש בסידריאליזציה

ב-Java, סדרה הוא תהליך המרת אובייקט לרצף של זרם בתים. התהליך ההפוך (זרם בתים לאובייקט) של הסידרה נקרא דה-סריאליזציה . ה-JVM יוצר אובייקט חדש כאשר אנו עושים סדרה או ביטול סדרה של אובייקט. זה לא משתמש בבנאי כדי ליצור אובייקט. תוך כדי שימוש בסידריאליזציה, ה ניתן להסדרה יש ליישם ממשק (ממשק סמן) בכיתה.

כיצד ליצור אובייקט ב-Java

סדרה: ה writeObject() שיטת ה ObjectOutputStream המחלקה משמשת ליצירת אובייקט בסידרה. הוא שולח את האובייקט לזרם הפלט.

תחביר:

 public final void writeObject(object x) throws IOException 

דה-סידריאליזציה: השיטה readObject() שֶׁל ObjectInputStream המחלקה משמשת לביטול סדרת אובייקט. זה מתייחס לאובייקטים מתוך זרם.

תחביר:

 public final Object readObject() throws IOException,ClassNotFoundException 

הערה: הפוך את הקובץ לסטטי או חולף אם איננו רוצים לכלול שדה כחלק מהאובייקט. זה לא ייכלל בתהליך ההסדרה.

בואו נבין את ההמשכה והסידריאליזציה באמצעות תוכנית.

המרת מחרוזת לאינטרגר

Employee.java

 import java.io.Serializable; public class Employee implements Serializable { int empid; String empname; public Empoyee(int empid, String empname) { this.empid = empid; this.empname = empname; } } 

יצרנו כיתה בשם עוֹבֵד שהמטרה שלו היא להיות מסודרת וסידריאליזציה.

סדרה של אובייקט Java:

בתוכנית הבאה, סידרנו אובייקט בדרגת Employee על ידי שימוש ב- writeObject() שיטה של ​​מחלקת ObjectOutputStream. מצב האובייקט נשמר ב- עובד.txt קוֹבֶץ.

SerializationExample.java

 import java.io.*; class SerializationExample { public static void main(String args[]) { Try { //Creating the object Employee emp = new Employee(198054,'Andrew'); //Creates a stream and writes the object FileOutputStream fout=new FileOutputStream('employee.txt'); ObjectOutputStream out=new ObjectOutputStream(employeeout); out.writeObject(emp); out.flush(); //closes the output stream out.close(); System.out.println('Successfully Created'); } catch(Exception e) { System.out.println(e); } } } 

תְפוּקָה:

 Successfully Created 

דה-סריאליזציה של אובייקט Java:

בתוכנית הבאה, אנו הולכים לבצע דה-סריאליזציה של אובייקט שסידרנו בתוכנית לעיל.

DeserializationExample.java

 import java.io.*; class DeserializationExample { public static void main(String args[]) { try { //Creating a stream to read the object ObjectInputStream in=new ObjectInputStream(new FileInputStream('employee.txt')); Employee e=(Employee)in.readObject(); //prints the data of the serialized object System.out.println(e.empid+' '+e.empname); //closing the input stream in.close(); } catch(Exception e) { System.out.println(e); } } } 

תְפוּקָה:

 198054 Andrew 

בחמש השיטות לעיל, שמנו לב שה- חָדָשׁ מילת מפתח ושניהם newInstance() שיטות משתמשות בבנאי כדי ליצור אובייקטים, בעוד שתי השיטות האחרות אינן משתמשות בבנאי.