คำนำ
ในฐานะนักพัฒนา Java เราสร้างวัตถุจำนวนมากทุกวัน แต่เรามักจะใช้ระบบการพึ่งพาการจัดการ (เช่นกรอบฤดูใบไม้ผลิ) เพื่อสร้างวัตถุเหล่านี้ ในความเป็นจริงมีวิธีอื่นในการสร้างวัตถุซึ่งฉันจะแนะนำรายละเอียดในบทความต่อไปนี้
1. ใช้คำหลักใหม่
นี่เป็นวิธีที่พบบ่อยที่สุดในการสร้างวัตถุและมันก็ง่ายมาก โดยการใช้วิธีนี้เราสามารถเรียกตัวสร้างใด ๆ ที่เราต้องโทร
พนักงาน EMP1 = พนักงานใหม่ (); 0: ใหม่ #19 // คลาส org/การเขียนโปรแกรม/mitra/การออกกำลังกาย/พนักงาน 3: DUP 4: Invokespecial #21 // วิธีการ org/การเขียนโปรแกรม/mitra/การออกกำลังกาย/พนักงาน "" :() v
2. ใช้วิธีการใหม่ของคลาสคลาส
นอกจากนี้เรายังสามารถใช้วิธีการ Newinstance ของคลาสคลาสเพื่อสร้างวัตถุ วิธีการใหม่นี้เรียกว่าตัวสร้างพารามิเตอร์ที่ไม่มีพารามิเตอร์เพื่อสร้างวัตถุ
เราสามารถสร้างวัตถุโดยใช้ newInstance () ด้วยวิธีต่อไปนี้:
พนักงาน EMP2 = (พนักงาน) class.forName ("org.programming.mitra.exercises.employee"). Newinstance ();หรือ
พนักงาน EMP2 = Employee.class.NewInstance (); 51: InvokeVirtual #70 // วิธี Java/Lang/class.NewInstance :() ljava/lang/object;
3. ใช้วิธีการใหม่ของคลาสคอนสตรัคเตอร์
คล้ายกับวิธีการ newInstance โดยใช้คลาสมีวิธีการฟังก์ชัน newInstance() ใน java.lang.reflect.Constructor คลาสที่สามารถใช้ในการสร้างวัตถุ ด้วยการใช้วิธี newInstance นี้เรายังสามารถเรียกตัวสร้างพารามิเตอร์และตัวสร้างส่วนตัว
Constructor <MARMATEE> Constructor = Employee.class.getConstructor (); พนักงาน emp3 = constructor.newinstance (); 111: invokevirtual #80 // วิธี java/lang/reflect/constructor.newinstance: (ljava/lang/lang;
วิธี newInstance() เหล่านี้ถือว่าเป็นภาพสะท้อนหมายถึงการสร้างวัตถุ ในความเป็นจริงวิธีการ newInstance() ของคลาสด้านในใช้วิธี newInstance() ของคลาสคอนสตรัคเตอร์ นี่คือเหตุผลที่ต้องการหลังและใช้เฟรมเวิร์กที่แตกต่างกันเช่น Spring, Hibernate, Struts ฯลฯ
4. ใช้วิธีการโคลน
ในความเป็นจริงเมื่อใดก็ตามที่เราเรียกวิธี clone เครื่องเสมือน Java จะสร้างวัตถุใหม่สำหรับเราและคัดลอกเนื้อหาของวัตถุก่อนหน้าลงในวัตถุใหม่นี้ การสร้างวัตถุโดยใช้วิธี clone ไม่เรียกตัวสร้างใด ๆ
ในการใช้วิธี clone() ในวัตถุเราจำเป็นต้องใช้ประเภท cloneable และกำหนดวิธีการโคลน
พนักงาน emp4 = (พนักงาน) emp3.clone (); 162: invokevirtual #87 // วิธี org/programming/mitra/fispises/explome.clone () ljava/lang/object;
5. ใช้ deserialization
เมื่อใดก็ตามที่เราทำให้เป็นอนุกรมและ deserialize วัตถุเครื่องเสมือน Java จะสร้างวัตถุแยกต่างหากสำหรับเรา ใน Deserialization เครื่องเสมือน Java ไม่ได้ใช้ตัวสร้างใด ๆ เพื่อสร้างวัตถุ
การทำให้เป็นอนุกรมวัตถุต้องการให้เราใช้อินเทอร์เฟซแบบอนุกรมในชั้นเรียน
ObjectInputStream ใน = New ObjectInputStream (ใหม่ FileInputStream ("data.obj")); พนักงาน EMP5 = (พนักงาน) in.readObject (); 261: invokeVirtual #118 // วิธี Java/io/objectInputStream.ReadObject :() LJAVA/LANG/LANG/LANG; อย่างที่เราเห็นในตัวอย่างรหัสไบต์ข้างต้นยกเว้นคนแรกที่ถูกแปลงเป็นฟังก์ชั่นใหม่และคำสั่ง invokespecial วิธีการทั้ง 4 วิธีจะถูกเรียกและแปลงเป็น invokevirtual
ตัวอย่าง
มาดูคลาส Employee ที่พร้อมสร้างวัตถุ:
พนักงานชั้นเรียนใช้ cloneable, serializable {ส่วนตัวคงที่สุดท้าย Long SerialVersionUid = 1L; ชื่อสตริงส่วนตัว; พนักงานสาธารณะ () {system.out.println ("ตัวสร้างพนักงานเรียกว่า ... "); } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } @Override สาธารณะ int hashCode () {สุดท้าย int prime = 31; int ผลลัพธ์ = 1; result = prime * result + ((name == null)? 0: name.hashCode ()); ผลการกลับมา; } @Override บูลีนสาธารณะเท่ากับ (Object obj) {ถ้า (this == obj) คืนค่าจริง; ถ้า (obj == null) ส่งคืนเท็จ; ถ้า (getClass ()! = obj.getClass ()) ส่งคืนเท็จ; พนักงานอื่น ๆ = (พนักงาน) OBJ; if (name == null) {ถ้า (อื่น ๆ name! = null) return false; } อื่นถ้า (! name.equals (อื่น ๆ . name)) ส่งคืน false; กลับมาจริง; } @Override สตริงสาธารณะ toString () {return "พนักงาน [name =" + name + "]"; } @Override วัตถุสาธารณะโคลน () {Object obj = null; ลอง {obj = super.clone (); } catch (clonenotsupportedException e) {e.printStackTrace (); } return obj; - ในโปรแกรม Java ต่อไปนี้เราใช้ 5 วิธีในการสร้างวัตถุ Employee
Public Class ObjectCreation {โมฆะคงที่สาธารณะหลัก (สตริง ... args) โยนข้อยกเว้น {// โดยใช้คำหลักใหม่พนักงาน EMP1 = พนักงานใหม่ (); emp1.setName ("Naresh"); System.out.println (emp1 + ", hashcode:" + emp1.hashcode ()); // โดยใช้ Newinstance () Method Employee Emp2 = (พนักงาน) class.forname ("org.programming.mitra.exercises.employee") .newinstance (); // หรือเราสามารถทำได้ // พนักงาน EMP2 = Employee.class.NewInstance (); EMP2.SetName ("Rishi"); System.out.println (emp2 + ", hashcode:" + emp2.hashcode ()); // โดยใช้วิธีการใหม่ของคอนสตรัคเตอร์คลาสใหม่ () คอนสตรัคเตอร์ <SPOTHERE> Constructor = Employee.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 ใน = new ObjectInputStream (ใหม่ FileInputStream ("data.obj")); พนักงาน EMP5 = (พนักงาน) in.readObject (); in.close (); EMP5.SetName ("Akash"); System.out.println (EMP5 + ", HashCode:" + EMP5.HASHCODE ()); -ผลลัพธ์ผลลัพธ์ของโปรแกรมนี้มีดังนี้:
ตัวสร้างพนักงานที่เรียกว่า ... พนักงาน [name = naresh], hashcode: -1968815046Employee Constructor ที่เรียกว่า ... พนักงาน [ชื่อ = Rishi], HashCode: 78970652Employee Constructor ที่เรียกว่า ... พนักงาน [ชื่อ = Yogesh] 2051657Employee [name = Akash], HashCode: 63313419
เนื้อหาข้างต้นมีวิธีการที่แตกต่างกันประมาณ 5 วิธีสำหรับการสร้างวัตถุใน Java ฉันหวังว่ามันจะเป็นประโยชน์สำหรับคุณที่จะเรียนรู้ Java ขอบคุณสำหรับการสนับสนุน Wulin.com