Sebagai bahasa pengaturcaraan berorientasikan objek, Java memerlukan titik masuk semasa melaksanakan program, dan titik masuk ini adalah kaedah utama. Tetapi kadang-kadang kita menghadapi situasi di mana kaedah utama tidak ditentukan, jadi bagaimana untuk menyelesaikannya?
1. Kaedah utama tidak ditakrifkan
Kaedah utama tidak ditakrifkan mungkin kerana kod telah diubah suai atau ada masalah mengimport kod orang lain. Pada masa ini kita boleh menggunakan refleksi untuk menanganinya.
1. Gunakan refleksi.
Refleksi ialah mekanisme asas dalam bahasa Java yang boleh memuatkan, mengendalikan dan menanya kelas dan antara muka semasa program sedang berjalan. Dengan refleksi, anda tidak perlu mengetahui semua kelas dan antara muka pada masa penyusunan. Mesin Maya Java (JVM) hanya perlu memuatkan kelas dan antara muka apabila program dijalankan. Oleh itu, mekanisme pantulan membolehkan program Java memuatkan dan mengendalikan kelas dan antara muka secara dinamik pada masa jalan.
Kod sampel adalah seperti berikut:
kelas awam NoMainClass {
public void sayHello() { System.out.println("Hello"); }
}
kelas awam Utama {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { Class<?> clazz = Class.forName("NoMainClass"); Object o = clazz.newInstance(); Method method = clazz.getMethod("sayHello"); method.invoke(o); }
}
Dalam kod ini, program memuatkan kelas secara dinamik pada masa jalanan dan menciptanya kaedah Contoh kelas secara dinamik memperoleh kaedah contoh ini dan memanggilnya. Ini adalah cara menggunakan mekanisme pantulan untuk memuatkan kelas secara dinamik tanpa kaedah utama dan melaksanakannya.
2. Gunakan sistem modul Java 9.
Apabila kita perlu menggunakan sistem modul Java 9 untuk menyelesaikan masalah tidak menentukan kaedah utama, kita perlu menentukan kelas utama dalam fail penerangan modul. Sebagai contoh, kita boleh mentakrifkan perkara berikut dalam fail module-info.java:
module my.module {
requires other.module; exports com.example; provides service with com.example.MyServiceImpl; main-class com.example.MyMain;
}
Dalam fail penerangan modul ini, kami menentukan titik masuk program dengan menentukan kelas utama. Ini membolehkan mesin maya Java mencari kelas yang mentakrifkan kaedah utama dan melaksanakannya. Ringkasan Walau bagaimanapun, perlu diingatkan bahawa pendekatan ini mungkin mempunyai risiko keselamatan, jadi kita harus mengelak daripada menggunakan kaedah ini sebanyak mungkin. Apabila menulis kod, anda harus mengikut spesifikasi bahasa Java dan menentukan titik masuk program yang jelas.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah bahawa kaedah utama tidak ditakrifkan di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!