Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hi liebes Forum,
ich will eigentlich nur eine einfache Ausgabe haben, doch schon dabei scheitere ich -.-
kann mir vielleicht einer von euch sagen, wieso es hier einen Fehler gibt, wenn ich die Methode setAge(age) aufrufen will?
Java:
package javaapplication4;
public class Main {
int age;
void setAge(int age) {
if (age <= 0)
throw new IllegalArgumentException("No age <= 0 allowed!");
this.age = age;
}
public static void main(String[] args) {
setAge(5);
}
}
Eine neue Klasse für ein so einfaches Programm wäre übertrieben. Zuerst würde ich empfehlen das Programm zum Laufen zu bekommen, also einfach den Inhalt deiner main Methode mit bygones gepostetem Code ersetzen.
Die Codezeile kann man noch etwas ausführlicher schreiben:
Java:
Main myMainClass = new Main(); //ein Objekt deiner Klasse Main erstellen
myMainClass.setAge(5); //die Methode setAge(int) des Objektes myMainClass aufrufen
Um zu verstehen warum der vorheriger Quelltext nicht funktionierte muss man zwei Konzepte verstehen.
An erster Stelle steht der Unterschied zwischen Klasse und Objekt:
Eine Klasse, z.B. ein Rezept für Rinderbraten beschreibt Objekte, wie den rinderbraten, den ich mir heute machen werde. Der Unterschied besteht darin, dass die Klasse nicht einen bestimmten rinderbraten beschreibt, sonder alle rinderbraten, die je nach dem einen Rezept erstellt wurden. Jeder einzelne braten ist ein objekt.
Eine Klasse ist eine zusammenfassende Beschreibung vieler ähnlicher dinge.
Damit man leichter unterscheiden kann was Rezept und was tatsächlich ein braten ist beginnt man Klassen mit einem Großbuchstaben und objekte mit einem kleinen Buchstaben.
Zusammengefasst: Klasse := Beschreibung von Dingen, Objekt := Ding
Das zweite Konzept ist Java spezifisch:
In Java gibt es sogenannte statische Methoden und Attribute, die mit dem Schlüsselwort static versehen werden. Diese Methoden gehören der jeweiligen Klasse. Ein Beispiel:
Java:
package javaapplication4;
public class Braten { //Die Klasse (oder das Rezept) Braten (fängt mit einem Großbuchstaben an)
private static String name = "leckerer Rinderbraten mit Kartoffelklößen";
public void aufessen() {
System.out.println("Mampf.. "+name);
}
public static void ändereRezept(String rezept) {
name = rezept;
}
}
Hier sieht man eine statische Methode: ändereRezept() und eine statische Variable: name.
Und eine nicht statische Methode: aufessen().
Der Unterschied zwischen statisch und nicht statisch:
Statische Methoden gehören zur Klasse, können also direkt aufgerufen werden. Nicht statische Methoden können nur von Objekten aufgerufen werden:
Java:
package javaapplication4;
public class Main {
public static void main(String[] args) {
Braten.ändereRezept("leckerer Braten mit Blumenkohl"); //klappt , denn Braten ist die Klasse/das Rezept (Großbuchstabe)
Braten.aufessen(); //klappt nicht, weil Braten nur ein Rezept ist (wer will schon ein Stück Papier essen)
Braten meinSonntagsBraten = new Braten(); //Mit dem new Operator bäckt man den tatsächlichen braten (kleiner Buchstabe bei meinSonntagsBraten beachten)
meinSonntagsBraten.aufessen(); //den man genussvoll verzehren kann :)
}
}
Zusammengefasst: Das Rezept/die Klasse kann man ändern (mit statischen Methoden). Aber nur den Braten kann man essen (mit nicht statischen Methoden)
Für dein Programm heißt das, dass deine Klasse Main nicht das Alter setzen kann, da setAge nicht statisch ist.
Also erzeugt man zuerst ein objekt der Klasse mit "Main myMainObject = new Main();" um darauf die Methode aufzurufen "myMainObject.setAge(5);".
Statische Methoden kommen nur selten zum Einsatz. Ein Beispiel ist die Methode
Java:
public static void main(String[] args)
die immer statisch ist. Diese Methode ist der Einstiegspunkt in ein Programm, der von der JVM von außen aufgerufen wird. Dass die Methode statisch ist hat man einfach festgelegt.
Noch etwas grundlegendes: Klassen sollten Namen haben zu denen ihre Methoden und Attribute passen, wo man also intuitiv sagt "Ja, klar die Klasse X muss eine Methode Y haben.". Also könntest du Main umbenennen z.B. in Mensch, Katze oder Rind. Und jeder würde sagen: "Ja, klar die Klasse Mensch muss eine Methode setAge() haben." Das Umbenennen ist leider nicht so einfach, weil man auch den Dateinamen anpassen muss, wenn man den Namen der Klasse ändert. Wenn die Klasse Mensch heißt, dann muss die Datei Mensch.java heißen. In Eclipse geht das indem du im Verzeichnisbaum auf der linken Seite auf die Datei mit der rechten Maustaste drückst und dann auf Refactor->Rename gehst.
Erklären macht hungrig
Ich hoffe die Erklärung konnte dir etwas weiterhelfen.
Danke für die gute Erklährung, denn das mit den ganzen Methodentypen hab ich noch nich so ganz gerafft, war in meiner alten Programmiersprache irgendwie einfacher geregelt^^
Jetzt is mir schon einiges viel klarer^^
Aber leider hab ich jetzt auch Hunger bekommen XD