Di C dan C++, Anda dapat mencetak nama fungsi saat ini seperti ini:
Copy kode kodenya sebagai berikut:
printf("%s",__fungsi__);
Namun tidak ada pepatah seperti itu di Jawa. Segala sesuatu adalah suatu objek, dan harus diperoleh dari suatu objek. Ada dua cara:
Yang pertama: Dapatkan melalui kelas Thread.
Copy kode kodenya sebagai berikut:
System.out.println(Thread.currentThread().getStackTrace()[1].getMethodName());
System.out.println(Thread.currentThread().getStackTrace()[1].getClassName());
Metode kedua diperoleh melalui kelas Throwable. Metode kedua dapat diperluas selama merupakan subkelas dari throwable, fungsinya dapat diimplementasikan.
Copy kode kodenya sebagai berikut:
Sistem.keluar.println(new Throwable().getStackTrace()[0].getMethodName());
System.out.println(new Throwable().getStackTrace()[0].getClassName());
Melalui kedua metode ini, nama metode saat ini dan nama kelas dapat dicetak, namun terdapat kekurangannya: indeks berikut:
Copy kode kodenya sebagai berikut:
getStackTrace()[indeks]
Nilai apa yang harus diambil, 0 atau 1 atau nilai lainnya? Di sini indeks kedua metode ditulis masing-masing 0 dan 1, hanya untuk mengingatkan diri sendiri bahwa itu tidak tetap dan perlu ditentukan sendiri melalui pengujian. Dikatakan bahwa nilainya mungkin berbeda tergantung pada versi JDK. Tapi belum mengujinya sendiri.
Versi JDK yang saya gunakan untuk pengujian: Java versi "1.7.0_17"