java 函数的运行阶段 获取参数值

竹君子 2010-12-31 09:29:27
比如:
public Class ClassA
{
void test(int a,String b)
{
....
}
void main()
{
test(2,"dd");
}

}

在这个函数运行的过程中,能够打印出函数中参数的名称和值出来.
...全文
198 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这不是面向切面编程了吗?看看那方面的吧
sweetanan888 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 strike2368168 的回复:]
好像不可以,java的反射可以把参数的类型取出来,也可以取出运行结果。
但是参数值是你传进来事先就应该知道了啊
[/Quote]
我也这么认为噢
mxx123 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 strike2368168 的回复:]
好像不可以,java的反射可以把参数的类型取出来,也可以取出运行结果。
但是参数值是你传进来事先就应该知道了啊
[/Quote]
这个正解
找工作中 2012-02-29
  • 打赏
  • 举报
回复
发现个问题,提出问题时间跟最后回复相差超过1年了...
找工作中 2012-02-29
  • 打赏
  • 举报
回复
有点麻烦,用反射机制写的话,确实只差能不能获取当前方法的参数值了,有趣,晚上回去试试
yuchengyang 2012-02-17
  • 打赏
  • 举报
回复
我也研究这个问题 您的实现了吗?
竹君子 2010-12-31
  • 打赏
  • 举报
回复
我是想用aop的方法去实现.应该把日志记录代码分离出来。而不是每个函数中都写一遍
strike2368168 2010-12-31
  • 打赏
  • 举报
回复
好像不可以,java的反射可以把参数的类型取出来,也可以取出运行结果。
但是参数值是你传进来事先就应该知道了啊
竹君子 2010-12-31
  • 打赏
  • 举报
回复
可能我没有说清楚.我希望做的是一个共通的函数,不同的函数都调用这个函数来达到这个效果.
已经写好的函数是(还差参数的值):
void printlog()
{
StringBuffer logMsg2 = new StringBuffer(
WebDefinition.STRINGBUFFER_INIT_LENGTH);

logMsg2.append("[Begin:");
logMsg2.append(Thread.currentThread().getStackTrace()[2].getClassName());
logMsg2.append(":");
String methodName =Thread.currentThread().getStackTrace()[2].getMethodName();
logMsg2.append(methodName) ;


Method[] m = Thread.currentThread().getStackTrace()[2].getClass().getMethods();

Class[] cparameterTypes =new Class[1];
cparameterTypes[0]=new String().getClass() ;

Method meth=null;
try {
meth = Thread.currentThread().getStackTrace()[2].getClass().getMethod(methodName, cparameterTypes);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


Class[] parameterTypes = meth.getParameterTypes();
for(int j=0; j<parameterTypes.length; j++)
{
logMsg2.append(parameterTypes[j].getName());

}

System.out.print(logMsg2);
}
莫寻千百度 2010-12-31
  • 打赏
  • 举报
回复
你的需求很奇怪啊,,参数的值有必要打印么,参数的值是调用方法时传入的,,如果要打印参数的名字和类型要在调用的按个方法里面打印,申明方法之前应该是清楚方法的类型和名称

public Class ClassA
{
void test(int a,String b)
{
System.out.println("第一个参数类型是 int ,名称是 a ,值是 "+a);
System.out.println("第二个参数类型是 String ,名称是 b,值是 "+b);


}
public static void main(String[] args)
{
ClassA a=new ClassA();
a.test(2,"dd");

}

}






81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