error: <identifier> expected

Conny88

Mitglied
Hallo zusammen
Ich möchte diesen Code hier ausführen:

Code:
class Mitarbeiter2 {   
    String m_name;           
    String m_vorname;             
    int    m_gehalt;
 
  Mitarbeiter2(String m_name, String m_vorname,
                int m_gehalt); {
    m_name = name;
    m_vorname = vorname;
    m_gehalt = gehalt;
  }
        
  void datenAusgeben() {
    System.out.println("\n");
    System.out.println(" Name : " + m_name);
    System.out.println(" Vorname : " + m_vorname);
    System.out.println(" Gehalt : " + m_gehalt + " Euro");
    }
    
  void gehaltErhoehen(int erhoehung) {
     m_gehalt += erhoehung;
  }
}

public class MitarbeiterBeispiel {
    public static void main(new Mitarbeiter("Gates","Bill",3000);
        Mitarbeiter stevie = new Mitarbeiter("Jobs","Steve",3500);
        billy.datenAusgeben();
        stevie.datenAusgeben();
        
        billy.gehaltErhoehen(500);
        
        billy.datenAusgeben();
        stevie.datenAusgeben();
    }
}

Erhalten sollte ich gemäss dem Buch "Java - eine Einführung in die Programmierung" (von Dirk Louis und Peter Müller) die Datei lm Anhang "das sollte kommen in Eingabeaufforderung".

Bei mir erscheinen aber die folgenden ERROR-Meldungen:

Code:
C:\Program Files\Java\Quellcodes\Kap03>javac MitarbeiterBeispiel.java
MitarbeiterBeispiel.java:26: error: illegal start of type
        public static void main(new Mitarbeiter("Gates","Bill",3000);
                                ^
MitarbeiterBeispiel.java:28: error: <identifier> expected
                billy.datenAusgeben();
                                   ^
MitarbeiterBeispiel.java:29: error: <identifier> expected
                stevie.datenAusgeben();
                                    ^
MitarbeiterBeispiel.java:31: error: <identifier> expected
                billy.gehaltErhoehen(500);
                                    ^
MitarbeiterBeispiel.java:31: error: illegal start of type
                billy.gehaltErhoehen(500);
                                     ^
MitarbeiterBeispiel.java:33: error: <identifier> expected
                billy.datenAusgeben();
                                   ^
MitarbeiterBeispiel.java:34: error: <identifier> expected
                stevie.datenAusgeben();
                                    ^
MitarbeiterBeispiel.java:36: error: class, interface, or enum expected
}
^


Irgendetwas (identifier -> was ist das) wird erwartet

Wisst ihr, an was das liegen könnte? Ich habe es auf x-verschiedene Arten versucht, aber ich komme seit etwa 3 Stunden nicht weiter.

Wär super, wenn ihr mir helfen könntet. :)
 

Anhänge

  • das sollte kommen in Eingabeaufforderung.jpg
    das sollte kommen in Eingabeaufforderung.jpg
    32,6 KB · Aufrufe: 5

httpdigest

Top Contributor
Da hast du an einigen Stellen den Java Code wohl falsch vom Buch abgeschrieben. Ich habe das mal korriegiert:
Java:
class Mitarbeiter { // <- Klassenname war mit "Mitarbeiter2" falsch (Mitarbeiter2 deklariert, aber als "Mitarbeiter" unten verwendet)
  String m_name;
  String m_vorname;
  int m_gehalt;

  Mitarbeiter(String m_name, String m_vorname, int m_gehalt) { // <- Konstruktor-Deklaration war falsch
    this.m_name = m_name; // <- Zuweisung war falsch
    this.m_vorname = m_vorname; // <- Zuweisung war falsch
    this.m_gehalt = m_gehalt; // <- Zuweisung war falsch
  }

  void datenAusgeben() {
    System.out.println("\n");
    System.out.println(" Name : " + m_name);
    System.out.println(" Vorname : " + m_vorname);
    System.out.println(" Gehalt : " + m_gehalt + " Euro");
  }

