Memiliki percakapan dengan rekan kerja yang lain hari ini.
Ada's jelas menggunakan konstruktor, tapi apa ada cara lain?
Ada empat cara yang berbeda untuk membuat objek dalam java:
A. Menggunakan baru
kata kunci
Ini adalah cara paling umum untuk membuat sebuah objek di jawa. Hampir 99% dari benda-benda yang dibuat dengan cara ini.
MyObject object = new MyObject();
B. Menggunakan Kelas.forName()
Jika kita tahu nama kelas & jika memiliki konstruktor default publik kita dapat membuat sebuah objek dengan cara ini.
MyObject object = (MyObject) Class.forName("subin.rnd.MyObject").newInstance();
C. Menggunakan clone()
Clone() dapat digunakan untuk membuat salinan dari suatu objek yang ada.
MyObject anotherObject = new MyObject();
MyObject object = (MyObject) anotherObject.clone();
D. Menggunakan objek deserialization
Objek deserialization ada tapi menciptakan sebuah objek dari bentuk serial.
ObjectInputStream inStream = new ObjectInputStream(anInputStream );
MyObject object = (MyObject) inStream.readObject();
Anda dapat membaca mereka dari di sini.
Ada berbagai cara:
Kelas.newInstance
.Konstruktor.newInstance
.Objek.clone
(tidak memanggil konstruktor).baru
untuk anda....
) metode call (no konstruktor untuk array).membuang null,
atau "".toCharArray()[0]
.baru
kata kunci juga.Dalam bahasa Jawa, satu-satunya cara untuk membuat sebuah objek dengan memanggil konstruktor, baik secara eksplisit atau secara implisit. Menggunakan hasil refleksi panggilan ke metode konstruktor, deserialization menggunakan refleksi untuk memanggil konstruktor, pabrik metode bungkus panggilan untuk konstruktor untuk abstrak yang sebenarnya konstruksi dan kloning sama dibungkus konstruktor panggilan.
Ada lima cara yang berbeda untuk membuat sebuah objek pada Java,
1. Menggunakan baru
kata kunci → konstruktor dipanggil
Employee emp1 = new Employee();
2. Menggunakan newInstance()
metode Kelas
→ konstruktor dipanggil
Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee")
.newInstance();
Hal ini juga dapat ditulis sebagai
Employee emp2 = Employee.class.newInstance();
3. Menggunakan newInstance()
metode Pembina
→ konstruktor dipanggil
Constructor<Employee> constructor = Employee.class.getConstructor();
Employee emp3 = constructor.newInstance();
4. Menggunakan clone ()
metode → tidak ada constructor panggilan
Employee emp4 = (Employee) emp3.clone();
5. Menggunakan deserialization → tidak ada constructor panggilan
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
Employee emp5 = (Employee) in.readObject();
Tiga metode baru
kata kunci dan kedua newInstance()
termasuk konstruktor panggilan tetapi kemudian dua klon dan deserialization metode membuat objek tanpa memanggil konstruktor.
Semua metode di atas telah berbeda bytecode yang terkait dengan mereka, Baca cara yang Berbeda untuk membuat objek dalam Java dengan Contoh. untuk contoh-contoh dan penjelasan yang lebih rinci misalnya bytecode konversi dari semua metode ini.
Namun seseorang dapat berpendapat bahwa menciptakan sebuah array atau string objek juga merupakan cara untuk menciptakan objek tetapi hal ini lebih spesifik untuk beberapa kelas saja dan ditangani langsung oleh JVM, sementara kita dapat membuat sebuah objek dari setiap kelas dengan menggunakan ini 5 cara.
Juga, anda dapat de-cerita bersambung data ke dalam suatu objek. Ini doesn't pergi melalui Konstruktor kelas !
UPDATED**** : Terima kasih Tom untuk menunjukkan bahwa dalam komentar anda ! Dan Michael juga bereksperimen.
Ia pergi melalui konstruktor kebanyakan berasal non-serializable superclass. Dan ketika kelas itu telah tidak ada tidak ada-args konstruktor, yang InvalidClassException dilemparkan pada de-serialisasi.
Silahkan lihat Tom's jawaban untuk perawatan lengkap dari semua kasus ;-) https://stackoverflow.com/questions/2103089/is-there-any-other-way-of-creating-an-object-without-using-new-keyword-in-java/2103578#2103578
Ada jenis objek, yang dapat't akan dibangun dengan normal contoh penciptaan mekanisme (memanggil konstruktor): Array. Array diciptakan dengan
A[] array = new A[len];
atau
A[] array = new A[] { value0, value1, value2 };
Sebagai Sean mengatakan dalam sebuah komentar, ini adalah sintaksis yang sama untuk memanggil konstruktor dan secara internal itu tidak lebih dari alokasi dan nol-inisialisasi (atau inisialisasi dengan konten eksplisit, dalam kasus kedua) blok memori, dengan beberapa header untuk menunjukkan jenis dan panjang.
Ketika lewat argumen untuk varargs-metode, array ini ada yang dibuat (dan diisi) secara implisit juga.
Cara keempat akan
A[] array = (A[]) Array.newInstance(A.class, len);
Tentu saja, kloning dan deserialisasi bekerja di sini, juga.
Ada banyak metode dalam Standar API yang membuat array, tetapi mereka semua sebenarnya adalah menggunakan salah satu (atau lebih) cara ini.
Cara lain jika kita menjadi lengkap.
anewarray
, multianewarray
, newarray
atau baru
. Ini dapat ditambahkan dengan menggunakan perpustakaan seperti ASM atau BCEL. Versi bcel dikirim dengan Oracle's Jawa. Sekali lagi ini doesn't memanggil konstruktor, tapi anda dapat memanggil constructor sebagai terpisah panggilan.new
(sehingga memanggil konstruktor)clazz.newInstance()
(yang lagi-lagi memanggil konstruktor). Atau dengan clazz.getConstructor(..).newInstance(..)
(lagi menggunakan konstruktor, tapi dengan demikian, anda dapat memilih salah satu)Untuk meringkas jawaban - salah satu cara utama - dengan memanggil konstruktor objek's class.
Update: jawaban Lain yang tercantum dua cara yang tidak melibatkan menggunakan constructor - deseralization dan kloning.
Refleksi juga akan melakukan pekerjaan untuk anda.
SomeClass anObj = SomeClass.class.newInstance();
cara lain untuk membuat sebuah instance baru dari sebuah kelas. Dalam hal ini, anda juga akan perlu untuk menangani pengecualian yang mungkin bisa dilempar.
Ada LIMA cara yang berbeda untuk membuat objek dalam Java:
Ini adalah cara paling umum untuk membuat sebuah objek di Jawa. Hampir 99% dari benda-benda yang dibuat dengan cara ini.
MyObject object = new MyObject();//normal way
ClassName ObgRef=ClassName.FactoryMethod();
Contoh:
RunTime rt=Runtime.getRunTime();//Static Factory Method
Dengan menggunakan clone()
, yang clone()
dapat digunakan untuk membuat salinan dari suatu objek yang ada.
MyObjectName anotherObject = new MyObjectName();
MyObjectName object = anotherObjectName.clone();//cloning Object
Jika kita tahu nama kelas & jika memiliki konstruktor default publik kita dapat membuat sebuah objek dengan cara ini.
MyObjectName object = (MyObjectNmae) Class.forName("PackageName.ClassName").newInstance();
Contoh:
String st=(String)Class.forName("java.lang.String").newInstance();
Objek deserialization ada tapi menciptakan sebuah objek dari bentuk serial.
ObjectInputStreamName inStream = new ObjectInputStreamName(anInputStream );
MyObjectName object = (MyObjectNmae) inStream.readObject();
Metode 1
Menggunakan kata kunci baru. Ini adalah cara paling umum untuk membuat sebuah objek di jawa. Hampir 99% dari benda-benda yang dibuat dengan cara ini.
Employee object = new Employee();
Metode 2
Menggunakan Kelas.forName(). Kelas.forName() memberikan kelas objek, yang berguna untuk refleksi. Metode ini objek yang telah didefinisikan oleh Jawa, bukan oleh programmer menulis kelas. Mereka adalah sama untuk setiap kelas. Panggilan newInstance() pada yang memberikan anda sebuah instance dari kelas tersebut (yaitu callingClass.forName("ExampleClass").newInstance() itu setara dengan panggilan baru ExampleClass()), di mana anda dapat memanggil metode yang mendefinisikan kelas, mengakses terlihat ladang dll.
Employee object2 = (Employee) Class.forName(NewEmployee).newInstance();
Kelas.forName() akan selalu menggunakan ClassLoader pemanggil, sedangkan ClassLoader.loadClass() dapat menentukan yang berbeda ClassLoader. Saya percaya bahwa Kelas.forName menginisialisasi dimuat kelas, sedangkan ClassLoader.loadClass() pendekatan tidak langsung (tidak diinisialisasi sampai itu digunakan untuk pertama kalinya).
Lain harus baca:
Jawa: Benang Negara Pengantar dengan Contoh Sederhana Jawa Enum Contoh
Metode 3
Menggunakan clone(). Clone() dapat digunakan untuk membuat salinan dari suatu objek yang ada.
Employee secondObject = new Employee();
Employee object3 = (Employee) secondObject.clone();
Metode 4
Menggunakan newInstance() metode
Object object4 = Employee.class.getClassLoader().loadClass(NewEmployee).newInstance();
Metode 5
Menggunakan Objek Deserialization. Objek Deserialization ada tapi menciptakan sebuah objek dari bentuk serial.
// Create Object5
// create a new file with an ObjectOutputStream
FileOutputStream out = new FileOutputStream("");
ObjectOutputStream oout = new ObjectOutputStream(out);
// write something in the file
oout.writeObject(object3);
oout.flush();
// create an ObjectInputStream for the file we created before
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("crunchify.txt"));
Employee object5 = (Employee) ois.readObject();
ada juga ClassLoader.loadClass(string) tapi ini tidak sering digunakan.
dan jika anda ingin menjadi total pengacara tentang hal itu, array teknis benda-benda karena array's .panjang properti. jadi inisialisasi array menciptakan sebuah objek.