Memahami Perbezaan antara "Class.forName()" dan "Class.forName().newInstance()": Penjelasan Komprehensif
Bahasa Java menyediakan beberapa kaedah untuk membuat instantiating kelas. Dua kaedah yang biasa digunakan ialah "Class.forName()" dan "Class.forName().newInstance()". Walaupun mereka berkongsi persamaan, terdapat perbezaan yang ketara antara kefungsian mereka.
Class.forName()
Kaedah "Class.forName()" menggunakan kaedah yang berkelayakan sepenuhnya nama kelas sebagai hujah dan mengembalikan objek "Kelas" yang mewakili kelas itu. Objek ini menyediakan metadata tentang kelas, termasuk maklumat tentang medan, kaedah dan pembinanya. Walau bagaimanapun, ia sebenarnya tidak mencipta tika kelas.
Class.forName().newInstance()
Sebaliknya, "Class.forName(). newInstance()" mengambil objek "Class" yang dikembalikan oleh "Class.forName()" dan cuba mencipta contoh baharu kelas yang sepadan menggunakan pembina lalai. Jika berjaya, ia mengembalikan rujukan kepada objek yang baru dibuat. Di sini terletak perbezaan utama antara kedua-dua kaedah: "Class.forName()" hanya mengembalikan objek "Class", manakala "Class.forName().newInstance()" mencipta contoh sebenar.
Contoh:
Pertimbangkan kod Java berikut:
package com.example; public class DemoClass { public DemoClass() { System.out.println("DemoClass instantiated"); } public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { // Get the Class object Class clazz = Class.forName("com.example.DemoClass"); // Create an instance DemoClass instance = (DemoClass) clazz.newInstance(); } }
Apabila kod ini dilaksanakan, "Class.forName("com.example.DemoClass")" mengembalikan " Kelas" objek yang dikaitkan dengan kelas "DemoClass". Kemudian, "clazz.newInstance()" mencipta tika baharu kelas "DemoClass", memanggil pembina lalainya, yang mencetak "DemoClass instantiated."
Pemuatan Kelas Dinamik:
Satu kelebihan utama "Class.forName()" ialah keupayaannya untuk memuatkan kelas secara dinamik pada masa jalan. Katakan aplikasi anda perlu membuat instantiate kelas berdasarkan input atau konfigurasi pengguna. Dalam kes itu, anda boleh menggunakan "Class.forName()" untuk memuatkan kelas itu secara dinamik dan mencipta contoh tanpa pengekodan keras nama kelas.
Kesimpulan:
Ringkasnya, perbezaan antara "Class.forName()" dan "Class.forName().newInstance()" terletak pada tujuannya. "Class.forName()" mengembalikan objek "Class" yang menyediakan metadata tentang kelas. Sebaliknya, "Class.forName().newInstance()" mencipta tika baharu kelas menggunakan pembina lalai, serupa dengan pengendali "baru" tradisional.
Atas ialah kandungan terperinci Apakah perbezaan antara 'Class.forName()' dan 'Class.forName().newInstance()' dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!