C および C++ では、次のように現在の関数名を出力できます。
次のようにコードをコピーします。
printf("%s",__func__);
しかし、Java ではそのようなことはありません。すべてはオブジェクトであり、オブジェクトから取得する必要があります。次の 2 つの方法があります。
1 つ目: Thread クラスを通じて取得します。
次のようにコードをコピーします。
System.out.println(Thread.currentThread().getStackTrace()[1].getMethodName());
System.out.println(Thread.currentThread().getStackTrace()[1].getClassName());
2 番目のメソッドは Throwable クラスを通じて取得され、2 番目のメソッドは拡張可能であり、Throwable のサブクラスでこの機能を実現できます。
次のようにコードをコピーします。
System.out.println(new Throwable().getStackTrace()[0].getMethodName());
System.out.println(new Throwable().getStackTrace()[0].getClassName());
これら 2 つの方法を使用すると、現在のメソッド名とクラス名を出力できますが、次のようなインデックスが表示されるという欠点があります。
次のようにコードをコピーします。
getStackTrace()[インデックス]
0 か 1 または他の値のどちらを選択する必要がありますか? ここでは、2 つのメソッドのインデックスはそれぞれ 0 と 1 として書かれていますが、これは固定されておらず、テストを通じて自分で決定する必要があることを思い出してください。 JDKのバージョンによっては値が異なる場合があるとのこと。しかし、私自身はテストしていません。
テストに使用したJDKのバージョン:Javaバージョン「1.7.0_17」