2016-10-16 2 views
0

In meiner Java-Klasse haben wir gerade über Umfang erfahren. Und von gelernt, ich meine es wurde einmal kurz erwähnt und nie wieder gesprochen. Einige Fragen wurden gepostet, und ich habe Probleme, den Unterschied zwischen zwei Codeabschnitten zu verstehen. Die erste:Private, Static und Umfang der Variablen in Java

public class Shadow3 { 
    private static int i = 99; 
    public static void main(String[] args) { 
     for (int i = 0; i < 10; i++) { 
      System.out.println(i); 
     } 
     System.out.println(i); 
    } 
} 

Und die zweite:

public class Shadow4 { 
    private int i; 
    public void doSomething(int n) { 
     for (int i = 0; i < n; i++) { 
      System.out.println(i); 
     } 
    } 
    public static void main(String[] args) { 
     new Shadow4().doSomething(9); 
    } 
} 

Ich verstehe, dass der Fehler mit dem ersten ist nicht, dass die Variable zweimal deklariert wird, aber ich verstehe nicht, warum der Anwendungsbereich der in der Shadow-Klasse deklarierten Variablen erreicht nicht die Hauptmethode, um einen Duplizierungsfehler zu verursachen. Ich verstehe auch, warum in der ersten Stück Code, die Variable ich nicht als private statische deklariert werden kann, wenn es dann in der for-Schleife verwendet wird, weil die Werte von i in der for-Schleife vorübergehend sind, aber ich verstehe nicht, wie dann die Variable i im zweiten Teil des Codes ist gültig, weil sie immer noch privat ist.

+5

Ich glaube nicht, entweder Blöcke verwenden würde, von Code haben Fehler. Warum glaubst du, tun sie? For-Schleifen haben temporäre Variablen, die nur auf sie beschränkt sind. Hast du diese Codes ausgeführt? Was haben Sie bemerkt? –

+0

Nun wow du bist völlig richtig. Ich löschte und machte meine Klasse neu und versuchte es erneut, und es funktionierte! Ich muss einen anderen Fehler in meinem Code verpasst haben. Danke :) –

+0

Hier ist die gleiche Frage http://stackoverflow.com/questions/10459487/difference-between-public-static-and-private-static-variables – Neeraj

Antwort

0

Ich verstehe nicht, warum der Gültigkeitsbereich der in der Shadow-Klasse deklarierten Variablen nicht die Hauptmethode erreicht, um einen Duplizierungsfehler zu verursachen.

Der Gültigkeitsbereich der Klassenvariablen erreicht die Hauptmethode. Aber die Lektion ist Beschattung. Es sollte keinen Fehler geben.

die Variable i kann als private static nicht deklariert werden, wenn es dann in der for-Schleife verwendet wird, da die Werte von i in der for-Schleife, temporäre sind

Für Schleifenvariablen temporär und lokal Bereich, ja, aber Ihre Argumentation ist nicht korrekt. Sie können eine lokale Variable nicht als private oder static deklarieren. Das ist das.

Ich verstehe nicht, wie dann die Variable i im zweiten Teil des Codes gültig ist, weil es immer noch privat ist.

private ist nicht das Problem. Die Variable könnte Standard, geschützt oder öffentlich sein. Der Code ist noch gültig. Tatsächlich scheinen beide Codebeispiele gültig zu sein.

Im ersten können Sie eine statische Variable mit Shadow3.i, für die andere verweisen Sie eine Instanzvariable, also innerhalb der doSomething Methode, Sie this.i oder Shadow4.this.i

+0

Vielen Dank für die sich die Zeit nehmen zu beantworten. Ich habe gerade festgestellt, dass es einen separaten Fehler mit meinem Code gab, der dazu führte, dass es so aussah, als ob private/static das Problem war, wenn es nicht war. –

+0

Willkommen. Fühlen Sie sich frei, die Antwort mit dem Häkchen neben dem Beitrag zu akzeptieren, wenn dies Ihr Problem anspricht –

Verwandte Themen