StackTraceElement stack[] = Thread.currentThread().getStackTrace();
 
 
StackTraceElement类,主要是stack[2]。
 
 
stack[2].getClassName()   获取调用类名
 
 
stack[2].getMethodName()  获取调用方法名
 
 
stack[2].getFileName()    获取调用文件名


示例如下:


运行环境:jdk1.6



package com.test;
 
 
 
 

  
  public class B {
 
 
 
 

  
  	public static void main(String[] args) {
 
 
 
 

  
  	    A.test();
 
 
 
 

  
  	}
 
 
 
 

  
  }
 
 
 
 

  
  class A {
 
 
 
 

  
  	static void test(){
 
 
 
 

  
  		StackTraceElement stack[] = Thread.currentThread().getStackTrace();
 
 
 
 
		
 
 
 
 

  
  		System.out.println(stack[0]);//java.lang.Thread.getStackTrace
 
 
 
 

  
  		System.out.println(stack[1]);//本方法的位置及所属类 com.test.A.test(B.java:10)
 
 
 
 

  
  		System.out.println(stack[2]);//调用本方法的类       com.test.B.main(B.java:4)
 
 
 
 

  
  		System.out.println("调用本方法是:"+stack[2].getClassName()+"类中的"+stack[2].getMethodName()+"方法");		
 
 
 
 

  
  		System.out.println("调用本方法的文件是"+stack[2].getFileName());
 
 
 
 

  
  		String callName=stack[2].getClassName();
 
 
 
 

  
  		System.out.println("调用test方法的类是:"+callName);
 
 
 
 

  
  		//然后就可以根据调用本方法的类做一些限制或其他操作
 
 
 
 

  
  		if (callName.endsWith("B")){
 
 
 
 

  
  			System.out.println("B类调用了A类的test方法");
 
 
 
 

  
  		}else{
 
 
 
 
			
 
 
 
 

  
  		}
 
 
 
 

  
  	}
 
 
 
 

  
  }


输出结果为:


java.lang.Thread.getStackTrace
 
 
 
 

  
  com.test.A.test(B.java:10)
 
 
 
 

  
  com.test.B.main(B.java:4)


调用本方法是:com.test.B类中的main方法


调用本方法的文件是B.java


调用test方法的类是:com.test.B


B类调用了A类的test方法