  void gehaltErhoehen(int erhoehung) {
    m_gehalt += erhoehung;
  }
}

public class MitarbeiterBeispiel {
  public static void main(String[] args) { // <- Signatur der main-Methode war falsch
    Mitarbeiter billy = new Mitarbeiter("Gates", "Bill", 3000); // <- fehlende Deklaration der "billy" Variable
    Mitarbeiter stevie = new Mitarbeiter("Jobs", "Steve", 3500);
    billy.datenAusgeben();
    stevie.datenAusgeben();
    billy.gehaltErhoehen(500);
    billy.datenAusgeben();
    stevie.datenAusgeben();
  }
}
 

Conny88

Mitglied
Ja, ich habe gesehen, dass ich einige Texte angepasst habe, um die ERROR-Meldung verschwinden zu lassen. ;) Sorry dafür...

Aber wie kommt man bei den Zeilen 7 - 9 auf

Code:
    this.m_name = m_name;
    this.m_vorname = m_vorname;
    this.m_gehalt = m_gehalt;

das steht nicht in meinem Buch. Es steht so in meinem Buch siehe Anhang.

Im Buch steht es so:
Code:
  Mitarbeiter(String name, String vorname, int gehalt) {  //-> ohne das "m_" wie in deinem bzw. meinem Code
    m_name = name;
    m_vorname = vorname;
    m_gehalt = gehalt;
  }

Was heisst das "this"?

Vielen Dank für deine Hilfe. :)
 

Anhänge

  • Buch 1.jpg
    Buch 1.jpg
    25,4 KB · Aufrufe: 4
  • Buch 2.jpg
    Buch 2.jpg
    24,2 KB · Aufrufe: 4

httpdigest

Top Contributor
`this` bedeutet "diese Instanz". Wann immer du eine Instanzvariable oder eine Instanzmethode referenzierst, kannst du dir ein implizites `this.` davor denken. Das war dort nötig, da deine Konstruktorparameter in deinem ersten Post genauso hießen wie deine Instanzvariablen (beide hießen "m_name", "m_vorname" und "m_gehalt").
Das `this` dient dazu, im einen Fall die Instanzvariable zu meinen.

Würde man also z.B. nur schreiben:
Java:
Mitarbeiter(String m_name, String m_vorname, int m_gehalt) {
  m_name = m_name;
  m_vorname = m_vorname;
  m_gehalt = m_gehalt;
}
dann wären das Zuweisungen auf dieselben Parameter und nicht auf die Instanzvariablen.

Das ganze kann man natürlich auch umgehen, indem man eben die Parameter nicht so nennt wie die Instanzvariablen, wie du es in deinem letzten Post getan hast.
 

mihe7

Top Contributor
@Conny88 Übrigens: der Präfix "m_" wird in der ungarischen Notation dazu verwendet, Instanzvariablen (sog. Member, daher das m) zu kennzeichnen. Dagegen stünde der Präfix "p_" für einen Parameter. Entsprechend angewandt müsste der Konstruktor also lauten:
Java:
Mitarbeiter(String p_name, String p_vorname, int p_gehalt) {
    m_name = p_name;
    m_vorname = p_vorname;
    m_gehalt = p_gehalt;
}
Über Sinn und Unsinn dieser Notation lässt sich streiten, in dieser Form widerspricht sie aber den Benennungskonventionen von Java. Benenne die Variablen wenigstens in lowerCamelCase.
 

Conny88

Mitglied
Hallo zusammen
Vielen Dank für eure Hilfe. :)

Etwas ist mir noch unklar:
Wieso nennt man die drei "m_name", "m_vorname" und "m_gehalt" nicht von Anfang an nur "name", ... ohne das m davor?

Ich hätte es eher so gemacht:

Code:
class Mitarbeiter {   
    String name;           
    String vorname;             
    int    gehalt;
 
  Mitarbeiter(String name, String vorname, int gehalt) {
  name;
  vorname;
  gehalt;
  }
        
