Java ialah bahasa pengaturcaraan yang digunakan secara meluas dengan pelbagai aplikasi. Dalam proses pengaturcaraan di Java, anda mungkin menghadapi pelbagai pengecualian, termasuk pengecualian InstantiationException. Artikel ini akan memperkenalkan beberapa pengetahuan asas dan penyelesaian kepada pengecualian ini.
InstantiationException ialah pengecualian masa jalan di Java, yang biasanya berlaku apabila menggunakan mekanisme pantulan (Refleksi). Apabila kita menggunakan kaedah Class.newInstance() untuk mencipta contoh kelas, pengecualian ini akan dilemparkan jika kelas tidak mempunyai pembina lalai atau pembina lalai tidak boleh dijadikan instantiated.
Di Java, cara utama untuk menyelesaikan InstantiationException ialah menyediakan pembina lalai untuk kelas. Kerana apabila anda menggunakan kaedah Class.newInstance() untuk mencipta contoh kelas, sistem akan membuat instantiate objek kelas melalui pembina lalai. Jika tiada pembina lalai atau ia tidak boleh dijadikan instantiated, InstantiationException mungkin berlaku.
Berikut ialah beberapa situasi yang mungkin menyebabkan pengecualian ini dan penyelesaian yang sepadan:
2.1 Kelas tidak mempunyai pembina lalai
Jika kelas tidak mempunyai pembina lalai, maka gunakan kaedah Class.newInstance() untuk buat instance InstantiationException akan dilemparkan apabila ia berlaku. Dalam kes ini, kita perlu menyediakan pembina lalai untuk kelas.
Kod sampel adalah seperti berikut:
public class MyClass { // My class doesn't have default constructor. public MyClass(int someParam) { // Constructor with parameter. // ... } } public class Main { public static void main(String[] args) { try { Class<?> clazz = MyClass.class; clazz.newInstance(); // causes InstantiationException } catch (Exception e) { e.printStackTrace(); } } }
Dalam contoh ini, kami mencipta kelas MyClass dan mentakrifkan pembina dengan parameter di dalamnya. Memandangkan kelas ini tidak mempunyai pembina lalai, InstantiationException akan dilemparkan apabila kaedah Class.newInstance() dipanggil.
Untuk menyelesaikan masalah ini, kami perlu menyediakan pembina lalai untuk kelas MyClass:
public class MyClass { // My class now has a default constructor. public MyClass() { // Default constructor. // ... } public MyClass(int someParam) { // Constructor with parameter. // ... } }
Dalam kod yang diubah suai ini, kami telah menambah pembina lalai untuk kelas MyClass. Dengan cara ini, apabila kita mencipta tika baharu kelas menggunakan kaedah Class.newInstance(), kita boleh membuat instantiat dengan jayanya.
2.2 Pembina lalai tidak boleh instantiated
Kadangkala kelas mungkin mengandungi pembina lalai, tetapi jika pembina tidak boleh membuat instantiate objek kelas, InstantiationException juga akan dilemparkan. Dalam kes ini kita perlu memeriksa apa yang dilakukan dalam pembina lalai dan mencari masalahnya.
Sebagai contoh, berikut ialah kelas yang mengandungi pembina lalai:
public class MyClass { public MyClass() { throw new NullPointerException(); } }
Dalam kod contoh ini, pembina lalai kelas MyClass membuang pengecualian penuding nol. Jika kita cuba membuat instantiate objek kelas ini menggunakan kaedah Class.newInstance(), kita akan melihat InstantiationException.
Untuk menyelesaikan masalah ini, kita perlu membetulkan pembina lalai kelas MyClass. Berikut ialah kod yang diubah suai:
public class MyClass { public MyClass() { // Initialize the class normally. } }
Dalam kod yang diubah suai ini, kami telah mengalih keluar pengecualian penuding nol dalam pembina. Dengan cara ini, InstantiationException tidak akan berlaku lagi apabila menggunakan kaedah Class.newInstance() untuk membuat instantiate objek kelas ini.
InstantiationException ialah pengecualian masa jalan dalam Java yang biasanya berlaku apabila menggunakan mekanisme pantulan. Ia mungkin disebabkan oleh kelas yang tidak mempunyai pembina lalai atau pembina lalai gagal untuk dijadikan instantiated. Untuk menyelesaikan pengecualian ini, kita perlu menyediakan pembina lalai untuk kelas dan memastikan bahawa pembina boleh membuat instantiate objek kelas dengan betul.
Atas ialah kandungan terperinci Penyelesaian kepada pengecualian InstantiationException di Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!