Veröffentlicht 13. Januar 201015 j Hallo zusammen, ich habe folgende Fragestellung in dem Fach Programmieren bekommen und kann diese leider nicht beantworten. Könnt ihr mir vielleicht weiterhelfen? Das hier ist die Fragestellung: Die Klasse Testklasse arbeitet mit den beiden Klassen Student und FalscheMatrikel-nummerException. Sie wird in der vorliegenden Form nicht erfolgreich kompiliert. Zur korrekten Kompilierung gibt es zwei Varianten. Eine Variante benötigt eine Änderung in der Klasse Testklasse, die andere Variante benötigt eine Änderung der Klasse Fal-scheMatrikelnummerException. Bitte geben Sie beide (einzelnen) Änderungsmöglichkeiten mit Begründung an. public class Testklasse{ public void methode(int nummer) { student s; try { s = new Student(nummer); } catch (FalscheMatrikelnummerException fme) { System.out.println(fme); throw fme; } } } public class FalscheMatrikelnummerException extends Exception { public String toString() { return “Matrikelnummer nicht korrekt!â€; } } public class Student { private int matrikelnummer; public Student (int matrikelnummer); throw FalscheMatrikelnummerException { if (matrikelnummer > 0) { this.matrikelnummer = matrikelnummer; } else { throw new FalscheMatrikelnummerException(); } } } Es wäre nett, wenn mir jemand helfen könnte. Es kann sein, dass ich vielleicht ein Rechtschreibfehler reingebaut habe, aber ich hoffe, dass es vom Verständnis her klar ist. Viele Grüße D.Christ
13. Januar 201015 j So... anscheinend ist dort wohl irgendwie der Wurm drin. Ich werde morgen meinen Lehrer nochmal fragen. Wahrscheinlich habe ich es falsch abgeschrieben. ABer nochmal zu einer funktionierenden Aufgabe. Aus welchem Grund, wird das Programm in der Reihenfolge aufgeführt? Ich habe das mal in die Kommentare geschrieben. Das Static initializer als erstes ausgeführt werden, verstehe ich ja noch, aber warum dann zuerst 2. ?? Ich brauche eine gute Begründung. public class Aufgabe04 { { System.out.format("1"); //2 . ... } static { System.out.format(","); //1 . static initializer wird bei erzeugung als erstes ausgeführt } public Aufgabe04() { System.out.format("0"); // 3. } public static void main (String [] args) { System.out.format("test") ; Aufgabe04 I = new Aufgabe04(); } } Viele Grüße
14. Januar 201015 j Einen unbenannten Block in einer Java Klasse habe ich zwar in der Praxis noch nie gesehen, aber Deine kommentierte Reihenfolge ist falsch. Wenn ich die Klasse ausführe, dann erhalte ich folgendes Ergebnis: ,test10 Peter
14. Januar 201015 j was ja auch logisch ist. beim ersten aufruf der ersten statischen Methode (in diesem Fall die "main") werden vorher die statischen Variablen initialisiert bzw die statischen Konstruktoren aufgerufen. Im Beispiel also static { System.out.format(","); //1 . static initializer wird bei erzeugung als erstes ausgeführt } Dann wird der eigentliche Aufruf ausgeführt public static void main (String [] args) { System.out.format("test") ; Aufgabe04 I = new Aufgabe04(); } und dann die ganzen Aufrufe aus der Methode selbst, also { System.out.format("1"); //2 . ... } und public Aufgabe04() { System.out.format("0"); // 3. } Anders würde es aussehen, wenn die main-Methode zum Beispiel in einer anderen Klasse wäre. Beim Aufruf der Main wird dann noch nicht auf die Klasse "Aufgabe04" zugegriffen und damit auch nicht auf deren statische Member
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.