  void datenAusgeben() {
    System.out.println("\n");
    System.out.println(" Name : " + name);
    System.out.println(" Vorname : " + vorname);
    System.out.println(" Gehalt : " + gehalt + " Euro");
    }
    
  void gehaltErhoehen(int erhoehung) {
     gehalt += erhoehung;
  }
}

public class MitarbeiterBeispiel2 {
public static void main(String[] args) {
    
    Mitarbeiter billy = new Mitarbeiter("Gates", "Bill", 3000);
        Mitarbeiter stevie = new Mitarbeiter("Jobs", "Steve", 3500);
        billy.datenAusgeben();
        stevie.datenAusgeben();
        billy.gehaltErhoehen(500);
        billy.datenAusgeben();
        stevie.datenAusgeben();
    }
}


Hier kommt folgende ERROR-Meldung:

Code:
C:\Program Files\Java\Quellcodes\Kap03>javac MitarbeiterBeispiel2.java
MitarbeiterBeispiel2.java:7: error: not a statement
  name;
  ^
MitarbeiterBeispiel2.java:8: error: not a statement
  vorname;
  ^
MitarbeiterBeispiel2.java:9: error: not a statement
  gehalt;
  ^
3 errors


Was meint man hier mit "keine Stellungnahme"?
 

thecain

Top Contributor
Willst du nicht nochmal die Grundlagen lesen? Offenbar haben die oberen Beiträge nicht geholfen...

Not a statement ist nicht 1 zu 1 zu übersetzen...
 

httpdigest

Top Contributor
Du hast einfach nur die drei Zeilen:
Java:
  name;
  vorname;
  gehalt;
in den Body deines Konstruktors geschrieben. Was meinst du denn, sollten diese drei Zeilen bewirken?
Statement = Anweisung.
"Not a statement" bedeutet: "Das ist keine Anweisung (im Sinne von Java)".
 
K

kneitzel

Gast
Etwas ist mir noch unklar:
Wieso nennt man die drei "m_name", "m_vorname" und "m_gehalt" nicht von Anfang an nur "name", ... ohne das m davor?

Also nur zu der Frage kurz: Genau so ist die "übliche" Vorgehensweise in Java. So wie @mihe7 es in #5 angedeutet hat: Es gibt diverse Notationen. Die in Java übliche ist, dass man bei Variablen keine Präfixe verwendet. Damit sollten Variablen und Parameter einfach nur den Namen haben, der sie bezeichnet.
==> name, vorname, gehalt.

Wenn man aber andere Notationen anschaut, dann findet man oft Präfixe. @mihe7 hat hier dann bei der ungarischen Notation das m_ und p_ genannt. (m für Member und p für Parameter). Das ist aber nur extrem einfach - bei C/C++ wird das mit dem Typ genauer gemacht, also dann hat man z.B. pszBuffer -> Der Name soll buffer sein und es ist ein Zeiger (pointer: p) zu einer Zeichenkette (String: s) die mit einem 0-Wert termininiert ist (Zero: z) -> pszBuffer.

Aber wie gesagt: In Java ist der Standard eigentlich so, dass gar kein Präfix verwendet wird! Also wirklich nur name, vorname, gehalt.

Und die Grundlagen, die Du Dir genau ansehen solltest - einmal in Kürze dargestellt:

Java:
// Eine Klasse Test
public class Test {
    private String name; // Eine Instanzvariable vom typ String mit Namen "name".
    
    public void someMethod() {
        name = ""; // Zugriff auf die Instanzvariable "name"
        this.name = ""; // Wie oben, das this. ist optional.
    }
    
    public void someMethod(String name) {
        // Der Parameter name "versteckt" nun die Instanzvariable name.
        
        this.name = name; // this.name ist die Instanzvariable, name der Parameter!
        
        name = ""; // Dies setzt nicht die Instanzvariable auf "" sondern den Parameter! (Macht natürlich so keinen Sinn und ist nur zur Erläuterung angegeben.)
    }
}

