1. Metode untuk mencetak trek tumpukan
Secara aktif panggil salah satu objek yang dapat dilewati dari PrintStackTrace () = PrintStackTrace (System.err), PrintStackTrace (PrintStream), dan PrintStackTrace (Printwriter).
Jika pengecualian tidak diproses, dilemparkan langsung setelah metode utama, metode pengecualian printStackTrace () akan dipanggil sebelum program keluar, dan pada akhirnya pengecualian di utas "utama" + printStackTrace ()
2. Stack Track
1. PrintStackTrace ()
Pertama -tama, perlu untuk mengklarifikasi bahwa metode ini tidak berasal dari kelas pengecualian. Kecuali untuk mendefinisikan beberapa konstruktor, semua metode diwarisi dari kelas induknya. Metode yang berkaitan dengan pengecualian diwarisi dari kelas java.lang. PrintStackTrace () adalah salah satunya.
Metode ini mencetak informasi trek tumpukan dari objek yang dapat dilempar ke aliran output kesalahan standar. Output terlihat seperti ini:
java.lang.nullpointerException di myclass.mash (myclass.java:9) di myclass.crunch (myclass.java:6) di myclass.main (myclass.java:3)
Baris pertama output adalah output dari metode tostring (). Kami akan berbicara tentang metode ini nanti.
Mari kita lihat contoh di bawah ini:
Public TestPrintStackTrace {public static void f () melempar Exception {Throw New Exception ("Ada sesuatu yang salah!"); ) {coba {g ();Output dari contoh ini adalah sebagai berikut:
Java.lang.Exception: Ada yang salah! di testprintstacktrace.f (testprintstacktrace.java:3) di testprintstacktrace.g (testprintstacktrace.java:6) di testprintstacktrace.main (testprintstack trace.java:10)
Dalam contoh ini, pengecualian dilemparkan dalam metode f (), metode f () disebut dalam metode g (), pengecualian ditangkap dalam metode utama, dan informasi trek tumpukan dicetak. Oleh karena itu, output menunjukkan proses f -> g - main pada gilirannya.
2. Metode GetStackTrace ()
Metode ini memberikan akses terprogram ke informasi yang dicetak oleh metode printStackTrace (). Ini mengembalikan serangkaian elemen trek tumpukan. Output di atas adalah contoh. Simpan elemen trek tumpukan ini dalam array. Setiap elemen sesuai dengan bingkai tumpukan. Elemen pertama dari array menyimpan elemen atas tumpukan, yang merupakan f di atas. Elemen bawah elemen terakhir disimpan.
Berikut adalah contoh menggunakan getStackTrace () untuk mengakses elemen tumpukan trek ini dan mencetak output:
Public TestPrintStackTrace {public static void f () melempar Exception {Throw New Exception ("Ada sesuatu yang salah!"); ) {coba {g (); -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------- ------ -"); for (stacktraceElement elem: e.getStackTrace ()) {System.out.println (elem);}}}Output seperti itu pada dasarnya sama dengan output PrintStackTrace (), sebagai berikut:
Java.lang.Exception: Ada yang salah! di testprintstacktrace.f (testprintstacktrace.java:3) di testprintstacktrace.g (testprintstacktrace.java:6) di TestPrintStackTrace.main (TestPrintStack.java:10). Java: 6) TestPrintStackTrace.Main (TestPrintStackTrace.java:10)
Metode Three.FillinStackTrace
Metode FillinStackTrace () asli akan mengembalikan objek yang dapat dilempar, yang dibuat dengan mengisi informasi tumpukan panggilan saat ini ke dalam objek pengecualian asli, sehingga pengecualian asli yang dikembalikan masih merupakan pengecualian asli.
Garis yang memanggil metode ini akan menjadi lokasi pengecualian baru, dan informasi tentang titik kejadian pengecualian asli akan hilang. Efeknya setara dengan menangkap pengecualian dan melempar ulang pengecualian lain. Perbedaan antara keduanya adalah bahwa pengecualian setelah FillInstacktrace masih merupakan pengecualian asli (hanya tidak memiliki trek tumpukan); .
Paket com.jyz.study.jdk.exception; / ** * trek stack * fillinstacktrace * @author [email protected] * * / kelas publik FillinStackTrace {publ ic static void main (string [] args) melempar pengecualian {test1 ( ); static void test2 () {test3 ();
Informasi tumpukan pengecualian 1 dan 2 ditunjukkan pada gambar:
Perbedaannya adalah informasi dari ini sendiri.
Informasi tumpukan 1
Pengecualian di Thread "Main" java.lang.nullpointerException: str is null di com.jyz.study.jdk.exception.fillinstacktrace.test1 (fillinstacktrace.java:2 0) di com.jyz.study.jdk.exception.filleNception.filleNtack. Main (FillinStackTrace.java:13)
2 informasi tumpukan
Exception in thread "main" java.lang.Exception at com.jyz.study.jdk.exception.FillInStackTrace.test1(FillInStackTrace.java:21) at com.jyz.study.jdk .exception.FillInStackTrace.main(FillInStackTrace.java : 13)