Fragen zur Java-Zertifizierung, Deklarationen und Zugriffskontrolle

Frage

Analysiere die Quellcodezeile

if ( 5 & 7 > 0 ) System.out.println( "Hullahupp-Reifen" );

  1. Diese Zeile lässt sich nicht kompilieren
  2. Diese Zeile lässt sich kompilieren, aber nichts erscheint auf der Standardausgabe
  3. Dieser Code lässt sich kompilieren und das Wort "Hullahupp-Reifen" erscheint in der Standard-Ausgabe.

Innerhalb vom Schleifen und Verzweigungen muss der Typ boolean sein. 5&7 ergeben zwar einen Wert, der verglichen mit 0 wahr oder falsch sein kann, jedoch ist die richtige Antwort A. Das Problem sind die unterschiedlichen Vorrangsregeln für Operationszeichen. Hier bindet 7>0 stärker als 5&7. So wird der Versuch unternommen 5 mit einem Wahrheits-Wert Und zu verknüpfen. Richtig wäre (5&7)>0.

Frage

Welche der Zeilen erzeugt ein Array mit fünf leeren Strings?

  1. String a [] = new String [5];
  2. for (int i = 0; i < 5; a[i++] = "") ;
  3. String a [] = {"", "", "", "", ""};
  4. String a [5];
  5. String [5] a;
  6. String [] a = new String [5];
    for ( int i = 0; i < 5; a[i++] = null ) ;

In Antwort A werden keine Strings erzeugt, sondern nur ein Feld mit 5 Referenzen. Somit ist A falsch. In B werden fünf leere Stings zugewiesen, ebenso in Antwort C, daher sind beide korrekt. Diese Strings sind natürlich nicht individuell, sondern die alle fünf Referenzen werden auf den gleichen Leerstring zeigen. Antwort D und E sind falsche Deklarationen für ein Feld. Antwort F ist falsch, da die Referenz auf Null zeigt, nicht aber auf einen leeren String "".

Frage

Welche Aussage beschreibt am besten die folgende Programmzeile?

String[][] s = new String[10][];

  1. Diese Zeile ist illegal.
  2. Es ist ein zweidimensionales Feld mit 10 Zeilen und 10 Spalten.
  3. Es ist ein Feld von 10 Feldern.
  4. Jedes Element in s ist mit "" initialisiert.
  5. Jedes Element in s ist nicht initialisiert und muss daher vor der Nutzung initialisiert werden.

Diese Zeile kann normal kompiliert werden, daher ist A falsch. C ist dagegen richtig, denn die Programmzeile schafft Platz für ein Array mit 10 Einträgen in einer Dimension. Wie groß die andere Dimension ist, bleibt offen. Daher ist B falsch. Da die andere Dimension in ihrer Größe noch nicht definiert ist, ist ein Zugriff auf ein Element noch ungültig. Daher kann jedes Element auch noch nicht mit einem Leerstring initialisiert sein. D ist also falsch und E richtig.

Frage

Welche Felddeklaration ist korrekt?

  1. String temp[] = new String { "u" "l" "l" "i" };
  2. String temp[] = { "u " "l" "l" "i" };
  3. String temp = { "a", "b", "c" };
  4. String temp[] = { "a", "b", "c" };

Antwort A, B und C erzeugen einen Übersetzungsfehler und D ist korrekt. Bei A und B fehlen für die Feldelemente das trennende Komma. Dann wäre B korrekt. Da A der Versuch einer Deklaration eines anonymen Feldes ist, muss noch hinter dem Typ String Klammern stehen. Korrigierte man A in String temp[] = new String[] { "u", "l", "l", "i" } ließe es sich kompilieren. Bei C fehlen ebenfalls die Klammern, da die geschweiften Klammern Elemente eines Feldes bezeichnen und nicht zu einem String zusammengesetzt werden können.

Frage

Was passiert, wenn folgendes Programm kompiliert wird?

1: public class Clazz {
2:  public static void main( String args[] ) {
3:    int feld[] = new int[]{1,2,3};
4:    System.out.println( feld[1] );
5:  }
6:}
  1. 1
  2. 2
  3. Übersetzungsfehler, da feld vor der Benutzung nicht definiert wurde.
  4. Übersetzungsfehler, da die Feldgröße festgelegt werden muss.

B ist die korrekte Antwort, da wir in Zeile 3 ein anonymes Feld mit den Elementen 1, 2 und 3 anlegen. An der Stelle 1 befindet sich die Zahl 2, da in Java genauso wie in C(++) der Feldindex bei Null beginnt. Da Felder in Java besondere Objekte sind (sogenannte Array-Objekte innerhalb der virtuellen Maschine) weist die Zuweisung in Zeile 2 dem feld Objekt eine gültige Referenz zu. Demnach ist C falsch. Die Feldgröße kann in Java nur durch die spezielle Form des new-Operator festgelegt werden, nicht durch reine Deklaration des Feldes. Also ist auch D falsch.

Frage

Was passiert, wenn folgendes Programm kompiliert wird?

public class Clazz {
  public static void main( String args[] ){
    int feld[] = new int[5];
    System.out.println( feld[0] );
  }
}
  1. Übersetzungsfehler, da feld vor der Benutzung nicht definiert wurde.
  2. null
  3. 0
  4. 5

Das Programm definiert eine Feld und weist der Referenz ein Feld der Größe von 5 int zu. Das Feld ist dabei mit 0 Werten initialisiert. Demnach ist der Zugriff auf feld[0] bis feld[4] erlaubt und jeder der Einträge ist 0. C ist die einzige richtige Antwort.

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert