1. Klausur 7. Info, 7. Semester: 1. Programmieraufgabe s

Werbung
1. Klausur 7. Info, 7. Semester:
1. Programmieraufgabe s. Aufgabenblatt
2. Nennen Sie 2 Sprachkonstrukte von C++, die in Java nicht realisiert sind. Geben Sie
eine Begründung für diese Entscheidung an.
1. Zeiger, wegen Speicherschutz
2. Destruktoren, da die Delokierung von Speicher der Garbagecollector übernimmt.
3. Wieviel Speicherplatz belegt in Java eine Variable vom Datentyp char?
2 Byte, da Unicodezeichensatz
4. Welches Schlüsselwort bezeichnet in Java eine Konstante?
static final
5. Erzeigen Sie mit jeweils einer Anweisung:
a) Ein eindimensionales Feld vom Typ double mit 22 Elementen
b) Ein zweidimensionales Feld vom Typ long mit 8 Zeilen und 3 Spalten.
a) double[] feld1D = new double [10];
b) long [][] feld2D = new long [4][10];
6. Erzeugen die ein nichtrechteckiges zweidimensionales Feld vom Typ float, in dem
eine obere Dreiecksmatrix der Dimension 3 (d.h. 1. Zeile: Drei Element; 3. Zeile:
ein Elemente) abgespeichert werden kann.
float n = 3;
float [][] dreieck = new float [n][];
for (int i = 0; i < n; i--) {
dreieck[i] = new int[n-i];
}
Zusammenfassung der Schenk Java Klausuren (8./9. Info Klausur 1+2, WS
2001/2002) vk
-4.
Welchen primitiven Datentyp kann man auch nicht mit dem cast-Operator in
andere primitive Datentypen umwandlen?
boolean
-3.
Erzeigen Sie mit jeweils einer Anweisung:
c) Ein eindimensionales Feld vom Typ int mit 10 Elementen
d) Ein zweidimensionales Feld vom Typ double mit 4 Zeilen und 10 Spalten.
c) int[] feld1D = new int[10];
d) double[][] feld2D = new double[4][10];
-2.
Erzeugen die ein nichtrechteckiges zweidimensionales Feld vom Typ int, indem
eine untere Dreiecksmatrix der Dimension 3 (d.h. 1. Zeile: Ein Element; 3. Zeile:
3 Elemente) abgespeichert werden kann.
int n = 3;
int[][] dreieck = new int[n][];
for (int i = 0; i < n; i++) {
dreieck[i] = new int[i+1];
}
-1.
Nennen Sie den wesentlichen Unterschied zwischen den Klassen String und
StringBuffer
String hat eine feste Größe. Wird einem String ein Zeichen hinzugefügt, muß
erst ein neuer, größerer String erzeugt und Speicher allokiert werden. Das
kostet Zeit.
StringBuffer sind in der Länge Variable. Deswegen verwendet man z.B. für das
einlesen eines Strings die Klasse StringBuffer.
JavaDoc:
A StringBuffer implements a mutable sequence of characters. A string buffer is
like a String, but can be modified. At any point in time it contains some particular
sequence of characters, but the length and content of the sequence can be
changed through certain method calls
Ab hier war es für die Klausur (23.04.) interessant:
1. Welche Methode wird durch den Aufruf this(a,b); in einem Konstruktor der Klasse
Punkt aufgerufen, wenn a und b vom Typ int sind? (Methodenkopf angeben!)
Public Punkt(int a, int b)
Ein anderer Konstruktor der Klasse Punkt
2. Erläutern sie die Zugriffsart protected!
Auf protected deklarierte Methoden und Membervariablen kann nicht aus anderen
Klassen direkt zugegriffen werden (wie private). Im Gegensatz zu private ist eine
proteced Mehtode oder Variable der Mutterklasse auch in einer abgeleiteten Klasse
zugreifbar.
3. Von welcher Klasse sind in Java alle Objekte implizit abgeleited?
Object
4. Was bewirkt der Modifizierer final für eine Methode?
Der final Modifizierer gibt an, dass eine Methode in dieser Klasse endgültig
implementiert ist. Ein Überschreiben in einer abgeleiteten Klasse ist nicht mehr
möglich.
5. Eine Methode der Klasse Punkt wird in der main-Methode einer Klasse PunktTest wie
folgt aufgerufen:
double ld = Punkt.laenge();
Geben Sie den Methodenkopf für die Methode laenge an!
public static double lange()
Die Methode muß public und static sein, da aus einer anderen Klasse darauf
zugegriffen wird, ohne dass eine Instanz der Klasse Punkt erzeigt wird.
6. a) Wie kann der Standardkonstruktor der Basisklasse in einem Konstruktor einer
abgeleiteten Klasse aufgerufen werden?
b) Was ist für diese Anweisung zusätzlich zu beachten?
c) Was Passiert, wenn die Basisklasse keine Konstruktoren besitzt?
a) super();
b) Der Aufruf muß als erste Anweisung im Konstruktor der abgeleiteten Klasse
stehen, da sonst beim compilieren ein Fehler kommt:
call to super must be first statement in constructor
c) In diesem Fall passiert gar nichts. Falls in einer Klasse keine Konstruktoren
deklariert sind, existiert implizit der Standardkonstruktor.
Wird der Konstruktor überladen (mit anderen Parametern deklariert) geht jedoch
der Standardkonstruktor verloren. In diesem Fall wird beim Aufruf des
Satndardkonstruktors im Konstruktor einer abgeleiteten Klasse eine CompilerFehlermeldung ausgegeben:
cannot resolve symbol
Deshalb ist es ratsam, immer einen eigenen Standardkonstruktor zu deklarieren,
auch wenn dieser keine Aufgabe hat.
Beispiel:
class Basis {
public Basis () {
System.out.println("Ich bin Basis");
}
}
public class Child extends Supertest{
public Child () {
super();
System.out.println("Ich bin Child");
}
public static void main(String[] args) {
Child instanz = new Child();
}
}
(Klausur 2)
7. Welche Funktion besitzt der finally-Block einer try-catch-Anweisung?
Die Anweisungen im finally-Block werden in jedem Fall ausgeführt, egal ob eine
Ausnahme aufgetreten ist oder nicht. Das ist in Fällen nützlich, in denen eine Aufgabe
erledigt werden muß egal ob die vorhergehende Aufgabe erfolgreich war oder nicht,
z.B. Schließen eine Datenbanksitzung egal ob vorhergehende Transaktion erfolgreich
war oder auch nicht.
8. Geben Sie eine zweite Möglichkeit der Behandlung einer geprüften
Ausnahme neben der try-catch-Anweisung an und erläutern Sie das Prinzip
kurz!
Die zweite Methode eine Ausnahme zu Behandeln ist es, die Ausnahme nicht zu
behandeln, sondern den „Schwarzen Petern“ an die aufrufende Methode weiter zu
geben. In diesem Fall muß in der Methodendeklaration unbedingt die throws-Klausel
angeführt werden, um dem Kompiler mitzuteilen, dass die Methode Ausnahmen
„wirft“.
Bsp:
public void aufrufer() {
try {
ausnahmeWerfer();
} catch (NumberFormatException nfe) {
System.err.println(nfe);
}
}
public int ausnahmeWerfer()
throws NumberFormatException {
// parseInt wirft NumberFormatExeption,
// falls der String keine Zahl ist
return Integer.parseInt("Bullshit");
}
9. Geben Sie nur das folgende Programmstück an: Falls die Variable x negativ
ist, wird mit dem Text: „x darf nicht negativ sein!“ ausgeworfen.
int x = -1;
try {
Exception e = new Exception("x darf nicht negativ sein!");
if (x < 0) {
throw e;
}
} catch (Exception e) {
System.err.println(e);
}
10.Nennen Sie die beiden Zentralen Pakete für die Grafik- und GUIProgrammierung in Java
java.awt.*
javax.swing.*
11.Geben Sie das folgende Programm Stück an:
Erzeugen Sie ein Swing-Frame mit dem Titel Klausurfenster, einer Größe von
400 x 300 und setzen sie es auf sichtbar!
JFrame klausurfenster = new JFrame();
klausurfenster.setTitle("Klausurfenster");
klausurfenster.setSize(400,300);
klausurfenster.setVisible(true);
12.Geben Sie die vollständige paintComponent-Methode an, um in ein blaues
Rechteck mit der linken oberen Ecke bei (10; 10) und den Seitenlängen von
jeweils 100 zum einem zwei rote Linien zu Zeichnen, die sich im Zentrum
des Rechtecks treffen. Zum anderen soll ein gefüllter grüner Kreis mit dem
Mittelpunkt in diesem Zentrum und einem Durchmesser von 60 gezeichnet
werden.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class PaintPanel extends JPanel {
// nur diese Funktion ist gefragt!
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.blue);
g.drawRect(10, 10, 100, 100);
g.setColor(Color.red);
g.drawLine(11, 60, 109, 60);
g.drawLine(60, 11, 60, 109);
g.setColor(Color.green);
g.fillOval(30, 30, 60, 60);
}
}
class PaintFrame extends JFrame {
public PaintFrame() {
setTitle("Paint");
setSize(300, 200);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Container contentPane = getContentPane();
PaintPanel myPanel = new PaintPanel();
myPanel.setBackground(Color.white);
contentPane.add(myPanel);
}
}
public class Paint {
public static void main(String[] args) {
JFrame frame = new PaintFrame();
frame.show();
}
}
13.Erläutern Sie den Begriff schwergewichtige (heavy-weighted) SwingKomponente. Nennen sie ein Bespiel.
Im AWT 1.0 gab es nur Komponenten die die Bedienelemente des benutzten
Fenstersystems verwendeten (Windows, Motif, ...). Damit war aber keine
Plattformunabhängigkeit zu erreichen, da sich die Elemente der verschiedenen
Systeme unterschiedlich verhielten. In der AWT 1.1 wurden dann sogenannte
„lightweight components“ eingeführt. Das waren eigentlich nur Komponenten oder
Container, die einen transparenten Hintergrund hatten. Jedoch waren diese
Komponenten direkt von den Klassen Component bzw. Container abgeleitet und
nicht von java.awt.window. Dadurch wurde die Erstellung von pure java
Bedienelementen möglich, die sich in jeder Umgebung gleich verhalten.
Im Jdk 1.2 sind mit den Swing-Klassen eine ganze Anzahl von Komponenten
enthalten die unabhängig von den Bedienelementen des Fenstersystems sind und auf
dem Prinzip der lightweight Komponenten der AWT beruhen. Es lässt sich
beispielsweise bei einer Swing-Anwendung auch bestimmen, ob es im Motif- oder
Windowslook ausgeführt werden soll.
Heavy-Weighted Komponenten der Swing-Klassen sind Komponten, die direkt aus
den AWT-Klassen abgeleitet sind. Dies sind grundlegende Komponenten wie JFrame.
14.Skizzieren Sie die Fensteraufteilung eines BorderLayouts, sowie die eines
GridLayouts mit 3 x 4 Rasterzellen.
BorderLayout:
GridLayout 3 x 4
GridLayout
Frame
15.Skizzieren Sie die endgültige Fensteraufteilung eines als 4 x 5 – Gitter
erzeugten GridLayouts, in das nur 8 Komponenten „gezeichnet“ wurden.
16. Nennen Sie den wesentlichen inhaltlichen Unterschied zwischen einer
JCheckBox und einer JRadioButton – Komponente.
JRadioButton-Komponenten, innerhalb einer JRadioGroup, können nicht
gleichzeitig aktiviert sein! Innerhalb einer JRadioGroup kann immer nur ein
JRadioButton aktiv sein. Bei JCheckBox-Komponenten können mehrere
gleichzeitig aktiviert sein. In einer Checkboxgruppe ist die Auswahl beliebig.
( by Franz R.)
17.Wozu dient die Klasse (Komponente) JFileChooser?
18.Nennen und erläutern Sie kurz die drei Klassen (Komponenten) über die in
Swing Menüs realisiert werden.
JMenuBar stellt Methoden zum Zugriff auf die Menüs und Komponenten
bereit, die in einer “ Menüleiste “ enthalten sind.
JMenu bietet eine Reihe von Möglichkeiten, um Einträge in Menüs
aufzunehmen bzw. sie aus Menüs zu entfernen.
JMenuItem erweitert die Klasse AbstractButton. Menüeinträge sind
Schaltflächen, die Text und Symbole anzeigen können. Menüeinträge können
bei Aktivierung “ Aktionsereignisse “ auslösen. ( by Franz R.)
19.Geben Sie das Programmstück an, um aus einer ASCII-Datei die ersten 128
Zeichen zu lesen und in ein char-Feld zfeld mit der Länge 150
abzuspeichern. Das der Datei zugeordnete File-Objekt datei existiert schon.
Geben Sie die Vereinbarung des Feldes, sowie das vollständige Lesen aus der
Datei einschließlich Ausnahmebehandlung an.
Zum Lesen kann die Methode add mit der Prinzipsyntax
add(puffer, anfangsposition, anzahl)
verwendet werden.
import java.io.*;
public class Lies128 {
File file = new File("buffer.txt");
FileReader f;
public Lies128() {
char[] zfeld = new char[150];
try {
f = new FileReader(file);
add(zfeld, 0, 128);
System.out.println(zfeld);
f.close();
} catch (IOException e) {
System.out.println("Fehler beim Lesen der Datei");
}
}
// eigentlich blöd, eine Methode "add" zu nennen,
// wenn eine Datei gelesen werden soll
public int add(char[] cbuf, int offset, int length)
throws IOException {
return f.read(cbuf, offset, length);
}
public static void main(String[] args) {
new Lies128();
}
}
Herunterladen