• Shuffle
    Toggle On
    Toggle Off
  • Alphabetize
    Toggle On
    Toggle Off
  • Front First
    Toggle On
    Toggle Off
  • Both Sides
    Toggle On
    Toggle Off
  • Read
    Toggle On
    Toggle Off
Reading...
Front

Card Range To Study

through

image

Play button

image

Play button

image

Progress

1/45

Click to flip

Use LEFT and RIGHT arrow keys to navigate between flashcards;

Use UP and DOWN arrow keys to flip the card;

H to show hint;

A reads text to speech;

45 Cards in this Set

  • Front
  • Back

Wie sieht das Programmiermodell Javas aus?

* Programme werden als Quelltext in Dateien gespeichert, die - jede für sich - immer als Ganzes übersetzt werden.
* Linken der einzelnen Klassen wird dabei durch das Class loading der JVM ersetzt.
* größere Flexibilität bei der Entwicklung und Verteilung von Anwendungen
* eine weitgehende Plattformunabhängigkeit

Welche Arten von Typen werden in Java unterschieden?

* primitive Typen (mit Sprachdefinition festgelegt)
* Klassentypen
* Interfacetypen
* Array-Typen
* Aufzählungstypen
* Annotationstypen
* parametrisierte Varianten der oben genannten Typen

Was sind Wrappertypen in Java?

* für jeden primitiven Typ gibt es einen gleichnamigen Referenztypen (Ausnahme: int (Integer) und char (Character))
* Seine Werte jeweils einen Wert eines entsprechenden primitiven Typs aufnehmen können.
* Sie wickeln den primitven Typ ein

Wie wird in Java zwischen Gleichheit und Identität von Objekten unterschieden?

- Gleichheit: equals


- identität: ==

Gibt es in Java Wert- oder Referenzsemantik?

- In JAVA gibt es Variablen mit Referenz‐ und mit Wertsemantik.


- Welche Semantik eine Variable hat, richtet sich nach ihrem Typ.


- Typen, die zu Variablen mit Wertsemantik führen, sind die primitiven


- Variablen, die mit einem anderen Typ deklariert werden, haben Referenzsemantik

Gibt es in Java call-by-reference?

- Es gibt in JAVA genau wie in SMALLTALK keine Möglichkeit, Pointervariablen ex‐
plizit zu deklarieren


- es gibt also insbesondere beim Methodenaufruf (und den damit verbundenen impliziten Zuweisungen) auch in JAVA kein Call by reference, sondern nur ein Call by value.


- Daran ändert auch nichts, dass Variablen, die mit Referenztypen deklariert sind, Referenzsemantik haben


- bei den impliziten
Zuweisungen eines Methodenaufrufs wird den formalen Parametern immer eine
Kopie des Zeigers übergeben

Was bedeutet es, dass eine Sprache mit einem strengen Typsystem ist?

- in JAVA alle Typfehler werden entweder schon während der Übersetzung vom Compiler oder aber während der Ausführung vom Laufzeitsystem, dann aber schon zum frühest möglichen Zeitpunkt, nämlich bei einer Wertzuweisung (bei der ja die Verletzung einer Typinvariante entsteht), abgefangen

Was sind innere Klassen in Java?

- Neben Feldern und Methoden kann eine Klassendefinition in JAVA geschachtelte, sog. innere Klassendefinitionen besitzen.
- Diese Klassendefinitionen gelten dann ebenfalls als Member der umschließenden Klasse.
- Innere Klassen sind vor allem dann sinnvoll, wenn man ausdrücken will, daß die Existenz der inneren Klasse ohne die der äußeren sinnlos wäre.
- Beispiel: Implementierung von verzeigerten Listen: die Klasse der Listenelemente, deren Instanzen neben dem eigentlichen Inhalt auch noch einen oder mehrere Zeiger aufnehmen müssen, werden innerhalb der Klasse der Liste definiert, denn diese Listenelemente wird


man kaum außerhalb einer Liste verwenden wollen

Was sind Klassenvariablen und -methoden in Java?

- Member können auch mit dem Zusatz static deklariert werden.
- Dabei bedeutet static für so deklarierte Felder und Methoden, dass sie sich nicht auf Objekte beziehen, sondern auf die Klasse selbst, in der sie definiert sind.
- Es handelt sich also um Klassenvariablen und -methoden.

