主要是通过StackTraceElement 去获得运行栈的信息。
public static void getCaller() {
int i;
StackTraceElement stack[] = (new Throwable()).getStackTrace();
for (i = 0; i < stack.length; i++) {
StackTraceElement ste = stack[i];
System.out.println(ste.getClassName() + "." + ste.getMethodName()
+ "(...)");
System.out.println(i + "--" + ste.getMethodName());
System.out.println(i + "--" + ste.getFileName());
System.out.println(i + "--" + ste.getLineNumber());
//如果只是单纯的要取得类名,也可以用
/**
sun.reflect.Reflection().getCallerClass( int p0);
其中 当p0 = 0 时,表示sun.reflect.Reflection
当p0=1 表示 类本省
当p0=2 表示 调人者
。。。
*/
}
}
以一个经常使用的例子log信息的输出为例:
先建立一个接口:
public interface Loggable {
StackTraceElement stack[] = (new Throwable()).getStackTrace();
StackTraceElement ste = stack[1];
public static Logger log = Logger.getLogger("Class:"+ste.getClassName() + "___Method:"
+ ste.getMethodName()+" :"+ste.getLineNumber());
}
然后需要进行log输出的类实现这个接口,直接调用log.xxx就行了
public class TestLog implements Loggable {
public static void main(String[] args) {
log.info("test");
}
}
以上信息参考自“java视线”论坛。更详细的内容可以参看