2017-05-17 7 views
0
public class Jail { 

    private int x=4; 

    public static void main(String[] args) { 

     int x=6; 
     new Jail().new Cell().slam(); 
    } 


    class Cell 
    { 
     void slam() 
     { 
      System.out.println("throw away key "+x); 

     } 
    } 
} 

Beim Ausführen dieses Programms wird der Wert der Instanzvariablen x ausgegeben. Ich möchte auf den Wert der lokalen Variablen x zugreifen. Wie geht das?Lokale Variable vs Instanzvariable?

+3

können Sie nicht, da es nicht in dem Bereich ist, wo Sie versuchen zu drucken. das ist der springende Punkt, dass es "lokal" ist. – Stultuske

Antwort

1

Da es sich um eine lokale Variable handelt, können Sie nicht darauf zugreifen. Sie müssen es als Parameter an Ihre Methode übergeben.

public class Jail { 
    private int x=4; 

    public static void main(String[] args) { 
     stub int x=6; 
     new Jail().new Cell().slam(x); 
    } 

    class Cell { 
     void slam(int x) { 
      System.out.println("throw away key "+x); 
     } 
    } 

} 
+0

Excelent @adi, das ist ein wirklich guter Weg das zu tun, das ist völlig in Ordnung, ich bin stattdessen etwas verwirrt in dem, was die Po versucht zu tun, aber dein Weg ist in Ordnung mir :). Groß –

0

Sie können dies ausprobieren:

public class Jail { 
    private int x=4; 

    public static void main(String[] args) { 
     int x=6; 
     new Jail().new Cell().slam(x); 
    } 
    class Cell 
    { 
     void slam(int x) 
     { 
      System.out.println("throw away key "+x); 
     } 
    } 
} 

Dies sollten Sie die lokale Variable geben. Danke

0

Ich denke, Sie möchten eine Abstraktion machen, und dann Delegierung, plus Hinzufügen von Getter und Setter, wenn Sie alles kombinieren, können Sie so tun, aber ich empfehle dringend, Ihre Cell-Klasse in eine andere zu trennen. Java-Klasse, aber wenn Sie aus irgendeinem Grund nicht wollen, können Sie endlich tun:

public class Jail { 

    private int x = 4; 

    public Jail(int x) { 
     this.x = x; 
    } 

    public int getValue() { 
     return this.x; 
    } 

    static class Cell { 

     private Jail j; 

     public Cell(Jail j) { 
      this.j = j; 
     } 

     void slam() { 
      System.out.println("throw away key " + this.getValue()); 
     } 

     public int getValue() { 
      return this.j.getValue(); 
     } 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     int x = 6; 
     Jail j = new Jail(x); 
     Cell c = new Cell(j); 
     c.slam(); 
    } 
} 
Verwandte Themen