Feb 27

So, jetzt wollen wir mal den Unterschied zwischen expliziten und nicht-expliziten Casts herausarbeiten.

Hier mal wieder ein Beispiel:

Buchhalter d = new Buchhalter ();
Angestellter f = d; // nicht-explizites Casting
Angestellter g = (Angestellter) d; // explizites Casting

Feb 25

Wie gestern schon erläutert, kann man von einer Subklasse in die Überklasse casten.

Was passiert aber, wenn die zusätzliche Funktion der Subklasse get_knowledge () in der Oberklasse aufgerufen wird?

Hier gibt es dann einen Compilerfehler, da der Angestellte diese Funktion logischerweise nicht kennt.

Bis hierhin recht logisch, aber es wäre ja nicht das SCJP, wenn alles so einfach bliebe.

Schauen, wir uns also mal die Möglichkeiten an, wie der Angestellte in unserem Beispiel trotzdem noch die Funktionen des Buchhalters nutzen kann:
Buchhalter c = (Buchhalter)a;
c.get_knowledge();

Hier findet also ein explizites Casting der Referenzvariablen statt.

Den gleichen Effekt hat folgender Code:

((Buchhalter)a).get_knowledge();

Feb 23

gehen wir mal von 2 Klassen aus;
Klasse Angestellter und davon abgeleitet Klasse Buchhalter;

class Angestellter
{
void get_info () {System.out.println(“Ich bin ein Angestellter”);}
}

class Buchhalter extends Angestellter
{
void get_info () { System.out.println (“Ich bin ein Buchhalter”);}

void get_knowledge () { System.out.println(“Ich kann eine Billanz erstellen”);}
}

Kann ich ein Objekt in ein anderes casten; also entweder

Angestellter a = new Buchhalter (); // Beispiel 1

oder

Buchhalter b = new Angestellter (); // Beispiel 2

?

Fangen wir mal mit Beispiel 1 an;

Angestellter a = new Buchhalter ();

Der Cast einer Subklasse in die Überklasse funktioniert, da der Buchhalter alle Funktionen der Klasse Angestellter implementiert hat; der Buchhalter kann also alles, was der Angestellte auch kann.

Die Antwort auf Beispiel 2 ergibt sich dann wie von selbst;

Buchhalter b = new Angestellter ();

..kann nicht compiliert werden, da der Angestellte nicht dem Buchhalter alle Funktionen zur Verfügung stellen kann.

Feb 21

Was Überladen/ Überschreiben bedeutet, hat Helmchen schon sehr gut erklärt. Deswegen als Ergänzung nur die Tabelle als Übersicht der Unterschiede. Es ist einfach wichtig, die Unterschiede genau zu kennen und im SCJP darauf eingehen zu können

Überladen Überschreiben
Argumente Müssen sich ändern Dürfen sich nicht ändern
Return-Typ Kann sich ändern Darf sich nicht ändern; Ausnahme: Kovarianz
Exceptions Können sich ändern Können verringert (weniger restriktiv) oder ganz  weggelassen werden
Access/ Zugriff (z.B. Private) Kann sich ändern Darf nicht restriktiver sein (also nicht statt public private)
Aufruf Wird bestimmt bei der Compilierung Wird bestimmt zur Laufzeit
Beispiel: showLeaves() showLeaves(int x) showLeaves()
Feb 20

So, leider mal wieder was langweiliges, da hilft nur Auswendiglernen… die Wertebereiche der Variablen … für den, der sie noch nicht von anderen Programmiersprachen kennt :)

Typ Bits/ Bytes Wertebereich
boolean 8/1 true oder false
byte 8/1 -128 … 127
(-27 bis +27-1)
char 2/16 n/a
short 16/2 –32.768 … 32.767
(–215 bis 215– 1)
int 32/4 –2.147.483.648 … 2.147.483.647
(–231 bis 231 – 1)
long 64/8 –9.223.372.036.854.775.808 …9.223.372.036.854.775.807
(–263 bis 263 – 1)
float 32/4 1,40239846E–45f … 3,40282347E+38f
double 64/8 4,94065645841246544E–324 … 1,79769131486231570E+308

keine Angst, die ganzen komplizierten Zahlen muss keiner auswendig lernen, es reicht, die kleineren Wertebereiche  (byte, short) und die Byte/Bit-Zahl zu wissen.

Zusätzlich sollte man auch erklären können, dass double ein float mit doppelter Genauigkeit und long ein doppelt so langer int-Wert ist.

Feb 19

Heute nochmal ein sehr gutes Nachschlage- und Lernbuch

für diejenigen, die lieber Papier in der Hand halten auch als Buch erhältlich

Feb 18

Heute mal was zur Wissensüberprüfung :)

Welche Variablendeklarationen sind gültig?

  1. int x
  2. int _a;
  3. int 12;
  4. int b123;
  5. int _b12
  6. int $4;
  7. int -x;
  8. int 1.2;
  9. float 1.2;
  10. int y#=3;
  11. int dies_ist_ein_enorm_langer_Variablenname_der_hier_vergeben_wird = 1;
Antwort/ answer
Feb 17

ich denke, was private, public und protected bedeuten, weiss jeder. Zusätzlich gibt es auch noch die Möglichkeit, kein Zugriffsrecht zu definieren, sodass dieses als default gesehen wird.
Hier nochmal zur Auffrischung die Übersicht, wann was durch welches Zugriffsrecht sichtbar ist

public protected default private
gleiche Klasse ja ja ja ja
gleiches Package ja ja ja nein
Unterklasse ja ja nein nein
Instanz einer Klasse ja nein nein nein
Überall ja nein nein nein
Feb 17

… komme ich heute :)
Ich habe mir als Ziel gesetzt, mit jedem blogeintrag ein bisschen Wissen im Bezug auf Java und SCJP zu vermitteln.
Einiges wird vermutlich relativ einfach sein und soll nur der Wiederholung dienen (manchmal sieht man ja bekanntlich den Wald vor lauter Bäumen nicht), ich möchte aber auch Eure Sinne in Bezug auf mögliche Fragen/ Antworten schärfen.

Feb 16

Natürlich ist mein Wissen auch nur geborgt, eine große Hilfe war und ist mir immer noch das Buch von Katherine Sierra und Bert Bates; ein ziemlich dicker Wälzer in englisch, der einen fit fürs SCJP macht.

Man sollte jedoch schon etwas erfahren in Java oder zumindest in einer objektorientierten Programmiersprache sein. Um die Grundlagen von Java und Objektorientierung zu lernen eignet sich dieses Buch bzw dessen Vorgänger ganz gut:

preload preload preload
http://www.wikio.de Blog Top Liste - by TopBlogs.de Blogverzeichnis - Blog Verzeichnis bloggerei.de Bloggeramt.de Software
Webbhotell Top Blogs