2015-07-11 161 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

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

相關問題