Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取方法';通过另一种方法对局部变量进行排序_Java_Oop - Fatal编程技术网

Java 获取方法';通过另一种方法对局部变量进行排序

Java 获取方法';通过另一种方法对局部变量进行排序,java,oop,Java,Oop,如何在不使用java中的参数的情况下获得在另一个方法中声明和初始化的值 public class Value { void method1() { int demo=10; System.out.println("methd 1"+demo); } void method2() { System.out.println("method 2"+demo); } public static vo

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

public class Value {
    void method1()
    {
        int 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 ();
        obj.method1();
        obj,method2();
    }
}

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

不,这是不可能的,因为
demo
method1
返回后不存在。它是
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();
    }
}
您不需要在访问它时使用
,但这样做可以清楚地表明它是一个实例字段,而不是局部变量。

实际上

int demo
在method1中,函数只是method1的局部函数。我不知道java从这些代码中编译出什么,但可以肯定的是,当您使用为处理器创建字节码的编译器时,这样的变量将直接进入寄存器。您只需将其用作变量的方便名称

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

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();
    }
}


}

尽管方法的局部变量在编译时被丢弃,但如果使用调试信息
javac-g
编译,就可以得到它们。您可以利用字节码库ASM或BCEL。如果通过调试代理挂起JVM,还可以利用远程调试器API。

method2()
没有
demo
的值,因为它没有定义。在
main()
中,您有
obj,method2()
,它应该是
obj.method2()
您应该学习变量范围这是非常基本的。@Rustam您不应该批评尝试学习的人。没有列出的东西,您为什么要这样做?你在这里的最终目标是什么?没错,但他不想要得手和二传手
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();
    }
}
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();
    }
}