Also was Du Dir in Deinen Unterlagen / in einem Buch noch einmal im Detail ansehen solltest ist:
- Variablen: Wie werden diese Deklariert? Wo kann man diese deklarieren? Und der Gültigkeitsbereich von Variablen.
- dieses "verstecken" einer Instanzvariable durch Parameter oder lokale Variablen!
 

mihe7

Top Contributor
Da war @JustNobody mal wieder schneller. Hinzufügen könnte man noch, dass

a) die Notation ihren Ursprung tatsächlich in C/C++ haben dürfte (lt. Wiki-Artikel wurde sie ja von einem ungarischen Microsoft-Mitarbeiter ursprünglich für die Entwicklung von Office entwickelt und dann für ganz Windows übernommen.) Dort macht die Notation auch wesentlich mehr Sinn, da man viel mehr Typen, globalen Variablen etc. zu unterscheiden hat.

b) unter Android ebenfalls diese Notation verwendet wird. Hintergrund ist, dass die Android-Entwickler nicht aus der Java- sondern ebenfalls aus der C/C++-Ecke kamen, genauer gesagt https://beust.com/weblog/2017/07/17/i-am-the-reason-for-hungarian-notation-in-android/ :)
 

M.L.

Top Contributor
Noch kurz zur ungarischen Notation: man sollte eine Variable (für einen Menschen) sinnvoll benennen, siehe Erklärung für pszBuffer. In C++ ist eine Variable/Parameter/Methode aber gerade _nicht_ zwingend Member ( "m_ ") einer Klasse (im Ggs. zu Java) und Speichermanipulationen (Pointer/Referenzen) wie in C++ sind in Java auch nicht möglich.
 

temi

Top Contributor
Und die Grundlagen, die Du Dir genau ansehen solltest - einmal in Kürze dargestellt:

Also was Du Dir in Deinen Unterlagen / in einem Buch noch einmal im Detail ansehen solltest ist:
- Variablen: Wie werden diese Deklariert? Wo kann man diese deklarieren? Und der Gültigkeitsbereich von Variablen.
- dieses "verstecken" einer Instanzvariable durch Parameter oder lokale Variablen!

Ergänzend zu den sehr schönen Erläuterungen von @JustNobody noch

Java:
    public void someMethod(String name) { // hier wird eine Variable vom Typ String mit dem Namen name deklariert
        // Der Parameter ist also auch nur eine Variable und zwar eine lokale Variable, die nur innerhalb der Methode gültig ist.
        // Der Parameter name "versteckt" nun die Instanzvariable name.
        
        this.name = name; // this.name ist die Instanzvariable, name der Parameter!
        
        name = ""; // Dies setzt nicht die Instanzvariable auf "" sondern den Parameter! (Macht natürlich so keinen Sinn und ist nur zur Erläuterung angegeben.)
    } // an dieser Stelle endet die Gültigkeit der Variablen / des Parameters "name"
 

Conny88

Mitglied
Ich habe mir die Theorie des Konstruktors, der Variablen und des Parameters nochmals durchgelesen und verstehe, dass es überhaupt keinen Sinn macht, nur "name", "vorname" und "gehalt" zu schreiben. :rolleyes:

Es fällt mir sehr schwer, ohne Vorwissen das Buch "Java - eine Einführung in die Programmierung" zu verstehen. Daher werde ich die Theorie in Zukunft mehrmals durchlesen, da ich länger benötige um es zu verstehen.

Mit euren Erklärungen ist es mir beim nochmaligen Lesen aber viel leichter gefallen. :)

