Kata pengantar
Kami sangat akrab dengan fungsi utama di Java. Saya percaya bahwa setiap orang yang telah mempelajari bahasa Java dapat dengan terampil menulis fungsi masuk dari program ini. Namun, untuk mengapa fungsi utama ditulis dengan cara ini, apa arti masing -masing kata kunci? Mungkin tidak semua orang dapat dengan mudah menjawabnya. Saya juga mengalami masalah ini selama studi saya. Dengan mencari informasi secara online dan menambahkan latihan saya sendiri, saya akhirnya mendapat beberapa pengalaman. Saya tidak berani menyimpannya dan menuliskannya untuk membagikannya kepada semua orang.
Metode utama () di java
Mesin virtual Java menemukan program berjalan yang perlu dimulai melalui metode utama, dan memeriksa apakah kelas di mana fungsi utama berada dimuat oleh mesin virtual Java. Jika tidak dimuat, maka muat kelas dan muat semua kelas terkait. Oleh karena itu, ketika program sedang berjalan, metode pertama untuk dieksekusi adalah metode main() . Biasanya, jika Anda ingin menjalankan metode kelas, Anda harus terlebih dahulu membuat objek kelas ini, dan kemudian lulus " Nama Objek. Metode nama () ", Tetapi karena utama adalah titik masuk program, objek belum dipakai pada saat ini, metode utama dinyatakan statis, sehingga metode ini dapat dipanggil langsung melalui" nama kelas. Metode nama () ".
Sebelum melihat metode utama () di Java, mari kita lihat aplikasi Java paling sederhana HelloWorld. Saya akan menggunakan contoh ini untuk menggambarkan misteri metode main() di kelas Java. Kode program ini adalah sebagai berikut:
/ *** Penjelasan terperinci tentang metode utama () di java*/ kelas publik HelloWorld {public static void main (string args []) {System.out.println ("Hello World!"); }}1. Mari kita bicara tentang kategori ini terlebih dahulu:
Ada metode main() di kelas HelloWorld, yang berarti bahwa ini adalah aplikasi Java yang dimulai dan berjalan langsung melalui JVM.
Karena ini adalah kelas, Java memungkinkan kelas untuk tidak tunduk pada kendala kata kunci publik. Tentu saja, definisi kelas hanya dapat dibatasi pada kata kunci publik atau tidak terbatas (default).
2. Mari kita bicara tentang metode utama ()
Metode main() dinyatakan sebagai: public static void main(String args[]) . Itu harus didefinisikan seperti ini, ini adalah spesifikasi Java.
Mengapa didefinisikan seperti ini? Ini ada hubungannya dengan pengoperasian JVM.
Ketika ada metode main() di kelas, mengeksekusi perintah "nama kelas java" akan memulai mesin virtual untuk menjalankan metode utama di kelas.
Karena JVM pertama -tama akan memanggil metode utama saat menjalankan aplikasi Java ini. Saat menelepon, objek kelas ini tidak dipakai, tetapi dipanggil langsung melalui nama kelas, sehingga perlu dibatasi pada statis publik.
Untuk metode utama di Java, JVM memiliki batasan dan tidak dapat memiliki nilai pengembalian, sehingga tipe nilai pengembalian batal.
Ada juga parameter input dalam metode utama, yang merupakan tipe string [], yang juga merupakan spesifikasi Java. Metode main() harus memiliki parameter entri, dan detail kelas harus String[] . Adapun nama string array, ini dapat diatur sendiri. Menurut kebiasaan, nama array string ini umumnya konsisten dengan nama parameter Mian dalam contoh spesifikasi Sun Java, dan dinamai Args.
Oleh karena itu, definisi metode main() harus: " public static void main(String 字符串数组参数名[]) ".
3. metode utama () dapat melempar pengecualian
Oleh karena itu, pengecualian dapat dilemparkan dalam metode main() , dan pengecualian juga dapat dinyatakan pada metode main() .
Misalnya, berikut ini benar:
testmain kelas publik {public static void main (string [] args) melempar Exception {System.out.println ("Hahahahahahahaha"); Lemparkan pengecualian baru (""); }}Running result: hahahahaha Exception in thread "main" java.lang.Exception: at maintainest.TestMain.main(TestMain.java:11) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.delegatingmethodaccessorImpl.invoke (delegatingmethodaccessorimpl.java:25) di java.lang.reflect.method.invoke (Method.java:585) di com.intellij.rt.execution.application.appmain
4. Fungsi array parameter string dalam metode main ()
Dalam metode main() , fungsi array parameter string untuk menerima parameter input baris perintah, dan parameter baris perintah dipisahkan oleh spasi.
Berikut adalah contoh untuk melihat cara menginisialisasi dan menggunakan array ini.
/ *** Cetak parameter input dalam metode utama*/ kelas publik testmain {public static void main (string args []) {system.out.println ("Parameter input cetak dalam metode utama!"); untuk (int i = 0; i <args.length; i ++) {System.out.println (args [i]); }}} Metode eksekusi dan hasil operasi
D:/Studi/Basetest/SRC> Javac testmain.java D:/Studi/Basetest/Src> Java TestMain 1 2 3 Cetak parameter input dalam metode utama! 1 2 3
5. Berikan versi HelloWorld lain
/ *** Versi sesat dari HelloWorld.hehe*/ kelas publik HelloWorld2 {static {System.out.println ("Hello Wordld!"); } public static void main (string args []) {System.exit (0); }} Metode main() menjalankan konten kalimat " System.exit(0); ", dengan tujuan membuat program berakhir secara normal. Di mana "HelloWorld!" cetak dari? Rahasianya dicetak statis, karena isi blok kode statis akan dipanggil sebelum panggilan utama.
Vi. Contoh
Mesin virtual dimulai dengan memanggil metode utama dari kelas yang ditentukan, meneruskannya ke parameter array string, sehingga kelas yang ditentukan dimuat, menghubungkan jenis lain yang digunakan oleh kelas, dan menginisialisasi mereka. Misalnya, untuk program:
kelas publik helloApp {public static void main (string [] args) {System.out.println ("Hello World!"); untuk (int i = 0; i <args.length; i ++) {System.out.println (args); }}}Setelah kompilasi, ketik mode baris perintah: java helloapp run virtual machine
Mesin virtual Java akan dimulai dengan memanggil metode HelloApp utama dan diteruskan ke array utama yang berisi tiga string "run", "virtual", dan "machine". Sekarang kami menjelaskan secara singkat langkah -langkah yang mungkin diambil mesin virtual saat menjalankan HelloApp.
Saya mulai mencoba menjalankan metode utama kelas HelloApp dan menemukan bahwa kelas tidak dimuat, yang berarti bahwa mesin virtual saat ini tidak mengandung perwakilan biner dari kelas. Jadi mesin virtual menggunakan classloader untuk mencoba menemukan perwakilan biner seperti itu. Jika proses ini gagal, pengecualian dilemparkan. Setelah kelas dimuat, sebelum metode utama dipanggil, kelas HelloApp harus ditautkan ke jenis lain dan diinisialisasi. Tautan terdiri dari tiga tahap: inspeksi, persiapan dan penguraian. Verifikasi simbol dan semantik dari kelas utama yang dimuat, bersiaplah untuk membuat domain statis kelas atau antarmuka dan menginisialisasi domain ini ke nilai default standar, dan parsing bertanggung jawab untuk memeriksa referensi simbolik kelas utama ke kelas atau antarmuka lain. Ini opsional pada langkah ini. Inisialisasi kelas adalah pelaksanaan fungsi inisialisasi statis dan konstruktor inisialisasi dari domain statis yang dinyatakan di kelas. Kelas induk kelas harus diinisialisasi sebelum diinisialisasi.
Seluruh prosesnya adalah sebagai berikut:
Meringkaskan
Sebagai spesifikasi khusus, metode utama sangat berbeda dari metode biasa dan memiliki banyak keterbatasan. Memahami prinsip-prinsipnya membutuhkan pembelajaran pengetahuan terkait JVM. Ini adalah hambatan utama untuk belajar di Java. Di atas adalah ringkasan prinsip dan penggunaan utama yang disusun oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi.