2015-07-24 10 views
12

Als ich gerade versuche, irgendein Programm in Java zu tun .Ich versuchen final Variable zu verwenden, ich weiß, dass final Variable bei der Deklaration initialisiert werden muss, aber im Innern des Hauptverfahrens akzeptiert sie die final Variable aus der Initialisierung . Ich weiß nicht, was der Grund ist. Kann mir jemand den Grund sagen.Warum die letzte Variable keine Initialisierung in der Hauptmethode in Java benötigt?

Danke

Code:

class name 
{ 
    final int b; //here shows error 
    public static void main(String args[]) 
    { 
     final int a; // here no error... why? 
     System.out.println("hai"); 
    } 
} 
+2

Zeigen Sie uns Ihren Code so können wir Ihnen helfen –

+0

können Sie Ihren Code teilen – MMMMS

+0

@DavideLorenzoMARINO mein Update – KVK

Antwort

10

Für Instanzvariable Ebene

  • Eine letzte Variable kann nur einmal initialisiert werden.

  • Eine letzte Variable auf Klassenebene muss vor dem Ende des Konstruktors initialisiert werden.

Für local (Methode) Ebene

  • Eine letzte Variable bei Methode Ebene kann nur einmal initialisiert werden.
  • Es muss initialisiert werden, bevor es im Grunde kann man auch eine lokale letzte Variable verwenden, wenn Sie nicht so

verwendet wird, überspringen sie die Initialisierung ist.

Wenn die Variable auf Instanzebene ist, müssen Sie sie in der Definition oder im Konstruktorkörper initialisieren.

In Ihrem Code haben Sie eine Instanzvariable final int b, die nie initialisiert wird, so dass Sie einen Fehler haben.

Sie haben auch eine lokale Variable final int a, die nie verwendet wird. Sie haben also keinen Fehler für diese Variable.

+1

ok danke für deine erklärung – KVK

2

Die Antwort in JLS vorgesehen ist.

Eine Variable kann als final deklariert werden. Eine letzte Variable darf nur einmal vergeben werden. Es ist ein Fehler bei der Kompilierung, wenn eine letzte Variable zugewiesen wird, sofern sie nicht unmittelbar vor der Zuweisung definitiv nicht zugewiesen wurde.

What is definitive assignment

, nun bei einer lokalen Variablen, es Anwendungsbereich ist, ist innerhalb des Blocks gültig es erklärt wird. Und der Fluss wird linear sein (von oben nach unten). So kann der Compiler leicht identifizieren, wo die Variable zuerst initialisiert wird.

Aber im Falle eines field, ist es unmöglich zu finden, welche Methode die Variable zuerst zuweisen wird, es sei denn, es ist eine Zuweisung in einem Constructor.

So müssen Sie final fieldswährend der Deklaration oder in einem Konstruktor zuweisen.

1

lokale Variable hat keinen Standardwert richtig, bt wir wie dieses

final int a erklären kann; gibt es keinen Fehler , aber wir können nicht darauf zugreifen. Wenn wir versuchen, darauf zuzugreifen, tritt ein Fehler auf. Aber dieser Fall ist nicht für die Klassenvariable.

Also in Ihrem Fall, wenn Sie zugreifen, um den Wert einer Variablen zu drucken, treten Fehler auf. Dank

Verwandte Themen