logo

שיטת מפעיל חדש לעומת newInstance() ב-Java

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

הבה נדון ב מפעיל חדש .  ב-Java יצירת אובייקט מתרחשת ב-3 שלבים כמפורט: מופע אובייקט ואתחול אובייקט ו הזמנת בנאי .

Datatype   variable;   

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

Datatype   object   = new Constructor();

דוּגמָה:

Java
// Java Program to Illustrate new Operator // Importing required classes  import java.util.*; // Main class class GFG {  // Main drive method  public static void main(String[] args)  {  // List   al;  // Ny now al is just a variable  // Now creating object using new operator  List<Integer> al = new ArrayList<>();  // Adding elements to above List  al.add(1);  al.add(4);  al.add(3);  // Printing elements of List  System.out.print(al);  } } 

תְפוּקָה
[1 4 3]

פֶּתֶק: אנחנו יכולים להשתמש בו גם עם בנאי שבו רצינו לקרוא לאובייקט לא למשתנים.

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

דוּגמָה:

Java
// Java Program to Demonstrate Working of newInstance() // Method present inside java.lang.Class // Class 1 // Class 2 class A {  int a; } class B {  int b; } // Class 3 // Main class public class GFG {  // Method 1  // To create an instance of class whose name is  // passed as a string 'c'.  public static void fun(String c)  throws InstantiationException  IllegalAccessException  ClassNotFoundException  {  // Creating an object of type 'c'  Object obj = Class.forName(c).newInstance();  // Printing the type of object created  System.out.println('Object created for class:'  + obj.getClass().getName());  }  // Method 2  // Main driver method  public static void main(String[] args)  throws InstantiationException  IllegalAccessException  ClassNotFoundException  {  // Calling above method over 'A'  fun('A');  } } 

תְפוּקָה:

שיטת מפעיל חדש לעומת newInstance() ב-Java

הסבר פלט: forName() שִׁיטָה מחזיר את הכיתה' מַחלָקָה' אובייקט אליו אנו קוראים newInstance() שיטה שתחזיר את האובייקט של אותה מחלקה שאנו מעבירים כארגומנט שורת פקודה. 

  • אם הכיתה שעברה לא קיימת אז ClassNotFoundException תתרחש. 
  • InstantionExceptionיתרחש אם המחלקה שעברה אינה מכילה את בנאי ברירת המחדל as newInstance() השיטה קוראת באופן פנימי לבנאי ברירת המחדל של המחלקה המסוימת הזו. UnlegalAccessExceptionיתרחש אם אין לנו גישה להגדרה של הגדרת המחלקה שצוינה.

מאמר קשור: השתקפות בג'אווה