Wird in Java zwischen Gross- und Kleinschreibung unterschieden

Werbung
Lösung zum Tutoriums-Mini-Test
Wird in Java zwischen Gross- und Kleinschreibung unterschieden?
Ja, es wird zwischen Gross- und Kleinschreibung unterschieden. D.h. deklariere ich
in einem Objekt ein Objektfeld int meinTollerZähler; muss ich, wenn ich diesen
benutzen will meinTollerZähler auch genauso schreiben wie vorher, und nicht z.B.
MeinTollerZähler.
Es existierten die Objektfelder double d und int e. Wie kann ich den
Wert von d in e speichern?
Da d vom Typ double ist, e vom Typ int und int nicht so genau ist wie double
(double umfasst ja auch Kommazahlen, int nicht!) funktioniert folgendes nicht:
e = d;
Der Compiler würde dies deshalb nicht akzeptieren, weil hier ein
Genauigkeitsverlust vorliegt ("possible loss of precision"), da d auch eine Kommazahl sein kann und e nicht!
Daher müssen wir dem Compiler explizit sagen, dass wir d vom Typ double zum
Typ int umwandeln ("casten") wollen, damit wir es in e speichern können:
e = (int) d;
Falsche Varianten:
e = d;
int (double d) = e;
(int) d;
d = e;
int(double d)
int e = (double) d + (int) e
int e = (int) d;
// Denn e existiert ja schon (siehe
// Aufgabenstellung)
(double) e;
int(d);
Lösung zum Tutoriums-Mini-Test
Wie kann ich explizit auf die Methoden einer Oberklasse zugreifen?
Angenommen die Methode heisst in der Oberklasse methX, dann greife ich
super.methX(Methodenparameter) darauf zu. Wenn ich kein super verwende,
wird, falls in der Unterklasse die Methode methX überschrieben wurde, die Methode
der Unterklasse(!) aufgerufen. Da wir aber explizit die Methode der Oberklasse
aufrufen wollen, brauchen wir super.
(Beispiel bei leseDaten() auf Zettel 5, wir verwenden hier explizit
super.leseDaten())
Was ist der Unterschied zwischen einer Klassenmethode und einer
ObjektMethode?
Objektmethoden gehören zu dem jeweiligen Objekt und arbeiten(benutzen) auf den
Objektfeldern, d.h. wenn wir 2 Objekt o1 und o2 der Klasse Konto haben, dann
arbeitet die (Objektmethode) einzahlen auf den jeweiligen Kontodaten, d.h. wenn ich
o1.einzahlen(...) aufrufe, wird auf dem Konto von o1 gearbeitet.
Klassenmethoden arbeiten nicht auf Objektdaten, sondern auf Klassenfeldern.
Beispielsweise: Angenommen es existiert das private Klassenfeld zinssatz:
.
.
private static double zinssatz = 0.03; // Der Zinssatz ist drei
// Prozent
.
.
und bei dem Objekt würde Alljährlich der Zinssatz um 0,2 Prozent erhöht. Da aber
zinssatz geschützt ist, müssen wir dies über eine Methode möglich machen, und
dies sollte dann eine Klassenmethode sein, die jährlich mit Konto.erhoeheZinssatz
() aufgerufen wird!
public static void erhoeheZinssatz() {
zinssatz += 0.2;
}
Merke ebenfalls: Klassenmethoden und -felder existieren auch dann, wenn kein
Objekt der Klasse existiert, denn sie sind ja an die Klasse gebunden, und nicht (wie
Lösung zum Tutoriums-Mini-Test
Objektmethoden und -felder) an die einzelnen Objekte.
Welche Dateiendung hat normalerweise der Quellcode eines JavaProgramms?
Normalerweise hat eine Java-Quellcode-Datei die Dateiendung .java (dies sind die
Dateien wo ihr euer Programm "reinschreibt").
Welche Dateiendung hat normalerweise das ausführbare JavaProgramm?
Nach dem der Compiler euren Quellcode kompiliert hat, hat das ausführbare JavaProgramm dann die Dateiendung .class (Dies ist die Datei die von Java dann wirklich
ausgeführt wird, dies ist aber in BlueJ nicht so offensichtlich, da dies BlueJ
automatisch macht).
Haben Konstruktoren denselben Namen wie ihre Klasse?
Ja, ein Konstruktor trägt denselben Namen wie die Klasse, ebenfalls darf ein
Konstruktor keinen Rückgabetyp haben!
Hat jede Klasse mindestens einen Konstruktor?
Ja, denn gibt man selbst keinen an, fügt Java der Klasse automatisch den Konstruktor
ohne Parameter hinzu, auch wenn dieser dann selbst nichts macht.
Hat jede Klasse den Konstruktor der keine Parameter hat?
Nein, dieser Konstruktor existiert nur dann, wenn ihr ihn extra angebt, oder wenn ihr
gar keinen Konstruktor angebt (dann fügt Java ihn automatisch dazu). Schreibt ihr
aber einen oder mehrere Konstruktoren die Parameter haben, und ihr schreibt den
parameterlosen nicht selbst, dann existiert dieser auch nicht!
Lösung zum Tutoriums-Mini-Test
Kann eine Klasse mehrere Konstruktoren mit denselben Parametern
haben? (mit Erklärung!)
Diese Frage zielte auf folgende Situation ab: Kann folgendes sein
Konto(String anrede, String name) {
...
}
Konto(String name, String vorname) {
...
}
Also anders formuliert: Dürfen mehrere Konstruktoren mit derselben Signatur
existieren?
Nein, dies darf nicht sein, denn was würde der Compiler bei folgendem Aufruf tun:
Konto x = new Konto("bla","blubb");
Der Compiler wüsste nun nicht welchen der Konstruktoren er nehmen sollte! Vor
allem nicht, da der Compiler nicht die Semantik versteht, d.h. er weisst nicht "was"
ein name oder vorname ist, und daher kann er nicht aus "bla", "blubb" ersehen, ob
dies ein Vorname oder Nachname ist => sowas darf nicht sein, alles muss eindeutig
sein!
Erbt eine Oberklasse alle Felder und Methoden von der Unterklasse?
Eine kleine Fangfrage, denn die Oberklasse erbt ja nichts von der Unterklasse,
sondern die Unterklasse von der Oberklasse => Antwort ist nein, denn die
Oberklasse erbt gar nix.
Diese Frage war dazu da, damit ihr seht, dass es auf sehr genaues Aufgabenlesen
ankommt!
Lösung zum Tutoriums-Mini-Test
Was ist das Ergebnis wenn ich in Java 7/3 rechne?
Da 7 und 3 jeweils Integer sind, kommt hier 2 raus, denn das Ergebnis muss dann
auch vom Typ Integer sein
(7/3 = 3,5 => Integer = 3 denn beim Umwandeln von einer Kommazahl zu einer
ganzen Zahl wird einfach der Nachkommateil abgeschnitten)
Von welcher Klasse muss ein Applet erben?
Von Applet (Merke: Java-Klassen fangen immer mit einem Grossbuchstaben an!)
Welche Methoden können bei einem Applet überschrieben werden?
Diese Aufgabe war ein bisschen schlecht gestellt, ich wollte hiermit eigentlich nur
fragen, welches sind die wichtigen Methoden eines Applets.
init, start, stop, destroy und paint.
Was wird vererbt?
Die nicht privaten Klassenfelder, -methoden, Objektfelder, -methoden.
Wie würde ich auf der Konsole die Datei heyjoe.java compilieren?
javac heyjoe.java
oder
javac.exe heyjoe.java
ABER nicht:
javac.heyjoe.java
oder
javac.heyjoe
oder
javac heyjoe
Wichtig ist hier das .java!
Lösung zum Tutoriums-Mini-Test
Wofür sind Konstruktoren da?
Man erzeugt keine Objekte mit Konstruktoren! Sondern direkt nachdem ein Objekt
erzeugt wurde (mit new) muss ein Konstruktor der Klasse aufgerufen werden. D.h.
mithilfe von new wird das Objekt im Speicher erzeugt und dann wird sofort ein
Konstruktor aufgerufen.
Die Konstruktoren sind dafür da, ein Objekt in einen sinnvollen Anfangszustand zu
setzen, d.h. der Konstruktor stellt sicher, dass man mit dem Objekt (sinnvoll)
arbeiten kann, nachdem es erzeugt wurde.
Bemerkung
Dieser Test war lediglich dazu da, dass ihr seht wo eure Probleme liegen.
Dieser Test war auch nur von mir für mein(!) Tutorium, und nicht für
andere Tutorien, daher wäre ich ganz froh, wenn dieser Test auch
innerhalb meines Tutoriums bleibt! Dieser Test soll euch ebenfalls nicht
glauben lassen, wenn ihr diesen Test besteht, besteht ihr die Klausur, denn
die Tutoren kennen die Klausur auch nicht, daher können wir euch gar
nicht genau sagen was drin vor kommt!
Herunterladen