Java Error - Ungültiger Modifikator für Parameter - Nur endgültig Erlaubt

8

Was stimmt nicht mit dem unten stehenden Code?

%Vor%

Der String-Referenzname zeigt den Kompilierungsfehler an - Java-Fehler - unzulässiger Modifikator für den Parameternamen - Nur endgültig zulässig

Ich bin mit den unten angegebenen Vorschlägen einverstanden, aber ich möchte verstehen, warum das nicht erlaubt ist, obwohl beide statisch sind?

    
user3110336 22.01.2014, 10:17
quelle

7 Antworten

18

Sie haben Ihre Frage geändert, um zu fragen:

  

Ich möchte verstehen, warum es nicht erlaubt ist, obwohl beide statisch sind?

Variablen innerhalb einer Methode existieren nur im Stapelrahmen. Die JVM erstellt bei jedem Aufruf einer Methode einen neuen Stapelrahmen, der nach Abschluss der Methode verworfen wird.

Das Schlüsselwort public wird für Klassen, Methoden und Felder verwendet, um den Zugriff zu steuern. Das ist kein Konzept des Zugriffs, der auf eine Stapel (lokale) Variable angewendet werden könnte. Es existiert nur innerhalb der Methode, wenn es aufgerufen wird, und kann nur innerhalb der Methode aufgerufen werden.

Das Schlüsselwort static wird für Felder verwendet, um anzugeben, dass nur ein solches Mitglied in allen Instanzen einer Klasse vorhanden ist, und über Methoden, um sie als Mitglieder der Klasse zu erstellen, für die keine Instanz erforderlich ist. Es gibt kein Konzept eines statischen Zustands für irgendetwas auf dem Stapel; es ist vorübergehend. Der Stapelrahmen und alle darin enthaltenen lokalen Variablen werden nicht mehr angezeigt, wenn Sie von einem Methodenaufruf zurückkehren.

Grundsätzlich macht es keinen Sinn, wenn man über eine lokale Variable spricht.

    
Brian Roach 22.01.2014 10:39
quelle
3

Sie können dies nicht in main deklarieren, sondern außerhalb der Methode, Sie wollen es als [ Klassenmitglied ]:

%Vor%

Andernfalls (ich glaube nicht, dass Sie das wollen) entfernen Sie einfach public static von dort und schreiben Sie einfach:

%Vor%     
Maroun 22.01.2014 10:18
quelle
3

Wie man es repariert

public und static können nicht innerhalb einer -Methode -Definition verwendet werden. Dieser Fehler sagt Ihnen also, dass der einzige Modifizierer, der für eine Variable zulässig ist, die innerhalb einer -Methode definiert ist, final ist.

Sie beheben es, indem Sie entweder die fehlerhaften Modifikatoren entfernen:

%Vor%

oder Verschieben der Variablendefinition aus der Methode wie folgt

%Vor%

Erklärung

Um zu verstehen, warum, müssen Sie verstehen, was jeder der drei Modifikatoren ( public und static und final ) allein bedeutet. String Name sagt nur, dass wir einen String im Auge behalten und ihn Name nennen.

öffentlich

%Vor%

public sagt, dass jeder Teil des Programms es lesen kann (sonst könnte es nur von Code gelesen werden, der in der Klasse MyClass geschrieben wurde).

public gibt an, welcher anderer Code Zugriff darauf hat. Innerhalb einer Methode macht das keinen Sinn. Auf Variablen, die in Methoden definiert sind, kann nur innerhalb dieser Methode zugegriffen werden, und sobald die Methode abgeschlossen ist, werden sie verworfen. Daher wäre es unmöglich, dass diese Variablen public sind.

statisch

%Vor%

static sagt, dass die Variable Name ein Teil der Klasse selbst und nicht einer Instanz der Klasse ist. Mit anderen Worten, alle Instanzen der Klasse MyClass teilen dieselbe Name Variable.

static gibt an, wie auf sie zugegriffen wird (entweder für eine Instanz der Klasse oder über die Klasse selbst). Innerhalb einer Methode ist dies nicht sinnvoll, da lokale Variablen nach dem Schließen der Methode verworfen werden, sodass nichts anderes darauf zugreift.

final

%Vor%

final sagt, dass sich der Wert von Name niemals ändert, sobald er zugewiesen wurde.

final beschreibt, wie die Variable verwendet wird. Es macht Sinn innerhalb einer Methode, weil es nicht um den Zugriff geht.

    
Nathan Hinchey 14.01.2018 08:15
quelle
1

Sie können den öffentlichen statischen Modifikator nicht für eine lokale Variable verwenden. Führen Sie einen der folgenden Schritte durch

%Vor%

oder deklarieren Sie es als eine Membervariable

%Vor%

Denken Sie daran, dass das letzte das einzige Modifier der lokalen Variablen ist

    
stinepike 22.01.2014 10:21
quelle
0

Sie können eine lokale Variable (Variablen in Methoden sind lokale Variablen) nicht als public static deklarieren. Stattdessen wird der folgende Code funktionieren:

%Vor%     
Weibo Li 22.01.2014 10:21
quelle
0

wie Sie die String-Variable deklarieren als public static final String Name="Robin Wilson";

Gemäß den Java-Regeln ist This String name die lokale Variable, da Sie sie in der Methode Main deklarieren. Also nur das Finale ist hier erlaubt. Sie können es als ** final String name="Robin Wilson"; ** in der Hauptmethode definieren. Für Lokale Variablen ist nur final zulässig.

    
JavaFreak 22.01.2014 10:23
quelle
0

Statische Deklaration einer Komponente macht auf Klassenebene verfügbar. Die Deklaration einer Komponente in einer Methode wird im Stapelspeicher der Methode verfügbar gemacht und kann daher nur über ein Objekt aufgerufen werden. Statik gehört zur ganzen Klasse. Daher hat es keinen Sinn, eine Variable statisch zu deklarieren. Sie erhalten sogar den Fehler Kompilierzeit, wenn Sie dies versuchen. Endgültiges Schlüsselwort hat nichts mit Speicher zu tun.

    
codechefvaibhavkashyap 11.08.2017 11:02
quelle

Tags und Links