Werden statische Methoden dynamisch gebunden?

- Da in JAVA im Gegensatz zu SMALLTALK Klassen selbst keine Objekte, sondern während der Programmausführung dauerhaft existierende, unveränderliche Gebilde sind, die nicht in Variablen gespeichert werden können, werden als static deklarierte Member auch nicht dynamisch gebunden

Wie verhindert man, dass in Java von Klassen abgeleitet werden kann?

- Schlüsselwort final

Was bedeutet das Schlüsselwort final bei Methoden?

Die Methode kann in einer Unterklasse nicht überschrieben werden

Was ist Überschreiben in Java?

In JAVA ist die Möglichkeit der Redefinition auf die Möglichkeit des Überschreibens eingeschränkt


- eine Methode kann mit der gleichen Signatur (bestehend aus Methodenname und formalen Parametertypen) noch einmal mit geänderter Implementierung definiert werden


- Auch darf die Methode den Rückgabetyp kovariant, also nach unten, abändern


- Dass die überschreibende Methode


über die Einhaltung der Typinvarianten, die mit ihren (geerbten) Parametern verbunden sind, hinaus nur etwas tut, das mit der überschriebenen Methode kompatibel ist, dass sie also nicht mit dem erwarteten Verhalten bricht, kann durch die Sprachdefinition JAVAs nicht erzwungen werden

Was ist Überladen in Java?

Zwei Methoden haben den gleichen Namen aber verschiedene Parametertypen

Was ist der wichtigste Unterschied zwischen Überladen und Überschreiben?

Beim Überladen wird eine neue Methode eingeführt, beim Überschreiben wird eine bereits bestehende redefiniert

Welche Bedingungen muss eine Methodendeklaration erfüllen, damit ein dynamisch gebundener Methodenaufruf an sie gebunden wird?

1. Sie hat den gleichen Namen und die gleiche Anzahl Parameter wie die aufgerufene Methode.


2. Sie ist in der Klasse, die zu dem deklarierten Typ des Ausdrucks gehört, der das Empfängerobjekt liefert, deklariert oder wird von einer ihrer Superklassen geerbt.


3. Die deklarierten Parametertypen des Aufrufs sind jeweils Subtypen der deklarierten Parametertypen der Methodendeklaration
4. Es gibt keine andere Methode, die die gleichen Voraussetzungen erfüllt, deren deklarierte formale Parametertypen aber gleich weit entfernt oder näher an den Typen des Aufrufs sind (Entfernung hier gemessen als die Anzahl der Subtypen, die dazwischen liegen).

Wie funktioniert der Bindealgorithmus bei Java?

- Die oberste Wurzel einer Menge von Methoden wird ermittelt, die möglicherweise in Subklassen überschrieben wird und an eine von denen der Methodenaufruf dann dynamisch gebunden wird


- Zur Laufzeit wird dann nur noch der tatsächliche Typ des Empfängerobjekts bestimmt.


- Dieser muss ein Subtyp des deklarierten Typs des Ausdrucks sein, der das Empfängerobjekt liefert.


- Mit diesem aktuellen (auch dynamisch ge‐
nannten) Typ wird dann aus der zuvor bestimmten Menge von in Frage kommenden überschriebenen Methoden die ausgesucht, die in der Klasse definiert wurde, die der Klasse des Empfängerobjekts in der Kette der Superklassen die nächste ist.

Was ist der Method Ambigious Error?

- Wird geworden, wenn bei der Suche nach einer Methode zur Übersetzungszeit eine oder mehrere andere Methodendefinitionen gleich weit von der aufgerufenen entfernt sind


- die aufgerufene Methode ist durch den Aufruf nicht eindeutig bestimmt

Was ist ein Modul?

- eine Einheit von Programmelementen, die (bzw. deren Funktion) von außen nur über die Schnittstelle des Moduls zugänglich sind.


- Damit behält ein Modul einen Teil seiner Implementation für sich — es hütet quasi ein Implementationsgeheimnis.


- Der Teil, den es (über seine Schnittstelle) nach außen trägt, gilt als öffentlich.

Was ist ein wesentlicher Grund für die Unterscheidung des öffentlichen und privaten Teils von Modulen?

- Programmierer eines Moduls wollen die Hoheit darüber behalten, wie sie das Modul programmieren


