通过另一种方法获取方法的局部变量

时间:2015-07-11 10:08:38

标签: java oop

如何在不使用java中的参数的情况下获取在另一个方法中声明和初始化的值?

y[x[4]]

这里变量demo在method1中声明并且现在分配了一个值我需要在方法2中获取demo的值,这可能没有任何参数,全局声明和没有getter setter方法吗?

5 个答案:

答案 0 :(得分:6)

不,这是不可能的,因为demomethod1返回后不存在。它是method1中的局部变量

  

...没有任何参数,全局声明和没有getter setter方法?

这几乎排除了一切,如果通过“全局声明”你的意思是让demo成为一个实例字段(这不是全局的,但我认为这就是你的意思)

但为了完整性,这里的demo作为实例字段:

public class Value {
    private int demo;

    void method1()
    {
        this.demo = 10;
        System.out.println("method 1" + this.demo);
    }
    void method2()
    {
        System.out.println("method 2" + this.demo);
    }

    public static void main(String[] args) {
        Value obj = new Value ();
        obj.method1();
        obj.method2();
    }
}

访问时,

答案 1 :(得分:3)

public class Value {
    void method1()
    {
        int demo=10;
        System.out.println("methd 1"+demo);
    }
    void method2()
    {
        System.out.println("method 2");
        this.method1();
    }

    public static void main(String[] args) {
        Value obj = new Value ();
        obj.method1();
        obj.method2();
    }
}

public class Value {
int method1()
{
    int demo=10;
    System.out.println("methd 1"+demo);
    return demo;
}
void method2()
{        
    int demos = this.method1();
    System.out.println("method 2 "+demos);
}

public static void main(String[] args) {
    Value obj = new Value ();
  //  obj.method1();
    obj.method2();
}

}

答案 2 :(得分:0)

实际上

int demo
method1中的

只是函数method1的本地。我不知道java编译的代码是什么,但是你可以肯定,当你使用为你的处理器创建字节码的编译器时,这样的变量只会进入寄存器。您只需将其用作变量的方便名称。

如果要在其他方法中使用该变量,则需要在class Value中将此值作为数据成员共享。

答案 3 :(得分:0)

虽然方法的局部变量在编译时被丢弃,但是如果使用调试信息javac -g进行编译,则可以获取它们。您可以利用字节码库ASM或BCEL。如果您通过调试代理暂停JVM,则还可以利用远程调试器API。

答案 4 :(得分:0)

public class Value {
    int demo;
public int getDemo(){return demo;}
public void setDemo(int demo){this.demo=demo;}

    void method1() {
       // demo=10;
        System.out.println("methd 1"+demo);
    }

    void method2() {

System.out.println("method 2"+demo);
    }

    public static void main(String[] args) {
        Value obj = new Value ();
//set the value of demo using setter method        

obj.method1();
        obj.method2();
    }
}