مقدمة
كمطورين Java ، نقوم بإنشاء عدد كبير من الكائنات كل يوم ، لكننا نستخدم دائمًا أنظمة التبعية الإدارية (مثل أطر الربيع) لإنشاء هذه الكائنات. في الواقع ، هناك طرق أخرى لإنشاء كائنات ، والتي سأقدمها بالتفصيل في المقالة التالية.
1. استخدم كلمات رئيسية جديدة
هذه هي الطريقة الأكثر شيوعًا لإنشاء كائنات ، وهي أيضًا بسيطة للغاية. باستخدام هذه الطريقة ، يمكننا استدعاء أي مُنشئ نحتاج إلى الاتصال به.
الموظف EMP1 = موظف جديد () ؛ 0: جديد #19 // Class ORG/Programming/MITRA/تمارين/الموظف 3: DUP 4: InvokeSpecial #21 // Method Org/Programming/Mitra/Exercises/Employee. "" :() V.
2. استخدم طريقة NewInstance للفئة
يمكننا أيضًا استخدام طريقة NewInstance لفئة الفصل لإنشاء كائنات. تستدعي طريقة NewInstance مُنشئ المعلمة لإنشاء كائن.
يمكننا إنشاء كائنات باستخدام newinstance () بالطريقة التالية:
الموظف EMP2 = (الموظف) class.forname ("org.programming.mitra.exercises.employee"). newinstance () ؛أو
الموظف EMP2 = ameptory.class.newinstance () ؛ 51: InvokeVirtual #70 // الطريقة java/lang/class.newinstance :() ljava/lang/object ؛
3. استخدم طريقة NewInstance لفئة المنشئ
على غرار طريقة newInstance باستخدام فئة الفصل ، هناك طريقة وظيفة newInstance() في فئة java.lang.reflect.Constructor التي يمكن استخدامها لإنشاء كائنات. باستخدام طريقة newInstance هذه ، يمكننا أيضًا استدعاء المُنشئين المعلمة والمشاركات الخاصة.
مُنشئ <evelope> constructor = exearcee.class.getConstructor () ؛ الموظف EMP3 = مُنشئ.
تعتبر طرق newInstance() هذه وسائل انعكاس لإنشاء كائنات. في الواقع ، تستخدم طريقة newInstance() للفئة الداخلية طريقة newInstance() لفئة المنشئ. هذا هو السبب في أن الأخير يفضل ويستخدم أطر عمل مختلفة مثل Spring, Hibernate, Struts ، إلخ.
4. استخدم طريقة الاستنساخ
في الواقع ، كلما اتصلنا بالطريقة clone ، يقوم جهاز Java Virtual بإنشاء كائن جديد لنا ونسخ محتويات الكائن السابق في هذا الكائن الجديد. إنشاء كائن باستخدام طريقة clone لا يستدعي أي مُنشئين.
من أجل استخدام طريقة clone() في كائن ما ، نحتاج إلى تنفيذ النوع القابل للاستنساخ وتحديد طريقة الاستنساخ.
الموظف EMP4 = (الموظف) EMP3.Clone () ؛ 162: InvokeVirtual #87 // الطريقة org/programming/mitra/exrentisise/effecte.clone () ljava/lang/object ؛
5. استخدام هجر
كلما قمنا بتسلسل كائن وتجاهله ، يقوم الجهاز الظاهري Java بإنشاء كائن منفصل لنا. في التخلص من الجهاز ، لا يستخدم جهاز Java Virtual أي مُنشئ لإنشاء كائنات.
يتطلب تسلسل كائن منا تنفيذ واجهة قابلة للتسلسل في الفصل.
ObjectInputStream in = new ObjectInputStream (FileInputStream جديد ("data.obj")) ؛ الموظف EMP5 = (الموظف) in.ReadObject () ؛ 261: invokevirtual #118 // method java/io/objectInputStream.readObject :() ljava/lang/object ؛ كما نرى في مقتطف رمز البايت أعلاه ، باستثناء أول واحد يتم تحويله إلى وظيفة جديدة وتعليمات invokespecial ، يتم استدعاء جميع الطرق الأربعة وتحويلها إلى invokevirtual .
مثال
دعونا نلقي نظرة على فئة Employee جاهزة لإنشاء كائن:
موظف الفئة ينفذ استنساخ ، قابلة للتسلسل {private static static Final Long SerialVersionuid = 1L ؛ اسم السلسلة الخاصة ؛ الموظف العام () {system.out.println ("مُنشئ الموظف يسمى ...") ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } Override public int hashcode () {Final int prime = 31 ؛ int النتيجة = 1 ؛ النتيجة = prime * result + ((name == null)؟ 0: name.hashCode ()) ؛ نتيجة العودة } Override Public Boolean يساوي (كائن OBJ) {if (this == obj) إرجاع true ؛ إذا (OBJ == NULL) عودة خطأ ؛ if (getClass ()! = obj.getClass ()) return false ؛ الموظف الآخر = (الموظف) OBJ ؛ if (name == null) {if (other.name! = null) return false ؛ } آخر إذا (! name.equals (other.name)) إرجاع خطأ ؛ العودة صحيح. } Override public string toString () {return "الموظف [name =" + name + "]" ؛ } Override public Object Clone () {Object obj = null ؛ حاول {obj = super.clone () ؛ } catch (clonenotsupportedException e) {E.PrintStackTrace () ؛ } إرجاع OBJ ؛ }} في برنامج Java التالي ، نستخدم 5 طرق لإنشاء كائنات Employee .
الكائنات العامة للكائنات العامة {public static void main (string ... args) يلقي الاستثناء {// باستخدام موظف الكلمات الرئيسية الجديدة = موظف جديد () ؛ EMP1.SetName ("Naresh") ؛ system.out.println (emp1 + "، hashcode:" + emp1.hashCode ()) ؛ // باستخدام Class Class NewInstance () الموظف EMP2 = (الموظف) class.forname ("org.programming.mitra.exercises.employee") .NewInstance () ؛ // أو يمكننا ببساطة القيام بهذا // الموظف emp2 = exearcye.class.newinstance () ؛ EMP2.SetName ("Rishi") ؛ system.out.println (emp2 + "، hashcode:" + emp2.hashCode ()) ؛ // باستخدام مُنشئ طريقة NewInstance () من فئة المنشئ <evelope> constructor = exearcee.class.getConstructor () ؛ الموظف emp3 = constructor.newinstance () ؛ EMP3.SetName ("Yogesh") ؛ System.out.println (EMP3 + "، HashCode:" + EMP3.HashCode ()) ؛ // باستخدام clone () طريقة الموظف emp4 = (الموظف) EMP3.Clone () ؛ EMP4.SetName ("Atul") ؛ system.out.println (emp4 + "، hashcode:" + emp4.hashCode ()) ؛ // باستخدام deserialization // serialization ObjectOutputStream out = new ObjectOutputStream (fileOutputStream جديد ("data.obj")) ؛ Out.WriteObject (EMP4) ؛ out.close () ؛ // deserialization ObjectInputStream in = new ObjectInputStream (FileInputStream جديد ("data.obj")) ؛ الموظف EMP5 = (الموظف) in.ReadObject () ؛ in.close () ؛ EMP5.SetName ("Akash") ؛ System.out.println (emp5 + "، hashcode:" + emp5.hashCode ()) ؛ }}نتائج الإخراج لهذا البرنامج هي كما يلي:
مُنشئ الموظف يسمى ... الموظف [name = naresh] ، hashcode: -1968815046emmployee منشئ يسمى ... الموظف [name = rishi] ، hashcode: 78970652emmployee constructor يسمى ... efferene [name = yogesh] ، hashcode: -164129292792eeee. 2051657emmployee [name = Akash] ، Hashcode: 63313419
المحتوى أعلاه حوالي 5 طرق مختلفة لإنشاء كائنات في Java. آمل أن يكون من المفيد لك أن تتعلم جافا. شكرا لك على دعمك إلى wulin.com.