Daher bedanke ich mich nochmals bei allen für eure Geduld und Erklärungen. :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
terashy VS Code Project run error Java Basics - Anfänger-Themen 10
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
monsterherz error: <identifier> expected Java Basics - Anfänger-Themen 2
R Compiler-Fehler identifier error? Java Basics - Anfänger-Themen 3
N Compiler-Fehler Not a statement Error Java Basics - Anfänger-Themen 7
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
richrich99 error: illegal start of expression Java Basics - Anfänger-Themen 10
M error: '.class' expected switch(char) Java Basics - Anfänger-Themen 32
N Compiler-Fehler State Machine - Compiler Error Java Basics - Anfänger-Themen 48
U Interface als PAramter (Vergleich) und ein Error Java Basics - Anfänger-Themen 9
FHEFHJHFJH error: class names, 'summe_bsp', are only accepted if annotation processing is explicitly requested Java Basics - Anfänger-Themen 3
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
P Eclipse Karate Framework API Test . Unexpected Error: the trustAnchors parameter must be non-empty Java Basics - Anfänger-Themen 1
H Versteht jemand diesen Codewars Error? Java Basics - Anfänger-Themen 8
J Fehlermeldung: A JNI error Java Basics - Anfänger-Themen 3
Gaudimagspam Compiler Error Java Basics - Anfänger-Themen 3
Eule25 Arbeit mit long und int, Error: integer number too large Java Basics - Anfänger-Themen 2
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
B Methoden if-statement error, FX, Fehlermeldung Java Basics - Anfänger-Themen 6
K Error bei meinem Programm - Hilfe Java Basics - Anfänger-Themen 8
A Scanner-Error Java Basics - Anfänger-Themen 8
Elyt Error: incompatible types Java Basics - Anfänger-Themen 3
I Client ObjectInputStream error... Java Basics - Anfänger-Themen 5
Kirby.exe Alle möglichen Error Möglichkeiten abfangen Java Basics - Anfänger-Themen 33
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
N Methoden Unerklärliche Error Meldung Java Basics - Anfänger-Themen 3
ZH1896ZH Datentypen Error bei For-Schleife Java Basics - Anfänger-Themen 2
R Error, wenn mehrere Clients gleichzeitig die Verbindung beenden Java Basics - Anfänger-Themen 16
Z Klassen Error: ';' expected - was mache ich falsch? Java Basics - Anfänger-Themen 4
9 Error bei .split() Java Basics - Anfänger-Themen 2
L Operatoren error: bad operand types for binary operator && Java Basics - Anfänger-Themen 8
B cal4j - Error at line 1:Unexpected end of file Java Basics - Anfänger-Themen 0
F Erste Schritte error: cannot find symbol Java Basics - Anfänger-Themen 5
L SQLITE - Syntax error Java Basics - Anfänger-Themen 3
R else without if error Java Basics - Anfänger-Themen 5
A Objekt in Methode zurückgeben, JUnit zeigt Error Java Basics - Anfänger-Themen 2
F Ausdruck wirft unerwarteten Error Java Basics - Anfänger-Themen 2
T Unverständlicher Launch-Error Java Basics - Anfänger-Themen 11
L Bluej Error: Cannot find Symbol Java Basics - Anfänger-Themen 13
R java.lang.ArrayIndexOutOfBoundsException: 0 Rechner Error Java Basics - Anfänger-Themen 4
F Taschenrechner "Error loading class..." Java Basics - Anfänger-Themen 5
T Error: int cannot be dereferenced Java Basics - Anfänger-Themen 10
D Datentypen Datentyperstellung | Kompiler sagt Syntax Error doch ich find keine Lösung Java Basics - Anfänger-Themen 2
J Syntax error on token ";",, expected Java Basics - Anfänger-Themen 2
W double*double error Java Basics - Anfänger-Themen 4
C Compiler-Fehler No such Field error Java Basics - Anfänger-Themen 20
B Linux - Error: Could not find or load main class application.Main Java Basics - Anfänger-Themen 28
T Datum wird auf der Konsole richtig ausgegeben, aber im Textarea kommt ERROR Java Basics - Anfänger-Themen 8
C Erste Schritte Syntax Error Java Basics - Anfänger-Themen 23
H Variablen error: non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 4
H Compiler-Fehler error not a statement Java Basics - Anfänger-Themen 2
N Error bei eingabe eines Punktes Java Basics - Anfänger-Themen 1
T error: class, interface, or enum expected Java Basics - Anfänger-Themen 5
TheMenox Error bei Scanner - woher? Java Basics - Anfänger-Themen 14
D Compiler-Fehler error: .class expected Java Basics - Anfänger-Themen 2
Chr1s Interpreter-Fehler Error Fehlercode Java Basics - Anfänger-Themen 7
D Bitte um Hilfe bei "error: package com.apple.eawt does not exist import com.apple.eawt.*;" Java Basics - Anfänger-Themen 1
J Error: cannot find symbol - variable Java Basics - Anfänger-Themen 3
S Compiler-Fehler error: ';' expected (finde Fehler nicht) Java Basics - Anfänger-Themen 10
D Erste Schritte Fehlermeldung "Syntax error on token ";", { expected after this token" Java Basics - Anfänger-Themen 13
L Compiler-Fehler error: class, interface or enum expected Java Basics - Anfänger-Themen 2
1 Bei if-Anweisung: Syntax error on token Java Basics - Anfänger-Themen 5
D Übung Felder java Error kompilieren Java Basics - Anfänger-Themen 4
Joew0815 Error org.apache.xmlrpc.client.XmlRpcClientConfigImpl.setUserAgent Java Basics - Anfänger-Themen 2
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
C Exception Error Java Basics - Anfänger-Themen 15
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
B Not a statement error Java Basics - Anfänger-Themen 2
D error: cannot find symbol Java Basics - Anfänger-Themen 3
B Frage zu Beispielprogramm: "error: cannot find symbol" Java Basics - Anfänger-Themen 2
F java Ip ping + Dateiausgabe error ! Java Basics - Anfänger-Themen 3
O Exception Error Java Basics - Anfänger-Themen 3
BlueMountain Erste Schritte error: cannot find symbol Java Basics - Anfänger-Themen 2
B Printf führt zu Error. Java Basics - Anfänger-Themen 8
P Fatal Error [...] librxtxSerial.so Java Basics - Anfänger-Themen 2
D error: Class names, >>>HILFE, anfänger<<< Java Basics - Anfänger-Themen 4
L Error: Cannot find symbol Java Basics - Anfänger-Themen 1
A Taschenrechner zeigt Error Java Basics - Anfänger-Themen 7
B Compiler-Fehler 86:11: error: ';' expected obwohl kein ";" hingehört! Java Basics - Anfänger-Themen 10
K Java-Editor: "Starten" bringt Error Java Basics - Anfänger-Themen 15
N Error "unreachable Code" Java Basics - Anfänger-Themen 7
A error: incompatible types Java Basics - Anfänger-Themen 9
T If ; else error on system token delete Java Basics - Anfänger-Themen 5
B Error vs Runtime exception Java Basics - Anfänger-Themen 4
W Variablen While-Error Java Basics - Anfänger-Themen 6
N Operatoren JSpinner und + Error Java Basics - Anfänger-Themen 21
M Java Arbeitsspeicherverbrauch, Heap Space error korrigieren? Java Basics - Anfänger-Themen 18
D Error bei addView Java Basics - Anfänger-Themen 4
M Syntax error on token ";", { expected after this token Java Basics - Anfänger-Themen 3
J Variablen Invalid Character - Error -> Spiel mit Variablenergebnissen Java Basics - Anfänger-Themen 8
K Erste Schritte eclipse syntax error token Java Basics - Anfänger-Themen 5
vandread String.split("\\") führt zu Error?! Java Basics - Anfänger-Themen 8
G Fehlermeldung: A fatal error has been detected by the Java Runtime Environment Java Basics - Anfänger-Themen 7
B Compiler-Fehler import java.io.*; führt zu error Java Basics - Anfänger-Themen 2
S Syntax Error - source level Java Basics - Anfänger-Themen 12
L bean error bei glassfish deploy Java Basics - Anfänger-Themen 2
B Syntax error Java Basics - Anfänger-Themen 6
K Error: java.lang.NoSuchMethodException Java Basics - Anfänger-Themen 2
K Objekt erstellen - error: non-static variable this cannot be referenced from a static context Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben