2015-07-11 132 views
2

如何获得在另一个方法中声明和初始化的值,而不使用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(); 
    } 
} 

这里的变量演示方法一中的声明,现在我需要在方法2演示的价值分配值这可能不带任何参数,全局声明,并没有吸气setter方法?

+1

'method2()'对'demo'没有任何价值,因为它没有被定义。在'main()'中,你有'obj,method2()',它应该是'obj.method2()' – Charlie

+0

你应该学习变量的范围,这是非常基本的。 – Rustam

+0

@Rustam你不应该批评人们试图学习。 –

回答

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

}

6

不,这是不可能的,因为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(); 
    } 
} 

访问它的时候,但这样做你不需要使用this.清楚它是一个实例字段,而不是局部变量。

0

其实

int demo 
在方法1

只是局部的功能方法1。我不知道从这样的代码编译的Java是什么,但可以肯定的是,当您使用编译器为您的处理器创建字节码时,这样的变量将简单地进入寄存器。您只需将其用作变量的方便名称即可。

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

0

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

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

确实如此,但他不想让获得者和制定者 – TechWisdom

+0

我们能否取消获得者和制定者?任何想法 –

相关问题