2017-01-03 5 views
2

Ich weiß, dass Variablen können auf zwei Arten eingeteilt werden: -Sind alle Instanzvariablen außerhalb von Funktionen deklariert?

Der erste Weg ist, sie in globale und lokale Variablen auf ihren Umfang zu klassifizieren. Wenn auf die Variable von allen Methoden einer Instanz einer Klasse zugegriffen werden kann, dh innerhalb der Klasse, dann ist sie als globale Variable bekannt und wenn sie nur innerhalb eines Codeblocks in einer Instanz einer Klasse zugänglich ist, ist sie bekannt als lokale Variable.

Die zweite Möglichkeit besteht darin, sie in Klasse/statische Instanz/nicht statische Variablen zu klassifizieren. Klassen/statische Variablen sind die Variablen, die zu der Klasse gehören, und nur eine Kopie dieser Variablen existiert für alle Instanzen der Klasse und wird von ihnen gemeinsam genutzt. Instanzvariablen sind diejenigen Variablen, die zu der Instanz der Klasse gehören und für die für jede Instanz eine eigene Kopie erstellt wird.

Mein Dozent sagt, dass Instanzvariablen nur außerhalb von Funktionen deklariert werden können. Warum ist das so? Können lokale Variablen keine Instanzvariablen sein?

+0

'außerhalb functions' erklärt ... gibt es keine Funktionen in Java, nur Methoden. –

+0

Nein, sie können nicht. Ihr Geltungsbereich ist auf die Verwendung innerhalb einer Methode beschränkt, nachdem sie in einer Methode deklariert wurden. Sie sind nicht von anderen Methoden oder Objekten aus zugänglich. – f1sh

+0

Wenn eine Methode, die für ein Objekt aufgerufen wird, Instanz oder statisch ist, dann stelle ich mir vor, dass alle Variablen, die innerhalb des Bereichs dieser Methode deklariert sind, mit dieser übereinstimmen würden. Allerdings ist dies ein strittiger Punkt, da der Umfang solcher Variablen nur für diesen Methodenaufruf gelten würde. – David

Antwort

5

Wenn Sie deklarieren eine Variable innerhalb einer Methode, ist es eine lokale Variable, die zu dieser Methode gehört. Es wird den Gültigkeitsbereich verlassen, wenn die Methode beendet wird. Die einzige Möglichkeit, eine Variable zu einer Instanz zu haben, besteht darin, sie direkt unter der Klasse zu deklarieren - d. H. Außerhalb jeder Methode.

EDIT:

Hier ist ein Beispiel, wie @Yeikel vorgeschlagen:

public class MyClass { 

    private static int iAmAStaticMember = 1; 

    private int iAmAnInstanceMember; 

    public void someMethod() { 
     int iAmALocalVariables = 4; 
    } 
} 
+3

Sie sollten wahrscheinlich Beispielcode hinzufügen, um diese Antwort zu vervollständigen – Yeikel

+0

Aber ist nicht lokale Variable ein Teil des Objekts. – MrAP

+0

@MrAP: Hängt von der Semantik ab, wie Sie "Teil des Objekts" definieren. Die Methode ist eine Instanzmethode, so dass der Umfang dieser Methode intuitiv mit der Instanz des Objekts verbunden ist. Auf der anderen Seite, wenn Sie fragen, ob die Werte selbst auf dem Stapel oder auf dem Haufen sind, ist das eine ganz andere Geschichte. Macht es wirklich einen Unterschied? Gibt es einen tieferen Sinn für das, was hier gefragt wird? – David

1

Wenn sie innerhalb einer Methode deklariert sind, sind sie nur in dem Verfahren Umfang. Nach dem Ausführen der Methode wird die Variable zerstört.

public class Something { 

    int j = 0; // j lives as long as the class exists 

    public doSomething() { 
     int i = 0; 
     // i is gone after method run 
    } 
} 
1

Nur globale Variablen können in Instanz- und statische Variablen kategorisiert werden. Variablen innerhalb von Funktionen sind lokal für die Funktionen und gehören weder zur Klasse noch zum Objekt. Instanzvariablen gehören zum Objekt und statische Variablen gehören zur Klasse.

1

In Java haben Sie Instanz, statische und lokale Variablen.

Statische Variablen sind Variablen auf Klassenebene, die zur Klasse selbst gehören, und daher wird eine Kopie von allen Klassen/Objekten gepflegt und verwendet. Sie werden lebendig gemacht, wenn die Klasse vom Klassenlader geladen wird, und sie sterben, wenn die Klasse entladen wurde.

Instanzvariablen sind an eine Instanz einer Klasse gebunden, d. H. Das Objekt. Daher gibt es für jedes erstellte Objekt eine Kopie der Variablen. Basierend auf dem Zugriffsmodifizierer wird der Verwendung außerhalb der Klasse eine Einschränkung auferlegt (normalerweise privat gemacht und über Getter und Setter aufgerufen). Sie werden beim Erstellen einer Instanz als lebendig dargestellt, wenn der Garbage Collector erkennt, dass auf das Objekt keine gültige/verwendete Referenz verweist.

Lokale Variablen sind Variablen auf Methodenebene, d.h. sie sind lokal für die Methode. Diese Variablen werden erstellt, wenn die Methode aufgerufen wird (entweder auf statische Weise oder über eine Objektreferenz) und wenn die Methodenausführung abgeschlossen ist oder wenn die Methode die Steuerung an den Aufrufer zurückgegeben hat.

class Demo { 

    // static variable - can be accessed by any class/object 
    public static int num1 = 1; 

    // instance variable - accessed by all objects of this class; if made private, can use accessor methods to access it 
    public int num2 = 2; 

    // num3 is a local variable (method arguments are also local variables) 
    public void getSum() { 
     int num3 = 3; 
     return num2 + num3; 
    } 

} 

this helps :)

Verwandte Themen