- Indem sie sich auf eine Schnittstelle festlegen und alles andere hinter der Schnittstelle verbergen, ist es ihnen möglich, jederzeit die verborgenen Teile zu ändern,
ohne dass irgend jemand anderes davon in Kenntnis gesetzt werden muss — weil die privaten Teile von außen unsichtbar sind, hängt auch niemand davon ab, und insofern ist auch niemand davon betroffen, wenn an einem Modul eine Änderung durchgeführt wird, die die Schnittstellen unberührt läßt.

Welche zwei Arten von Modulen gibt es in Java?

- die Klassen, die hinter ihrer öffentlichen
Schnittstelle alles nicht Öffentliche verbergen


- Pakete, die in ihrer Struktur hierarchischen Ordnern eines Betriebssystems entsprechen, die im wesentlichen Namensräume darstellen und deren Bedeutung als Module lediglich daher rührt, dass es einen Zugriffsmodifikator gibt, der auf sie Bezug nimmt, nämlich der fehlende

Welche Vorteile hat die Verquickung von Typ- und Zugriffsbeschränkungen?

- sprachliche Knappheit (Typ‐ und Schnittstellendeklaration in einem)


Welche Nachteile hat die Verquickung von Typ- und Zugriffsbeschränkungen?

- nur sehr grobe Einstellung von Zugriffbeschränkungen möglich


- es ist insbesondere nicht möglich, dass zwei (inhaltlich eng zusammengehörende) Klassen gegenseitig einen freieren Zugriff gestatten als
allen anderen, es sei denn, man packt diese beiden in ein Paket


- zwei unterschiedliche Konzepte der Programmierung werden zusammengeworfen und dadurch von Programmierern und u. U. nicht mehr als unterschiedlich wahrgenommen werden.

Was bedeutet Abhängigkeit von Modulen?

Wenn in einem Modul eine Änderung vorgenommen wird, müssen Änderungen in anderen Modulen durchgeführt werden

Welche Formen der Abhängigkeit gibt es in Java?

1. Dass eine Klasse von (der Schnittstelle) einer anderen abhängt, erkennt man an der Tatsache, dass auf Objekte der anderen Klasse zugegriffen wird


2. Dass eine Klasse manche Teile ihrer Member anderen zur Benutzung anbietet und diese damit von ihr abhängig werden können, erkennt man an der Verwendung von anderen Zugriffsmodifikatoren als private sowie an der Implementierung von Interfaces.


3. Abhängigkeit zwischen einer Klasse und ihren Superklassen

Was ist die öffentliche Schnittstelle einer Klasse in Java?

Die Menge aller als public deklarierten Eigenschaften

Welche Zugriffsmodifizierer können in Interfaces verwendet werden?

nur public

Was sind Typ-Wildcards?

- ?


- können bei der Instanziierung eines generischen Typs den Platz des aktuellen Typparameters einnehmen


- können dort zunächst für einen beliebigen Typ stehen

Was sind nach oben beschränkte Typ-Wildcards?

Beschränkung mit Hilfe von <? extends Typ>

Was sind nach unten beschränkte Typ-Wildcards?

Beschränkung mit Hilfe von <? super Typ>

Wie wird in Java beschränkter parametrischer Polymorphismus umgesetzt?

Einschränkung einer Typvariable E mittels extends und super


Beispiel: interface SortedList<E extends Comparable>

Welche Arten von Casts unterscheidet man in Java?

- Up casts: der Zieltyp ist ein Supertyp des Ausgangstyps
- Down casts: der Zieltyp ist ein Subtyp des Ausgangstyps
- Cross casts: Zieltyp und Ausgangstyp stehen in keiner Subtypenbeziehung zueinander, stehen also gewissermaßen nebeneinander.

Warum können Down- und Cross-Casts zu Laufzeitfehlern führen?

sind nur zulässig, wenn das Objekt tatsächlich nicht ein direktes Element des Ausgangstyps ist, sondern eines Subtypen, der mit dem Zieltyp
zuweisungskompatibel ist, der also zugleich Subtyp des Zieltypen ist

Welche Einsatzmöglichkeiten gibt es für Interfaces?

- ermöglichen verschiedene Sichten auf ein Objekt


- Zugriffsbeschränkung durch Implementierung verschiedener Zugriffsmöglichkeiten (z.B lesend und schreibend) in unterschiedlichen Interfaces


- Austauschbarkeit


- Tagging oder Marker Interfaces

Was sind Tagging oder Marker Interfaces?

- haben keine eigenen Methodendeklarationen


- dienen der Filterung von Variablenwerten


- Da in JAVA die vom Compiler statisch geprüfte Zuweisungskompatibilität Namenskonformität verlangt, kann die Typisierung einer Variable mit dem Interface Markiert erzwingen, dass dieser Variable nur Instanzen solcher Klassen zugewiesen werden, die das Interface Markiert zu implementieren deklarieren.


- Da das Interface aber keine Auflagen macht, ist die Implementierung des Interfaces für die Klasse zunächst ohne Konsequenzen.


- Die durch das Interface erfolgte Markierung der Klassen
(bzw. deren Instanzen) kann jedoch zur Übersetzungszeit vom Compiler
und zur Laufzeit durch einen Typtest überprüft werden

Was ist ein Beispiel für ein Marker Interface in Java?

Serializable

Was ist die Voraussetzung für die Verwendung der for-each-Schleife?

- Collectionklasse muss das Interface Iterable implementieren


- dieses bietet die Methode Iterator iterator() an


- Der zurückgelieferte Iterator wird zur Produktion der Elemente verwendet

Was sind checked Exceptions?

- verlangen ein Abfangen innerhalb einer Methode oder eine Deklaration im Methodenkopf


- können sehr mühsam sein, wenn Exceptions sehr häufig auftreten können

Was sind unchecked Exceptions?

- es ist nicht nötig, dass innerhalb einer Methode abgefangen wird oder eine Deklaration im Methodenkopf erscheint


- Alle von RuntimeException abgeleiteten Exceptions

Was sind Errors?

- Werden nicht abgefangen, sondern führen zu sofortigem Programmabbruch


- sind unchecked


- sollten nur während Testphase eingesetzt werden

Was sind Threads?

- parallele Ausführungsstränge


- sind im Gegensatz zu den Prozessen eines Betriebssystems leichtgewichtig, was soviel heißt wie dass sich Threads die getrennte Allokierung von
Ressourcen (wie Hauptspeicher) sparen, und alle auf denselben Ressourcen operieren.


- Es können also mehrere Threads innerhalb eines Prozesses laufen.


- Der Preis dafür ist, dass die Mechanismen zur Synchronisation bei Threads selbst realisiert werden müssen;


- bei Prozessen sind sie über die Inter‐Prozess‐Kommunikation des Betriebssystems geregelt

Wie wird ein neuer Thread gestartet?

In JAVA wird ein neuer Thread gestartet, indem man eine neue Instanz der Klasse
Thread erzeugt und auf ihr die Methode start()


aufruft.

Wie kann man Threads mit Funktion versehen?

1. Man definiert eine neue Subklasse von Thread und überschreibt darin die
Methode run() so, dass sie das Gewünschte tut oder zumindest anstößt.
2. Man lässt eine Klasse das Interface Runnable implementieren, implementiert dann in der Klasse die vom Interface geforderte Methode run(), erzeugt von dieser Klasse eine Instanz i und startet deren Methode run()

Was sind Monitore?

- Semaphore in Java


- jeder Monitor ist mit einem Objekt verbunden


- wenn ein Thread einen Monitor eines Objektes sperrt („lockt“), dann kann kein anderer Thread den Monitor sperren, bevor die Sperre
durch den ersten Thread wieder aufgehoben wird.

Wie kann die Synchronisation erzwungen werden?

1. mittels der Synchronized‐Anweisung. Die Anweisungen eines Blocks können nur ausgeführt werden, wenn sie nicht gerade von einem anderen Thread ausgeführt werden. Das
mit dem Block assoziierte Objekt, auf dessen Monitor die Sperre durchgeführt
wird, wird explizit mit der Synchronized‐Anweisung angegeben


2. Die zweite Möglichkeit ist, eine ganze Methode mit synchronized zu deklarieren. Wenn es sich dabei um eine Instanzmethode handelt, wird die Sperre auf
dem Objekt, auf dem die Methode aufgerufen wurde, erwirkt; handelt es sich
dagegen um eine Klassenmethode (also um eine, die static deklariert wurde),
dann geht die Sperre auf das Objekt, das die Klasse repräsentiert.