Was passiert hier?

Status
Nicht offen für weitere Antworten.

Alyssa

Mitglied
Hallo,

fang gerade erst an mit Java-Programmierung.
Hab jetzt einen Quellcode, den ich nur zur Hälfte verstehe.
Könnt ihr mir vielleicht sagen, was genau passiert:

Code:
package aufzug;

/** Schnittstelle für die Steuerung eines U-Bahn-Aufzugs */
public interface Aufzug {
	/** Aufzug wird nach oben gerufen */
	void oben();
	/** Aufzug wird nach unten gerufen */
	void unten();
}



package Uebung10;

import lehrbuch.*;
import aufzug.Aufzug;

public class AufzugOben10_3 implements Aufzug {
	Kreis aufzug;
	Eimer eimer = new Eimer();


 	public AufzugOben10_3(Farbe farbe) {	// Konstruktor
	 aufzug = new Kreis(farbe);
  	 aufzug.zeichnen();
	}

 	public void oben() {					 // wiederherstellen
	 aufzug.wiederherstellen();
	  try {
	 	 eimer.fuellen();
	  }
	  catch (VollAusnahme voll) {
	 	Programm.meldung("Der Aufzug ist schon oben!");
 	  }
 	}

 	public void unten() { 					// verstecken
	 aufzug.verstecken();
	 try {
	 	eimer.entleeren();
	 }
	 catch (LeerAusnahme voll) {
	 	 Programm.meldung("Der Aufzug ist schon unten!");
 	 }
 	}
}


package Uebung10;

import Uebung10.AufzugOben10_3;
import lehrbuch.Farbe;
import rufpanel.Rufpanel;

public class Test10_3
{

 public static void main(String[] args)
 {
  	AufzugOben10_3 Kreis1 = new AufzugOben10_3(Farbe.ROT);
    AufzugOben10_3 Kreis2 = new AufzugOben10_3(Farbe.GRUEN);
    AufzugOben10_3 Kreis3 = new AufzugOben10_3(Farbe.BLAU);

    Kreis1.oben();
    Kreis2.oben();
    Kreis3.oben();

  	Rufpanel rpOben = new Rufpanel(Kreis1, Kreis2, Kreis3);
 }
}

