Einfacher Code funktioniert nicht...

Hindi93

Aktives Mitglied
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);
    }
}

Danke

mfg
 
B

bygones

Gast
du rufst von einem statische kontext eine instanzmethode auf...
Java:
new Main().setAge(5);
 

Mindstream

Aktives Mitglied
Also sowas is eher unschön und man sollte sowas über eine neue Klasse lösen?
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.

Grüße,
Mainstream
 

Hindi93

Aktives Mitglied
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
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Geht dieser Code noch einfacher (try catch finally) Java Basics - Anfänger-Themen 7
P Geht dieser Code noch einfacher? Java Basics - Anfänger-Themen 16
D Code einfacher,eleganter programmieren Java Basics - Anfänger-Themen 24
R Best Practice Problem mit (einfacher) Doppelt-Schleife Java Basics - Anfänger-Themen 53
R Einfacher Taschenrechner mit Eclipse Java Basics - Anfänger-Themen 3
M Einfacher Taschenrechner Java Basics - Anfänger-Themen 2
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
EinNickname9 Denkfehler bei einfacher Schleife Java Basics - Anfänger-Themen 83
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
N Methoden Einfacher SekundenTimer/Stopuhr in Java Java Basics - Anfänger-Themen 2
X Streams und Ausgabe - lässt sich das einfacher schreiben oder schöner schreiben? Java Basics - Anfänger-Themen 5
H wie mehrere variablen in einfacher for-schleife? Java Basics - Anfänger-Themen 2
N Einfacher Rechner (für mich nicht so einfach) Java Basics - Anfänger-Themen 5
? Klassen einfacher Fehler in einem Java Programm. Java Basics - Anfänger-Themen 5
V Einfacher vergleich von Arrays geht schief Java Basics - Anfänger-Themen 2
K Seltsames Ergebnis in Netbeans bei einfacher Multiplikation Java Basics - Anfänger-Themen 5
O Ein einfacher Chatbot (simuliert chat) Java Basics - Anfänger-Themen 7
R Einfacher Regex Java Basics - Anfänger-Themen 3
L Einfacher Methodenaufruf vs. Objekt Java Basics - Anfänger-Themen 4
K Einfacher random namen weitergeben Java Basics - Anfänger-Themen 4
A Lässt sich dieser Ausdruck irgendwie einfacher schreiben? Java Basics - Anfänger-Themen 4
H Einfacher Editor, Einfache Handelsanweisungen Java Basics - Anfänger-Themen 2
R Einfacher Timer geht nicht Java Basics - Anfänger-Themen 7
M Einfacher Timer ;) Java Basics - Anfänger-Themen 15
M Einfacher Swing Wizard Java Basics - Anfänger-Themen 3
El_Lobo Methoden Zu viele Getter- und Settermethoden - geht das einfacher? Java Basics - Anfänger-Themen 3
P falsches ergebnis bei einfacher berechnung Java Basics - Anfänger-Themen 3
M Einfacher Fenster-Ablauf Java Basics - Anfänger-Themen 5
M Gittermuster mit Stringbuilder und einfacher Schleife erstellen Java Basics - Anfänger-Themen 19
T Collections Werte aus einer HashMap auslesen, oder gehts auch einfacher ? Java Basics - Anfänger-Themen 6
F Datentypen Welchen Wert hat ein einfacher Datentyp nach der Deklaration? Java Basics - Anfänger-Themen 6
C einfacher Link zu *.html Datei möglich? Java Basics - Anfänger-Themen 4
P Einfacher Rechner Java Basics - Anfänger-Themen 2
T Einfacher Kalender Java Basics - Anfänger-Themen 17
B Frage zu einfacher Rechnung Java Basics - Anfänger-Themen 3
B Hilfe bei einfacher Funktion - Possible loss of precision Java Basics - Anfänger-Themen 2
G Einfacher Anfang mit Hibernate Java Basics - Anfänger-Themen 4
M ein einfacher button.. ich verzweifel...... Java Basics - Anfänger-Themen 41
F Von int zu double bei einfacher Rechnung Java Basics - Anfänger-Themen 2
C Einfacher Installer Java Basics - Anfänger-Themen 2
Chucky Einfacher Taschenrechner Verbesserungsvorschläge Java Basics - Anfänger-Themen 13
G Problem mit einfacher For-Schleife und Double Wert Java Basics - Anfänger-Themen 4
D Probleme bei einfacher Rechnung Java Basics - Anfänger-Themen 3
tomzen Programm ignoriert in der Ausführung Code Java Basics - Anfänger-Themen 8
O Obfuscateter Code lässt sich nicht ausführen? Java Basics - Anfänger-Themen 7
M Code aus IntelliJ in "Textform" für Word-Paper? Java Basics - Anfänger-Themen 10
T Kann mir jemand wörtlich erklären, was in dem Code genau passiert? Java Basics - Anfänger-Themen 1
Ü Dead Code im Programm? Java Basics - Anfänger-Themen 13
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
terashy VS Code Project run error Java Basics - Anfänger-Themen 10
JaZuDemNo Code Erklärung Java Basics - Anfänger-Themen 3
M Connect-4-Code analysieren Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
W In alten Code zurück- und dort wieder zurechtfinden? Java Basics - Anfänger-Themen 17
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
T Fehlercode bei code der das Alter ausrechnet Java Basics - Anfänger-Themen 2
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
jhfjeh Strukturgramm in code Java Basics - Anfänger-Themen 11
D Tipps zum Code Java Basics - Anfänger-Themen 24
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
ohneInformatik; For Schleife. Was macht dieser Code?? Java Basics - Anfänger-Themen 5
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
Say do-While Code Ausführung Java Basics - Anfänger-Themen 3
W Rückfrage zur Programmgestaltung (clean code) Java Basics - Anfänger-Themen 12
M intelliJ auf neuem PC, plötzlich kein Code Java Basics - Anfänger-Themen 3
Pinhg Sound in Greenfoot Code einbinden Java Basics - Anfänger-Themen 2
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
J Größter gemeinsamer Teiler: mein Code Java Basics - Anfänger-Themen 6
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
A Wie könnte man diesen Code kürzer machen ? Java Basics - Anfänger-Themen 7
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
S Hilfe bei Umänderung von Java Code Java Basics - Anfänger-Themen 16
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
K Wie kann man diesen Code schnell und effizient interpretieren (Man hat nur 4 Minuten) Java Basics - Anfänger-Themen 3
R ISBN-10-Code überprüfen Java Basics - Anfänger-Themen 7
I Bitte um Hilfe zu unterstehenden Code Java Basics - Anfänger-Themen 6
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
I HTML Code säubern Java Basics - Anfänger-Themen 4
B Brauche Hilfe zu einem Code Java Basics - Anfänger-Themen 5
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
N Java-Code abwärtskompatibel machen Java Basics - Anfänger-Themen 4
J Erste Schritte Was mache ich in meinem Code falsch. Java Basics - Anfänger-Themen 3
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
S Compiler-Fehler Nicht adressierbarer Code ( Non-addressable code ) Java Basics - Anfänger-Themen 5
Aemulit Java Schaltjahr berechnen Code Java Basics - Anfänger-Themen 7
A Code Problem Java Basics - Anfänger-Themen 6
C Fehler im Code Java Basics - Anfänger-Themen 10
A Zu einem bestimmten Ort im Code springen Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben