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.
*/ class Tierarztverwaltung
{
String Vorname;
String Nachname;
int alter;
int Gehalt;
}
class hund
{
String Hundename;
String Hundevorname;
int Hundealter;
}
public class Hund {
public static void main (String[]args){
// Hund anlegen
hund a = new hund();
a.Hundename ="Bello";
a.Hundevorname = "Rico";
a.Hundealter= 5;
Tierarztverwaltung M = new Tierarztverwaltung();
M.Vorname="Stephan";
M.Nachname="Mia";
M.alter=21;
M.Gehalt=1500;
System.out.println(M.Vorname);
System.out.println(M.Nachname);
}
}
Hallo, ich bin es nochmal!
Ich nimm mir diesen Thread wirklich zu Herzen und ich hoffe es ist keiner böse, wenn ich als Anfänger fragen stelle. Ich setze mich vorab mit den Problemen lange auseinander. Aber komme zu keiner Lösung.
Warum funktioniert der code nicht?
Ich verstehe nicht, wie ich klassen in zwei verschieden Files eintragen soll!
Die Main Methode und die class sections einzelnd. Doch meine Java Umgebung zeigt mir dann ein Fehler. Was stimmt also nicht?
run:
Exception in thread "main" java.lang.NoClassDefFoundError: spin/hund (wrong name: spin/Hund)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at spin.Hund.main(Hund.java:33)
Java Result: 1
Bin mir nicht ganz sicher, ob du sowas meinst - ist ein biss. spät für mein Hirn. Aber ich würde das so lösen.
Im Prinzip 2 Klassen in zwei Dateien, eine Hund, eine Tierverwaltung Klasse.
Code:
Tierverwaltung.java
class Tierarztverwaltung
{
String Vorname;
String Nachname;
int alter;
int Gehalt;
}
Evtl liegt dein Fehler an der Gross- & Kleinschreibung. Generell sollten Klassenname immer mit einen Großbuchstaben beginnen. Dateiname ist dabei immer gleich der Klassenname+".java".
Super, dankeschön. Jetzt, weiß ich wie ich es machen muss. für jede class-section eine eigene Datei anlegen und die main Methode auch in eine extra....
So gehts erstmal, aber vielleicht kennt noch jemand eine bessere Möglichkeit
Und meine Java-Umgebung kamm mit "hund" und"Hund" nicht klar. Es lag wohl doch an der Groß und Kleinschreibweise.
Super, dankeschön. Jetzt, weiß ich wie ich es machen muss. für jede class-section eine eigene Datei anlegen und die main Methode auch in eine extra....
Die "class-section" kannst du auch einfach "Klasse" nennen. Eine Datei kann problemlos mehrere Klassen besitzen, allerdings kann nur eine davon "public" sein, sprich von aussen ansprechbar. Die Datei muss dann so heißen wie die "public"-Klasse.
Du solltest ausserdem die Java Code-Konventionen einhalten, sprich Klassen beginnen immer mit einem Großbuchstaben, Variable mit einem Kleinbuchstaben:
Code:
Tierarztverwaltung m = new Tierarztverwaltung();
// nicht: M
// noch besser: benutze sprechende Namen: Tierarztverwaltung meineTierarztverwaltung = ...
Als nächstes:
Wenn du einem Feld keinen Zugriffsbezeichner mitgibst, ist das Feld automatisch package-private, sprich von jeder Klasse aus demselben Package erreichbar:
Code:
class Hund {
String hundename; // nicht: Hundename
}
Das Feld "hundename" kann nun von jeder Klasse aus demselben Package direkt angesprochen werden. Klassen aus einem anderen Package können auf das Feld überhaupt nicht zugreifen. Der Standard ist allerdings, die Felder privat zu machen und nur über (öffentliche) Zugriffsmethoden zu verändern (dies sorgt für die Kapselung, eines der Grundprinzipien von OO):
In diesem Fall würde ein "public" vor dem Methodennamen keinen Sinn machen, da die Klasse Hund ohnehin nur aus demselben Package angesprochen werden kann.
Ich würde dir als Anfänger zu folgendem raten:
a) Mache alle deine Klassen public (sprich, schreibe in eine Datei genau eine Klasse).
b) Mache deine Felder privat und statte sie mit public "setter"-Methoden aus.
c) Schreibe deine main-Methode in eine separate Klasse, bspw. in eine Klasse namens "Starter":
Code:
public class Starter {
public static void main(String[] args) {
Hund meinHund = new Hund();
meinHund.setHundename("Bello");
meinHund.setHundevorname("Rico");
meinHund.setHundealter(5);
Tierarztverwaltung meineVerwaltung = new Tierarztverwaltung();
// usw.
}
}
So entfernst du aus der Klasse Hund den main-Teil und machst sie damit wiederverwendbar(er). Durch die public setter-Methoden steuerst du den Zugriff auf die Klasse und versiehst sie mit einer sauberen Schnittstelle.
Später kannst du dann fortgeschrittene Methoden verwenden, wie bspw. innere Klassen, aber für den Anfang sollten die beschriebenen Schritte dir zu sauberem Code verhelfen.