2016-04-22 20 views
0

Ich bin verwirrt, warum ich eine Variable private nicht bezeichnen kann, wenn ich sie innerhalb eines Konstruktors oder innerhalb des mains erzeuge, aber außerhalb der Klasse.Private Variablen innerhalb eines Konstruktors in Java

public class Stuff 
{ 
    private double x; 

    public Stuff(int i, double d) { 
     private double y; 
    } 

    public static void main(String[] args) { 
     private double z; 
    } 
} 
+0

Sie sollten lesen [Was ist der Unterschied zwischen Feld, Variable, Attribut und Eigenschaft in Java POJOs?] (Http://Stackoverflow.com/q/10115588/5221149) – Andreas

+0

Danke ich glaube, ich verstehe jetzt besser –

Antwort

4

Zugriffsmodifikatoren keinen Sinn innerhalb von Funktionen machen, weil die Variablen sofort den Gültigkeitsbereich verlassen, nachdem die Funktion

+0

oh also sind sie automatisch privat? –

+0

@ClangorousChimera Ich denke, man könnte es sich so vorstellen – Natecat

+3

Sie sind nicht privat, weil sie nicht als * Felder * auf dem * Objekt * existieren. Sie sind lokale * Variablen * für die * Methode *. – Andreas

1

Eine Klasse endet Felder und Methoden, die von bestimmten anderen Klassen zugegriffen werden kann und immer die Klasse selbst, abhängig von den Zugriffsebenenmodifikatoren (privat, Standardzugriff, geschützt oder öffentlich). Sie können die Felder und Methoden als Attribute/Eigenschaften der Klasse anzeigen.

Ein Feld ist, was Sie beschreiben als "eine Variable in einer Klasse, die nicht in irgendeiner Methode ist". Ein Feld beschreibt einen Wert, den die Klasse hat, und eine Methode beschreibt, was die Klasse (oder die Objekte der Klasse) tun können.

Wenn Sie das Schlüsselwort static für die Einfachheit dieses Beitrags ignorieren, ist eine Klasse eine Vorlage zum Erstellen von Objekten. Jedes Objekt, das Sie von einer bestimmten Klasse erstellen, wird über eigene Felder und Methoden verfügen (außer das Feld oder die Methode ist static).

Wenn Sie das Feld einer Klasse auf private nichts außerhalb setzen, kann die Klasse es erreichen. Nur die Klasse selbst (im Wesentlichen die Methoden der Klasse) kann sie erreichen. Gleiches gilt für private Methoden. Nur andere Methoden der Klasse können die privaten Methoden erreichen.

Betrachten Sie dieses Beispiel:

public class Person { 
    private String name; 
    public int id; 

    public Person(String name, int id) { 
     this.name = name; 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 
} 

Wenn jemand die Namen dieser Person direkt Bezug auf den Namen, die sie nicht in der Lage sein, es zu tun, da der Name private ist Acess wollte. Sie müssten dazu die Methode getName() verwenden.

Person person = new Person(John, 5); 
System.out.print(person.name); //does not work 

Person person = new Person(John, 5); 
System.out.print(person.getName()); //works 

Das ist gut, denn wenn der Name direkt zugänglich war, kann man schreiben:

person.name = "Felicity"; 

und den Namen der Person ändern, was nicht erwünscht ist (wir dies mit den id tun können, und das könnte Probleme verursachen). Dies ist nicht möglich, wenn der Name privat ist.

Eine Variable innerhalb eine Methode ist jedoch kein Feld. Dies bedeutet, dass es kein Attribut des Objekts ist. Es ist einfach eine temporäre Variable, die existiert, um der Methode zu erlauben, das zu tun, was sie tun möchte. Wenn die Methode ausgeführt wurde, wird die Variable zerstört. Eine solche Variable wie private oder etwas anderes zu deklarieren ist völlig bedeutungslos und daher nicht erlaubt.

Verwandte Themen