如何找到java程序中有多少方法及其名称使用了我的变量?

如何找到java程序中有多少方法及其名称使用了我的变量?,java,Java,下面是一个示例,用于查找我的类中使用了多少变量。但是我需要找出在一个类中有多少方法使用我的变量 测试类有四个方法,但在test1()和test3()方法中使用了sample1变量我希望输出为test1(),test2()用于sample1变量 import java.lang.reflect.Field; public class Test { private int sample1; private int sample2; private int sample3; public voi

下面是一个示例,用于查找我的类中使用了多少变量。但是我需要找出在一个类中有多少方法使用我的变量

测试类有四个方法,但在test1()和test3()方法中使用了sample1变量我希望输出为test1(),test2()用于sample1变量

import java.lang.reflect.Field;

public class Test {

private int sample1;
private int sample2;
private int sample3;

public void test1()
{
    System.out.println(sample1);
}
public void test2()
{
    System.out.println(sample2);
}
public void test3()
{
    System.out.println(sample1);
}
public void test4()
{
    System.out.println(sample3);
}

public static void main(String[] args) {

    Test t = new Test();

    Field f[] =Test.class.getDeclaredFields();
    for (int i = 0; i < f.length; i++)
    {
        System.out.println("Variable Name is : " + f[i].getName());
    }
}
}
import java.lang.reflect.Field;
公开课考试{
私人int样本1;
私人int样本2;
私人int样本3;
公共void test1()
{
系统输出打印项次(样本1);
}
公共无效测试2()
{
System.out.println(样本2);
}
公共无效测试3()
{
系统输出打印项次(样本1);
}
公共无效测试4()
{
System.out.println(样本3);
}
公共静态void main(字符串[]args){
测试t=新测试();
字段f[]=Test.class.getDeclaredFields();
对于(int i=0;i
这有帮助吗

import java.lang.reflect.Field;
import java.util.*;

public class Main {

    private int sample1;
    private int sample2;
    private int sample3;
    private ArrayList<String> whoUseSameple1= new ArrayList<String>();

    int getSample1(String methodname){
        whoUseSameple1.add(methodname);
        return sample1;
    }
    public void test1(){
        System.out.println(getSample1(new Object(){}.getClass().getEnclosingMethod().getName()));
    }
    public void test2(){
        System.out.println(sample2);
    }
    public void test3(){
        System.out.println(getSample1(new Object(){}.getClass().getEnclosingMethod().getName()));
    }
    public void test4(){
        System.out.println(sample3);
    }

    public static void main(String[] args) {

        Main t = new Main();
        t.test1();
        t.test2();
        t.test3();
        t.test4();


        for (String s:t.whoUseSameple1){
            System.out.print(s+" ");
        }
        System.out.print("are usd Sample1 Variable\n");
    // Field f[] =Main.class.getDeclaredFields();
    // for (int i = 0; i < f.length; i++)
    // {
        // System.out.println("Variable Name is : " + f[i].getName());
    // }
    }
}
import java.lang.reflect.Field;
导入java.util.*;
公共班机{
私人int样本1;
私人int样本2;
私人int样本3;
私有ArrayList whoUseSameple1=新ArrayList();
int getSample1(字符串方法名){
whoUseSameple1.add(methodname);
返回样本1;
}
公共void test1(){
System.out.println(getSample1(新对象(){}.getClass().getEnclosuringMethod().getName());
}
公共无效测试2(){
System.out.println(样本2);
}
公共无效测试3(){
System.out.println(getSample1(新对象(){}.getClass().getEnclosuringMethod().getName());
}
公共无效测试4(){
System.out.println(样本3);
}
公共静态void main(字符串[]args){
Main t=新的Main();
t、 test1();
t、 test2();
t、 test3();
t、 test4();
for(字符串s:t.whoUseSameple1){
系统输出打印(s+“”);
}
System.out.print(“是usd Sample1变量\n”);
//字段f[]=Main.class.getDeclaredFields();
//对于(int i=0;i
这有帮助吗

import java.lang.reflect.Field;
import java.util.*;

public class Main {

    private int sample1;
    private int sample2;
    private int sample3;
    private ArrayList<String> whoUseSameple1= new ArrayList<String>();

    int getSample1(String methodname){
        whoUseSameple1.add(methodname);
        return sample1;
    }
    public void test1(){
        System.out.println(getSample1(new Object(){}.getClass().getEnclosingMethod().getName()));
    }
    public void test2(){
        System.out.println(sample2);
    }
    public void test3(){
        System.out.println(getSample1(new Object(){}.getClass().getEnclosingMethod().getName()));
    }
    public void test4(){
        System.out.println(sample3);
    }

    public static void main(String[] args) {

        Main t = new Main();
        t.test1();
        t.test2();
        t.test3();
        t.test4();


        for (String s:t.whoUseSameple1){
            System.out.print(s+" ");
        }
        System.out.print("are usd Sample1 Variable\n");
    // Field f[] =Main.class.getDeclaredFields();
    // for (int i = 0; i < f.length; i++)
    // {
        // System.out.println("Variable Name is : " + f[i].getName());
    // }
    }
}
import java.lang.reflect.Field;
导入java.util.*;
公共班机{
私人int样本1;
私人int样本2;
私人int样本3;
私有ArrayList whoUseSameple1=新ArrayList();
int getSample1(字符串方法名){
whoUseSameple1.add(methodname);
返回样本1;
}
公共void test1(){
System.out.println(getSample1(新对象(){}.getClass().getEnclosuringMethod().getName());
}
公共无效测试2(){
System.out.println(样本2);
}
公共无效测试3(){
System.out.println(getSample1(新对象(){}.getClass().getEnclosuringMethod().getName());
}
公共无效测试4(){
System.out.println(样本3);
}
公共静态void main(字符串[]args){
Main t=新的Main();
t、 test1();
t、 test2();
t、 test3();
t、 test4();
for(字符串s:t.whoUseSameple1){
系统输出打印(s+“”);
}
System.out.print(“是usd Sample1变量\n”);
//字段f[]=Main.class.getDeclaredFields();
//对于(int i=0;i
我认为您无法用类反射方法实现这一点。您必须反编译java类字节码才能扫描方法正在使用的变量等。顺便说一句,您的示例代码显示了类中“声明”的“字段”,而不是类中“使用”的“变量”。这一切都在术语和您选择用于获取字段详细信息的方法的名称中:DYou可以使用AspectJ和加载时编织(不更改现有代码)来完成。但这增加了复杂性、性能问题和aspectj(陡峭的学习曲线),我认为用类反射方法无法做到这一点。您必须反编译java类字节码才能扫描方法正在使用的变量等。顺便说一句,您的示例代码显示了类中“声明”的“字段”,而不是类中“使用”的“变量”。这一切都在术语和您选择用于获取字段详细信息的方法的名称中:DYou可以使用AspectJ和加载时编织(不更改现有代码)来完成。但是这增加了复杂性、性能问题和aspectj(陡峭的学习曲线)。Hi Hui,谢谢你的解决方案,但我需要关于每个变量的信息,而不必更改我的方法(test1、test2、test3、test4)中的任何代码。在我们班上有近1000个变量和1000多个方法的情况下,我能做什么?请与我分享反射API中的任何方法或任何合适的解决方案。谢谢你的解决方案。你有一个包含1000个字段和1000个方法的单一类吗?水坝。不确定为什么要进行此练习,但如果不必提供代码解决方案,只需为建议的重构提供调用图,就可以将类移植到eclipse之类的工具,并使用ide功能进行调用图,如果不是的话,那么很抱歉,但是这对于soemone来说似乎是一项艰巨的任务,我没有沉浸在思考中,等等。Hi Hui,谢谢你的解决方案,但是我需要关于每个变量的信息,而不需要更改我的方法中的任何代码(test1、test2、test3、test4).在我们班上,有将近1000个变量和1000多个方法,在这种情况下,我能做什么?请与我分享反射API中的任何方法或任何合适的解决方案。谢谢你的解决方案。你有一个包含1000个字段和1000个方法的单一类吗?水坝。不确定为什么要进行此练习,但如果不必提供代码解决方案,只需为建议的重构提供调用图,就可以得到