Was bei der Ausführung passiert, ist mir ja bekannt, aber ich versteh nicht, z.b., warum man in der Klasse AufzugOben10_3 bei der Objekterzeugung "farbe" in den Klammern dahinterschreibt. Was hat das zu bedeuten?
Vielleicht kann mir jemand so ein wenig die Schritte erklären??`

Wäre euch sehr dankbar!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 

Alyssa

Mitglied
P.s. Wir fangen gleich zu Anfang mit der Objektorientierten Programmierung an, und da ich echt blutiger Anfänger bin, versteh ich nur wenig :oops:
 

L-ectron-X

Gesperrter Benutzer
Klingt schon wieder nach 'ner Hausaufgabe... (die werden von uns nicht erledigt)
Daher werde ich dir das Programm nicht erklären. Sondern du sagst einfach, was genau du nicht verstehst.
 

Jockel

Top Contributor
Alyssa hat gesagt.:
Hallo,
z.b., warum man in der Klasse AufzugOben10_3 bei der Objekterzeugung "farbe" in den Klammern dahinterschreibt. Was hat das zu bedeuten?
Weil der Konstruktur in Zeile 23 ein Argument erwartet, deshalb schreibt man das dahinter.
 

Alyssa

Mitglied
L-ectron-X hat gesagt.:
Klingt schon wieder nach 'ner Hausaufgabe... (die werden von uns nicht erledigt)
Daher werde ich dir das Programm nicht erklären. Sondern du sagst einfach, was genau du nicht verstehst.

Nein, das ist keine Hausaufgabe!!! Ich wollte es einfach für mich selbst verstehen...
Was ich nicht verstehe hab ich auch geschrieben...
 

Alyssa

Mitglied
Kein Problem :wink:
Hmmmh, ich glaub es geht jetzt einigermaßen, was diese Klasse betrifft.

Aber eine allgemeine Frage: Ausnahmen!!!
Wenn eine Ausnahme weitergereicht wird, setzt man throws...
Wenn sie aufgefangen wird, tut man das in einem try-catch-Block.
Hab ich recht? ???:L
Aber was heißt eine Ausnahme wird weitergereicht bzw. aufgefangen???
Bekommt der Benutzer des Programmes es letztlich mit?

Wäre nett, wenn mir Jemand diese Fragen beantworten könnte...
 
B

bygones

Gast
ja - eine Methode reicht eine Ausnahme per throws weiter - an die aufrufende Methode
eine Ausnahme wird mit catch aufgefangen.

Ob es der Benutzer mitbekommt hängt davon ab, wi man mit Ausnahmen umgeht. Schreibst du nur throws bekommt er es auf alle Fälle mit. Fängst du die Ausnahmen auf gibt es drei Möglichkeiten
1. du machst eine Meldung für den User, dass ein Fehler aufgetreten ist
2. du machst gar nix und der User bekommt es nicht mit, aber du speicherst dir im programm irgendwie dass ein Fehler aufgetreten ist
3. du machst gar nix...

die 3. Möglichkeit ist worst case. Dein Programm läuft vll nicht und du hast keine Ahnung warum und wieso. die 1. und 2. möglichkeit hängen von der jeweiligen situation ab
 

L-ectron-X

Gesperrter Benutzer
Es gibt Umstände, bei denen es der Benutzer erfahren muss/soll/kann, weil er so bspw. auf ein Problem reagieren kann. Bsp. Eine Verbindung kann zu einem Rechner nicht aufgebaut werden, weil ein falscher oder unbrauchbarer URL eingegeben wurde. Resultat ist unter Umständen eine MalFormedException. Der Benutzer kann in diesem Fall eine Information darüber angezeigt bekommen, z.B. in einem JOptionPane.
Es gibt auch Situationen, in denen Exceptions aufgefangen werden und im catch-Block "Standardcode" ausgeführt wird, um das Programm nicht abstürzen zu lassen.

Eine Exception wird immer im catch-Block aufgefangen, dort wird auch programmiert, was getan werden soll, wenn eine Exception eines bestimmten Typs aufgefangen wurde. Der kritische Code, welcher eine Exception werfen könnte wird direkt oberhalb des catch-Blockes in einen try-Block geschrieben.

Man muss innerhalb einer Methode nicht unbedingt die Exception auffangen und bearbeiten, man kann sie auch weiterleiten. Dazu dient das Schlüsselwort throws, welchem die weiterzuleitende Exception folgt.
Die Exception wird dann an den Aufrufer der Methode weitergeleitet, welcher die Exception dann in einem try/catch-Block bearbeiten, oder auch selbst weiterleiten (an dessen Aufrufer) kann.

Man kann auch innerhalb eines Programmes eine Exception absichtlich werfen. Das wird mit dem Schlüsselwort throw gemacht.
 

Alyssa

Mitglied
Bei throw muss ich also keinen try-catch-Block schreiben?
Was davon sind die geprüften, was die ungeprüften Ausnahmen?
 

L-ectron-X

Gesperrter Benutzer
throw dient dazu eine bestimmte Exception innerhalb einer Methode auszulösen, die der Aufrufer der Methode behandeln oder weiterleiten kann.
 

André Uhres

Top Contributor
Was davon sind die geprüften, was die ungeprüften Ausnahmen?

Eine geprüfte Ausnahme ist z.B. "IOException".
Sie kann auftreten wenn du mit einer Datei arbeitest.
Sie heisst "geprüft", weil der Compiler bei Methoden wie "read" oder "write"
prüft ob der Anwender die IOException behandelt.
Wenn er es nicht tut, kommt ein Compiler-Fehler.

Ein Beispiel für eine ungeprüfte Ausnahme wäre die "NumberFormatException"
die auftreten kann, wenn der Benutzer z.B. eine unkorrekte Zahl eingibt,
die von "Integer.parseInt(..)" nicht in ein "int" umgewandelt werden kann.
Wenn diese Ausnahme nicht behandelt wird, kommt kein Compilerfehler.

Zu den drei Möglichkeiten von deathbyaclown möchte ich noch diese hinzufügen:
Eine Ausnahme die nicht routinemässig vorkommt, wie z.B. ClassNotFoundException
kannst du im catch Block auch mit "throw new RuntimeException(ex)" werfen.
Dann brauchst du sie nicht in der "throws" Klausel im Methodenkopf anzugeben :wink: .
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
R Methoden Was passiert in den markierten Zeilen? Allgemeine Java-Themen 8
S ExecutorService.invokeAll -- was passiert wenn einige Tasks schon ausgefuehrt wurden? Allgemeine Java-Themen 2
B notify() - was passiert danach genau? Allgemeine Java-Themen 8
F Was Passiert bei einem externen Programmaufruf Allgemeine Java-Themen 4
S was passiert bei diesem filereader prozess Allgemeine Java-Themen 2
M Thread: was passiert nach run()? Allgemeine Java-Themen 12
Zrebna SonarLint: Warum kein Null-Referencing-CodeSmell-Hint hier? Allgemeine Java-Themen 23
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
C Was passt hier nicht bei der Calendar-Class Allgemeine Java-Themen 2
berserkerdq2 Kann keine Labels erstellen, was ist hier syntaktisch falsch Allgemeine Java-Themen 5
N Ist Selenium hier das richtige Werkzeug? Allgemeine Java-Themen 1
Zrebna Wieviele Testfälle muss man hier schreiben? (Software Engineering) Allgemeine Java-Themen 13
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
Drachenbauer warum bekomme ich hier eine NullPointerException Allgemeine Java-Themen 6
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
J Einrückungstool mit Farblicher hervorhebung wie hier? Allgemeine Java-Themen 3
V VisualVM Was erkennt ihr hier? Allgemeine Java-Themen 9
E Queue: Wie kann hier ein null-Pointer Exception auftreten?! Allgemeine Java-Themen 11
R Was ist hier falsch? Abfragen Allgemeine Java-Themen 3
X Wer kann mir das hier erklären? Programm frisst RAM! Allgemeine Java-Themen 11
S Singleton hier sinnvol? Allgemeine Java-Themen 20
E Wieso returnt das hier 1? Allgemeine Java-Themen 3
W Wieso funktioniert dieser Code hier? Allgemeine Java-Themen 6
G Warum kommt hier NullPointerException? Allgemeine Java-Themen 3
F Threading oder kein Threading - das ist hier die Frage. Allgemeine Java-Themen 23
D Timer oder Thread, das ist hier die Frage Allgemeine Java-Themen 3
egrath Anonyme Methode - warum hier kein Compilerfehler Allgemeine Java-Themen 2
F Gutes Threads Tutorial hier aber trotzdem eine Frage Allgemeine Java-Themen 7
M Spring oder nicht, das ist hier die Frage Allgemeine Java-Themen 3
S Was ist hier falsch? Allgemeine Java-Themen 16
G wer muss hier wen aufrufen? Allgemeine Java-Themen 7
M Kann man hier noch was rausholen? Allgemeine Java-Themen 16
I Ist JNI hier richtig? Allgemeine Java-Themen 8
B Gibts sogar hier Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben