Java - FOM

Fragen und Inhalte für die Klausur Java FOM Düsseldorf 2. Semester

Fragen und Inhalte für die Klausur Java FOM Düsseldorf 2. Semester


E. M.
Diese Lernkarten behandeln grundlegende und fortgeschrittene Konzepte der objektorientierten Programmierung in Java auf Universitätsniveau. Sie decken Themen wie Klassen, Methoden, Objekte, Attribute, Sichtbarkeit, Sammlungen, und Konstruktoren ab. Diese Karteikarten sind ideal für Studierende der Informatik, die ihr Verständnis von Java vertiefen möchten, insbesondere in Bezug auf die Erstellung und Verwaltung von Objekten, die Nutzung von Sammlungen und die Implementierung von Schnittstellen.
Cartes-fiches
47
Utilisateurs
10
Langue
Allemand
Catégorie
Informatique
Niveau
Université
Créé / Mis à jour
21.01.2013 / 08.05.2021

Cartes-fiches

Wie erreicht Java die Plattformunabhängigkeit?

  • Quellcode wird vom Compiler in Bytecode umgewandelt und in einer virtuellen Maschine ausgeführt.
  • Quellcode -> Compiler -> Bytecode -> Virtuelle Maschine

Welcher Zusammenhang besteht zwischen Klassen und Objekte?

Klassen sind die Baupläne für Objekte

  • Alle Attribute der Objekte einer Klasse sind gleich, die Zustände können sich unterscheiden
  • Objekte unterscheiden sich durch ihre Instanzen (Speicherbereiche), auch wenn beide die identischen Zustände haben

Wie lange existieren Attribute, Klassenvariablen und lokale Variablen?

  • Attribute: solange wie die Instanz des Objekts besteht
  • Klassenvariablen (Static): für den gesamten Programmablauf
  • Lokale Variablen: Für den Ablauf einer Methode (im Stack-Speicher abgelegt)

 

Wo sind private Attribute sichtbar?

  • In allen Methoden des Objektes/der Klasse
  • Sind jedoch nicht in abgeleiteten Klassen sichtbar
    • setter/getter notwendig

Wo sind lokale Variablen sichtbar?

  • bis zum Ende des definierten Blocks

Wo sind Klassenvariablen sichtbar?

  • in allen Objekten der Klasse

Gibt es in Java Variablen, die Obejkte aufnehmen können?

Nein, gibt es nicht.

Welche Speicherbereiche gibt es?

  • Heap:
    • Objekte werden aus dem Heap gelöscht, wenn das Objekt nicht mehr erreichbar ist
  • Stack:
    • beinhaltet lokale Variablen
    • werden nach Ablauf der Methode gelöscht

Wie kann Speicher auf dem Heap reserviert werden?

Mit dem Befehl "new" zum Erzeugen eines Objektes

Was ist ein Konstruktor?

  • Es ist die Methode, die beim Erstellen eines Objektes aufgerufen wird
  • jede Klasse besitzt einen Konstruktor
    • wenn keiner speziell definiert wurde, dann wird der Default-Konstruktor gesetzt
    • es sind unendlich viele pro Klasse definierbar

Wann verwende ich statische Methoden und was ist das Besondere an Ihnen?

  • wenn keine Objektinstanz benötigt wird
  • wenn kein Zustand benötigt wird
  • statische Methoden sind unabhängig von einem Objekt / einer Objektinstanz

Welche Datentypen gibt es? Nennen sie mindestens 3 Beispiele.

  • elementare (primitive) Datentypen
    • byte
    • short
    • int
    • float
    • double
    • char
    • boolean

 

  • Referenztypen
    • verweisen auf Objekte
    • Bsp.: meinAuto = new Auto();

Welche Möglichkeiten gibt es eine Klasse aus einem anderen Paket zu verwenden?

  • Das komplette andere Paket importieren
    • import java.util.*
  • nur die spezielle Klasse des Pakets importieren
    • import java.util.Scanner
    • besseres Vorgehen, da die Übersicht verbessert wird
  • es besteht jedoch kein Performance-Unterschied der beiden Vorgehensweisen
  • vollqualifizierten Klassennamen bei jeder Nutzung der Klasse schreiben
    • de.fom.klassenname

Wie weise ich eine Klasse einem Paket zu?

Am Anfang der Klasse das Paket angeben.

  • package paketname;
  • Bsp.: package de.fom.oop

Welche Sichtbarkeiten können definiert werden?

Für Klassen, Attribute oder Methoden gelten die folgenden Sichtbarkeiten:

  • package scope (default) -> nur im Paket sichtbar
  • protected -> nur im selben Paket UND den vererbten Klassen sichtbar
  • private -> nur in der eigenen Klasse sichtbar
  • public -> überall sichtbar und können außerhalb des Paketes gesehen und genutzt werden

Was bedeutet "Polymorphismus"?

"Vielgestaltigkeit":

Die abgeleitete Klasse (subclass) kann überall da genutzt werden, wo auch die Basisklasse (superclass) erlaubt ist!

Wie wird eine mögliche Vererbung geprüft?

  • ist "b" ein "a"?
  • benötigt "b" Bestandteile von "a"?
    • ist ein Abteilungsleiter ein Angestellter? (Ja)
    • ist eine Katze ein Hund? (Nein)
    • ist ein Fahrrad ein Zweirad? (Ja)

Was versteht man unter Vererbung?

class b extends a

  • aus einer Basisklasse wird eine spezialisierte Klasse abgeleitet
    • diese bestitzt alle sichtbaren Elemente (Attribute, Methoden) der Basisklasse und ihren Eigenschaften
    • geerbte Methoden können "überschrieben", also modifiziert werden
    • spezifische Konstruktoren der Basisklasse müssen mit "super" in der vererbten Klasse aufgerufen werden

Was sind die wesentlichen Vorteile einer Vererbung?

  • Ersparnis von Quellcode
  • Erhöhung der Übersichtlichkeit
  • bessere Wartung des Quellcodes
    • vererbte Methoden müssen bspw. nur einmal editiert werden
  • Die Wiederverwendung von Quellcode wird unterstützt
  • von "final" definierten Klassen kann nicht geerbt werden
    • Sicherheitsaspekt (Passwortabfragen)
    • Verbesserung der Performance
      • Compiler muss nicht nach evtl. weiteren Abhängikeiten suchen
    • nicht alle Klassen als "final" deklarieren, da sonst der Sinn der Objektorientierung verloren geht
  • Methoden als "final"
    • können nicht überschrieben werden
    • können vererbt werden

Was versteht man unter Autoboxing?

Wenn ein primitiver Datentyp in eine Collection integriert wird, wird er in eine Wrapper-Klasse konvertiert/gepackt

Welche Methoden deklariert die Schnittstelle Collection u.a.?

  • add(Object o)
    • fügt Objekt zur Sammlung hinzu (optional)
  • remove(Object o)
    • entfernt Objekt aus einer Sammlung (optional)
  • contains(Object o)
    • liefert "true" falls Objekt in Sammlung enthalten
  • isEmpty()
    • liefert "true" wenn Sammlung leer ist
  • size()
    • liefert die Anzahl der Elemente in der Sammlung

Was ist eine innere (lokale) Klasse?

  • eine Klasse, die innerhalb einer Klasse definiert ist
    • eine innere Klasse hat Zugriff auf alle Attribute der äußeren Klasse (auch auf die privaten Attribute)
    • die äußere Klasse kann auf die Attribute der inneren Klasse zugreifen
    • diese enge Verbindung wird erreicht, wenn innerhalb der äußeren Klasse ein Objekt der inneren Klasse erzeugt wird

Warum werden innere Klassen verwendet?

  • Für Aufgaben, die eine eigene Klasse echtfertigen, aber nur in Bezug auf die äußere Klasse von Bedeutung sind
  • Um ein Interface mehrfach (mit unterschiedlichem Verhalten) in einer Klasse implementieren zu können
  • Um in Vertretung der äußeren Klasse eine Klasse aus einer anderen Vererbungshierarchie zu erweitern

 

Hauptsächlich werden innere Klassen bei der Erstellung von grafischen Benutzeroberflächen eingesetzt, um Ereignisse zu verarbeiten

Warum erleichtert das Geheimnisprinzip die Wartung von Programmen?

Attribute und Implementierungen der Methoden sind außerhalb der Klassen nicht sichtbar.

Eine Klassenbibliothek enthält eine Klasse A. Sie können die Klasse A eigentlich in Ihrem Programm verwenden. Sie stellen dann aber fest, dass die Klasse A eine spezielle Methode nicht bietet und eine bereits vorhandene Methode eine andere Berechnung durchführen müsste. Müssen Sie die Klasse A jetzt komplett neu schreiben? Falls es eine Alternative dazu gibt, beschreiben Sie diese!

Man könnte eine neue Klasse erstellen, welche von Klasse A erbt. Die fehlende Methode kann in der neuen Klasse eingefügt werden. Die Methode, welche vorhanden ist kann ebenfalls in der neuen Klasse implementiert werden. Sie wird die Methode der Klasse A überschreiben.

Wie unterscheidet sich die Sicherbarkeit von Attributen von lokalen Variablen?

Attribute können in allen Methoden verwendet werden, sie sind in der kompletten Klasse sichtbar. Zusätzlich kann auch von außen auf sie zugegriffen werden, wenn die entsprechende Sichtbarkeit eingestellt ist.

Lokale Variablen sind nur in der Methode sichtbar und verwendbar, in der sie implementiert ist. Nach dem aufruf der Methode wird sie auch vom Speicher gelöscht.

Was ist die Besonderheit eines statischen Attributs (Klassenvariable)?

 

- Es existieren auch statische Attribute: +++++++++++++++++++++++++++ private static int objektzaehler = 0; +++++++++++++++++++++++++++ - Ein statisches Attribut (Klassenvariable) ist nicht an ein Objekt gebunden - Eine Klassenvariable existiert nur einmal - Alle Objekte der Klasse „teilen“ sich eine Klassenvariable - Eine Klassenvariable kann z.B. verwendet werden, um die bereits erzeugten Objekte einer Klasse zu zählen - Eine Klassenvariable wird initialisiert bevor das erste Objekt der Klasse erzeugt werden kann eine statische Methode aufgerufen werden kann - Java liefert die Klasse Math! - Die Klasse Math enthält eine ganze Reihe nützlicher statischer Methoden

 

Wie unterscheidet sich der Datentyp double vom Datentyp Double?

Double ist kein richtiger Datentyp sondern ein Objekt der Wrapper Klasse "Double"

double ist ein elementarer Datentyp

Es ist die folgende Klasse gegeben:

public class Daten {

int a;

public int b;

}

Wie unterscheidet sich die Sichtbarkeit von a und b?

Auf b kann direkt über das Objekt zugegrifen werden, da die Sichtbarkeit public ist.

Bei a ist keine Sichtbarkeit angegeben, weshalb automatisch die Sichtbarkeit "package scope" gilt:
Es kann von allen Klassen und Methoden im selben Package darauf zugegrifen werden.

Wie heisst der Speicherbereich, in dem lokale Variablen gespeichert werden? Wann werden lokale Variablen aus diesem Speicherbereich wieder entfernt?

Sie werden im Stack gespeichert und gelöscht, sobald die Methode abgearbeitet wurde.

Wie kann man verhindern, dass außerhalb einer nicht abstrakten Kasse A mit new ein Objekt dieser Klasse erzeugt werden kann? Was muss die Klasse A dann besitzen, damit man trotzdem ein Objekt der Klasse erzeugen kann?

  1. Konstruktor Sichbarkeit auf "privat" stellen.
  2. statische Methode die ein Objekt zurück gibt.

Eine Klasse ist nicht explizit als public definiert. Wo ist diese Klasse sichtbar?

Im Package

Was bedeutet das "Überladen" von Methoden?

Man implementiert die selbe Methode mit einer unterschiedlichen Anzahl an Attributen die übergeben werden. Rückgabetyp dard sich unterscheiden!

Was bedeutet es, wenn ein Attribut als final definiert wurde?

Es kann nur einmal ein Wert zugewiesen werden.

Kann man aus einer abstrakten Klasse ein Objekt erzeugen? Begründen Sie die Antwort.

Nein, abstrakte Klassen haben entweder keine Methoden oder wenn sie welche haben, sind diese nicht implementiert.

Eine Methode enthält die folgende Zeile:

List liste = new ArrayList();

Ist diese Zeile korrekt? Falls nicht, korrigieren Sie die Zeile! Begründen Sie ihre Antwort!

Ja, das Interface ArrayList implementiert das Interface List

Eine Klasse enhält die folgende Methode

public void ausgabe(ArrayList liste){
Iterator it = liste.iterator();
while(it.hasNext()){
system.out.println(it.next().toString());
}
}

Der Code ist syntaktisch und fachlich ohne Fehler. Mit welcher Änderung können SIe die Verwendung der Methode flexibler gestalten? Begründen Sie die Antwort!

ArrayList dirch Collection ersetzen.

Nutzer der Mehtode können so alles was Collection implementiert verwende. Es ist nicht auf die ArrayList beschränkt.

Gegeben ist die folgende Definition einer Schnittstelle:

   public interface VIP {

     double berechneRabatt();

     void druckeEinladung(){

         System.out.println("Sie sind zum Sommerfest eingeladen!");

     }

}

Ist diese Definition korrekt? Begründen Sie die Antwort!

Nein, alle Methoden eines Interfaces müssen abstrakt sein.

Schreiben Sie eine einfache Wrapper-Klasse mit dem Namen WrapInt für den ele- mentaren Datentyp int. Die Klasse soll neben einem geeigneten Konstruktor nur ei- ne getter-Methode und eine setter-Methode besitzen.

public class WarpInt{
    private int value;
    public WrapInt(int V){
        this.value = v;
    }
    public void set_value(int V){
        this.value = v;
    }
    public int get_value(){
        return this.value;
    }
}

Schreiben Sie eine Sequenz, um die Zahlen 1 bis 100 in einer Sammlung Ihrer Wahl zu speichern. Verpacken Sie die Zahlen mit der Klasse WrapInt.

ArrayList Zahlen = new ArrayList();
for(int i = 1; i <= 100; i++){
    zahlen.add(new WrapInt(i));
}
 

Étudier