2016-06-10 5 views
-1

Wie können wir auf statische Variable ohne Klassennamen zugreifen? Statische Variablen werden immer mit dem Klassennamen qualifiziert, aber in diesem Fall kann ich sie ohne Klassennamen verwenden. wie es möglich ist ??Wie können wir auf statische Variable ohne Klassennamen zugreifen

class Student 
    { 
    String email; 
    String name; 
    long phone; 
    static String school="jlc"; 

    public static void main(String[] args) 
    { 

    Student st= null; 
    System.out.println(school);//this should be Student.school but its working. 
    } 


    } 

Im folgenden Programm nach Schüler-Objekt erstellt werden Variablen bereits in den Speicher geladen, aber ich kann es nicht direkt mit aus zugreifen Objekt mit reference.but wir für statische tun können.

class Student 
{ 
String email; 
String name; 
long phone; 
static String school="jlc"; 

public static void main(String[] args) 
{ 

Student st= new Student(); 
System.out.println(email); 
} 


} 
+3

Sie sind ** in ** Studenten , so ist es implict –

+0

hier 'main' Methode ist' static' – emotionlessbananas

+0

unter können Sie nicht auf sie verweisen, weil sie nicht statisch existieren. Sie müssen angeben, welche Instanz sie hat: "st.email" zum Beispiel. – zapl

Antwort

3

Statische Variable werden immer mit Klassennamen

Zunächst einmal qualifiziert, ist es nicht wahr, dass Sie mit einem Klassennamen zu qualifizieren, Sie kann einen statischen Import zum Beispiel verwenden:

import static java.lang.Math.PI; 

Als nächstes können Sie sich auf Math.PI beziehen, indem Sie einfach PI verwenden. Zum Beispiel:

import static java.lang.Math.PI; 

public class Foo { 

    public static void main (String[] args) { 
     System.out.println(PI); 
    } 

}

Weitere Informationen finden Sie here finden.

Als nächstes, solange Sie im Bereich der Klasse sind, können alle statischen Mitglieder direkt adressiert werden, ohne sich zu qualifizieren.Mit anderen Worten: dieses Codefragment:

public class Foo { 

    public static int static_member; 

    //within this scope you can call static_member without Foo. 

}
1

Sie müssen ClassName.staticMemberName nur angeben, wenn Sie es von außerhalb der Klasse beziehen.

In Ihrem Fall, Ihr statisches Mitglied innerhalb der Klasse.

Ihre zweite Frage zu beantworten:

Nicht statische Mitglieder nicht direkt in einer statischen Methode verwendet werden können. Es sollte Objektreferenz haben.

Ihre Erklärung sollte so sein wie

System.out.println(st.email); 
+0

Das gleiche sollte für nicht statische Variable funktionieren. Nachdem wir ein Objekt erstellt haben, werden nicht statische Variablen in den Speicher geladen, und wir sind in derselben Klasse. Können wir also direkt auf nicht statische Variable zugreifen? –

+0

Hier geht es nicht um Speicher. Sie können ein weiteres Student-Objekt in demselben main() erstellen. Nun, wenn Sie direkt E-Mail sagen, welche Objekt-E-Mail sollte Java geben? –

+0

vielen Dank Bhargav Kumar. Da die Instanzvariable mehrfach verwendet werden kann, müssen wir angeben, welche. –

1

Sie eine statische Methode, die Klasse in der gleichen Klasse ohne Referenzierung aufrufen können Sie in sind, oder durch die Verwendung eines statischen Import.

public class Student { 
    public static void someStatic() { 
    } 

    public static void otherStatic() { 
     someStatic(); //works 
    } 
} 

auch:

import static Student.*; 
public class OtherClass { 
    public static void other() { 
     someStatic(); //calls someStatic in Student 
    } 
} 
1

Dies funktioniert, weil Sie in der Schüler-Klasse sind so es

public class Student { 
    public static final String SCHOOL ="Harvard"; 

    public static void main(String[] args) { 
     System.out.println(SCHOOL); 
    } 
} 

Output implizit ist: Harvard

public class Teacher { 
    public static final String SCHOOL ="Harvard"; 
} 

public class Student { 
    public static final String SCHOOL ="MIT"; 

    public static void main(String[] args) { 
     System.out.println(SCHOOL); 
     System.out.println(Teacher.SCHOOL); 
    } 
} 

Ausgang: MIT

Ausgabe: Harvard

Dies zeigt auch, warum diese Arbeit funktioniert, denn jetzt können wir sowohl einen Lehrer als auch einen Schüler drucken, die beide eine schulische Eigenschaft haben.

Der zweite Teil Ihrer Frage:

Sie keine E-Mail direkt, weil Ihr Haupt Methode ist statisch aufrufen können. Sie müssen also nicht nur das neue Studentenobjekt erstellen, sondern es auch verwenden.

public class Teacher { 
     public static final String SCHOOL ="Harvard"; 
     public String Email = "[email protected]"; 
    } 

    public class Student { 
     public static final String SCHOOL ="MIT"; 
     public String Email = "[email protected]"; 

     public static void main(String[] args) { 
      System.out.println(SCHOOL); 
      System.out.println(Teacher.SCHOOL); 

      Student student = new Student(); 
      System.out.println(student .Email); 

      Teacher teacher = new Teacher(); 
      System.out.println(teacher.Email); 
     } 
    } 

Ausgang: MIT

Ausgang: Harvard

Ausgang: [email protected]

Ausgang: [email protected]