Fragen zur Java-Zertifizierung, Standardklassen

Frage

Was ist die Ausgabe des folgenden Programmstücks bei der Ausführung?

int i = 3;
int j = 0;
float k = 3.2F;
long m = -3;
if ( Math.ceil(i) < Math.floor(k) )
  if ( Math.abs(i) == m )     System.out.println( i );
  else     System.out.println( j );
else   System.out.println( Math.abs(m) + 1 );
  1. -3
  2. 0
  3. 3
  4. 4
  5. keine dieser

Die Ausgabe ist 4.

Frage

Welche der folgenden sind gültige Objektmethoden der Klasse String?

  1. equals( String )
  2. equals( Object )
  3. trim()
  4. round()
  5. toString()

equls(Object) und toString() sind zwei Objekte, die von Object kommen. Also sind B und E richtig. Eine equals() Funktion mit der Parameter String gibt es nicht und muss es auch nicht geben. Also ist A falsch. Denn da equals(Object) für alle Objekt gilt, gilt im besonderen auch equals(String). Da die String Klasse equals() überschreibt, wird schon darauf geachtet, dass keine beliebigen Objekte verglichen werden. trim() schneidet Leerzeichen vor und hinter der Zeichenkette ab, auch C ist richtig. Eine Rundungsfunktion ist bei String Objekten nicht nötig und möglich. round() ist eine Funktion der Klasse Math. Also ist D falsch.

Frage

Welche Anweisung ergibt den Wert -4.0?

  1. Math.floor( -4.7 )
  2. Math.round( -4.7 )
  3. Math.ceil( -4.7 )
  4. Math.min( -4.7 )

Antwort A und B erzeugen die Ausgabe -5 sind also falsch. Antwort C erzeugt die entsprechende Ausgabe. Lösung D kann nich kompiliert werden,da die min() Funktion zwei Parameter erwartet.

Frage

Was schreibt das Programm auf den Schirm?

String s = "Ulli"; 
int begin = 1;
char end = 3;
System.out.println( s.substring(begin, end) );
  1. Ull
  2. ll
  3. lli
  4. error: no method matching substring(int,char)

B) ll

Frage

Welche Operationen sind bei den gegeben Deklarationen erlaubt?

String s1 = new String("Hello")

String s2 = new String("there");

String s3 = new String();

  1. s3 = s1 + s2;
  2. s3 = s1-s2;
  3. s3 = s1 & s2
  4. s3 = s1 && s2

A s3 = s1 + s2;

Frage

Gegeben ist das folgende Programm:

import java.util.Date;

public class Datum {
  public static void main( String args[] ) {
    Date d1 = new Date( 99, 11, 31 );
    Date d2 = new Date( 99, 11, 31 );
    foo( d1, d2 );
    System.out.println( "d1 ist " + d1 + "\nd2 is " + d2 );
  }
  public static void foo( Date d1, Date d2 ) {
   d2.setYear( 100 );
   d1 = d2;
  }
}

Welche Aussage trifft auf das Programm zu?

  1. Das Programm kompiliert und die Ausgabe ist

    d1 ist Fri December 31 00:00:00 GMT 1999

    d2 ist Fri December 31 00:00:00 GMT 1999

  2. Das Programm kompiliert und die Ausgabe ist 
    d1 ist Fri December 31 00:00:00 GMT 1999

    d2 ist Sun December 31 00:00:00 GMT 2000

  3. Das Programm kompiliert und die Ausgabe ist 
    d1 ist Sun December 31 00:00:00 GMT 2000

    d2 ist Sun December 31 00:00:00 GMT 2000

  4. Die Anweisung ‚d1 = d2‘ wird vom Compiler zurückgewiesen, da Date den Gleich-Operator nicht überladen hat.
  5. Der Ausdruck (d1 is " + d1 + "\nd2 is " + d2) wird vom Compiler zurückgewiesen, da die Date Klasse den Plus-Operator nicht überladen kann.

Das Programm lässt sich korrekt kompilieren, da keine Zeile fehlerhaft ist. Daher sind Antwort D und E falsch. Mit dem Gleichheitszeichen werden lediglich die Referenzen unterschieden und das ist immer erlaubt. Auch der Plusoperator bereitet keine Probleme, da in im Zusammenbauen eines Ausgabestrings auf die Date-Objekte immer toString() aufgerufen wird. Fast alle Objekte nutzen diese Methode zur Identifikation ihrer inneren Werte. Nun bleiben zwei Dinge interessant. Zunächst einmal der Konstruktor mit den Werten und die Methode foo(). Der Konstruktor ist in Ordnung und in der Ausgabe sind Stunde, Minute und Sekunde auf Null, da sie von uns nicht gesetzt wurde. Werfen wir einen Blick auf foo(). Es ändert im ersten Objekt das Jahr auf 100. Aber da die Zuweisung nur lokal wirkt, ändert sich d2 nicht und es ist ein klassischer Programmierfehler. Lokale Variablen haben keine Außenwirkung. Nur im Block der Methode ist nun d1 mit d2 identisch, da d2 auf d1 zeigt. So sind auch die Jahreszahlen gleich. Aber nach dem Verlassen der Methode verschwindet auch die Zuweisung, nur die Änderung in d2 bleibt gültig. d1 behält das Jahr 99. Also ist C falsch. Es bleiben noch A und B als Lösungen. Nun muss man wissen, dass setYear(100) das Jahr tatsächlich auf  2000 setzt. Somit ergibt sich als richtige Lösung nur B, da d1 und d2 die Jahre 1999 und 2000 beschreiben.

Ähnliche Beiträge

Schreibe einen Kommentar

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