Prof. Dr. Detlef Krömker Ashraf Abu Baker Robert-Mayer-Str. 10 60054 Frankfurt am Main Tel.: +49 (0)69798-24600 Fax: +49 (0)69798-24603 EMail: [email protected] 1. Welche Programmzeilen definieren die main-Methode richtig? A. B. C. D. E. public public public public public static void main() static void main(String arg[ ]) void main(String [ ] arg) static void main(String[ ] args) static int main(String [ ] arg) 2. Betrachte das folgende Programm : class GetMe { public static void main(String args[]) { A a = new A(); a.value = 100; a.increment(a); System.out.println(a.value); } } class A { public int value; public void increment(A a) { a.value++; } Welcher Wert wird in der 6. Zeile ausgegeben? A. B. C. D. 0 1 100 101 3. Angenommen ein Quelltext enthält sehr viele import- Anweisungen. Wie beeinflusst das die Kompilationszeit des Programms? A. B. C. Die Kompilierung dauert nicht länger. Die Kompilierung dauert etwas länger. Die Kompilierung dauert wesentlich länger. 4. Angenommen ein Quelltext enthält sehr viele import Anweisungen und eine Klassendefinition. Wie beeinflusst das die Ladezeit der Klasse? A. B. C. Es tritt keine Veränderung auf. Das Laden der Klasse dauert etwas länger. Das Laden der Klasse dauert wesentlich länger. 5. Welche sind legale import Anweisungen? A. B. C. D. import java.util.Vector; static import java.util.Vector.* ; import static java.util.Vector.*; import java.util.Vector static; 6. Was lässt sich statisch importieren? A. B. C. D. Package-Namen Namen von statischen Methoden Statsiche Variablen Variablennamen innerhalb einer Methode 7. Welche Optionen sind richtig? A. B. C. D. primitive Datentypen werden per call by-reference übergeben. primitive Datentypen werden per call by- value übergeben. referentielle Typen werden per call by-reference übergeben referentielle Typen werden per call-by-value übergeben 8. Welche der Ausdrücke sind gültig? A. B. C. D. String x = “Hello”; int y = 9; x += y; String x = “Hello”; int y = 9; if (x == y) {} String x = “Hello”; int y = 9; x = x + y; String x = “Hello”; int y = 9; y = y + x; 9. Welche der Aussagen ist wahr? A. B. Eine abstrakte Klasse darf keine finalen Methoden besitzen. Eine finale Klasse darf keine abstrakten Methoden besitzen. 10. Wie lässt sich der folgende Code minimal verbessern, so dass er kompiliert? 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: A. B. C. D. E. final class Aaa { int xxx; void yyy() { xxx = 1;} } class Bbb extends Aaa { final Aaa finalref = new Aaa(); final void yyy() { System.out.println("In method yyy()"); finalref.xxx = 12345; } Entferne in Zeile 3 final. Entferne in Zeile 12 final. Entferne Zeile 17. Entferne final in Zeile 3 und 12. Das Programm kompiliert ohne Verbesserung. 11. Was ergibt der folgende Programm-Code? 1: class StaticStuff { 2: static int x = 10; 3: 4: static { 5: x += 5; 6: } 7: public static void main(String args[]) { 8: 9: System.out.println("x = " + x); 10: } 11: 12: static { 13: x /= 5; 14: } 15: } A. B. C. D. E. Die Zeilen 5 und 13 lassen sich nicht kompilieren, weil die Methodennamen sowie die Rückgabewerte fehlen. Die Zeile 13 lässt sich nicht kompilieren, weil man nur einen statischen Initialisierer verwenden darf. Das Programm kompiliert, und die Ausgabe ist 10. Das Programm kompiliert, und die Ausgabe ist 15. Das Programm kompiliert, und die Ausgabe ist 3. 12. Welche Aussage ist richtig für das Programm? 1: class HasStatic { 2: private static int x = 100; 3: public static void main(String args[]) { 4: 5: HasStatic hs1 = new HasStatic(); 6: hs1.x++; 7: HasStatic hs2 = new HasStatic(); 8: hs2.x++; 9: hs1 = new HasStatic(); 10: hs1.x++; 11: HasStatic.x++; 12: System.out.println("x = " + x); 13: } 14: } A. B. C. D. E. Die Zeile 8 kompiliert nicht, da es eine statische Referenz auf eine private Variable ist. Die Zeile 11 kompiliert nicht, da es eine statische Referenz auf eine private Variable ist. Das Programm kompiliert und die Ausgabe ist x = 102. Das Programm kompiliert und die Ausgabe ist x = 103. Das Programm kompiliert und die Ausgabe ist x = 104. 13. Betrachte folgende Klassendefinition : 1: package abcde; 2: public class Vogel { protected static int referenceCount = 0; 3: 4: public Vogel() { 5: referenceCount++; 6: } 7: protected void fly() { /* */ 8: } 9: static int getRefCount() { 10: return referenceCount; 11: } 12: } Welche Aussage ist richtig für die Klasse Vogel und die Klasse Papagei unten? 1: package abcde; 2: 3: class Papagei extends abcde.Vogel { 4: public void fly() { 5: /* */ 6: } 7: 8: public int getRefCount() { 9: return referenceCount; 10: } 11: } A. B. C. D. E. Die Kompilierung von Papagei.java schlägt fehl in Zeile 4, weil die Methode fly() protetecd in der Superklasse ist, und die Klassen Vogel und Papagei im gleichen package sind. Die Kompilierung von Parrot.java schlägt fehl in Zeile 4, weil die Methode fly() proteted in der Superklasse und public in der Subklasse ist, und Methoden nicht überschrieben werden sollten, damit Sie „öffentlicher“ sind. Die Kompilierung von Papagei.java schlägt fehl in Zeile 8, weil die Methode getRefCount() statisch ist, und statische Methoden nicht überschrieben werden sollten damit Sie nicht statisch sind. Papagei.java kompiliert, aber es wird immer eine RuntimeException geworfen werden, sobald die Methode fly() in einer Instanz der Klasse Papagei aufgerufen wird. Papagei.java kompiliert, aber es wird immer eine RuntimeException geworfen werden, sobald die Methode getRefCount() in einer Instanz der Klasse Papagei aufgerufen wird. 14. Betrachte die folgende Klasse: 1: 2: 3: 4: 5: 6: 7: 8: package abcde; public class Vogel { protected static int referenceCount = 0; public Vogel() { referenceCount++; } protected void fly() { } static int getRefCount() { return referenceCount; } } Welche Aussage ist richtig für die Klasse Vogel und die Klasse Nachtigall unten? 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: A. B. C. D. E. package singers; class Nachtigall extends abcde. Vogel { Nachtigall () { referenceCount++; } public static void main(String args[]) { System.out.println("Before: " + referenceCount); Nachtigall florence = new Nachtigall (); System.out.println(" After: " + referenceCount); florence.fly(); } } Das Programm kompiliert. Die Ausgabe ist: Bevor: 0 After: 2. Das Programm kompiliert. Die Ausgabe ist: Bevor: 0 After: 1. Die Kompilierung von Nachtigall schlägt fehl in Zeile 4, da statische Methoden nicht überschrieben werden dürfen. Die Kompilierung von Nachtigall schlägt fehl in Zeile 10, da die Methode fly() in der Superklasse protected ist. Die Klasse Nachtigall kompiliert, aber es wird eine Exception in Zeile 10 geworfen, da die Methode fly() in der Superklasse proteced ist. 15. Welche der Aussagen sind wahr? A. B. C. D. E. F. Eine abstrakte Klasse muss instanziiert werden. Eine abstrakte Klasse muss mindestens eine abstrakte Methode enthalten. Eine abstrakte Klasse muss mindestens eine abstrakte Feldvariable enthalten. Abstrakte Klassen müssen überschrieben werden. Eine abstrakte Klasse muss deklarieren, dass Sie ein Interface implementiert. Keines von A-E. 16. Welche der Aussagen sind richtig? A. B. C. D. E. Eine finale Klasse muss instanziiert werden. Eine finale Klasse muss mindestens eine finale Methode enthalten. Eine finale Klasse muss mindestens ein abstraktes Feld enthalten. Eine finale Klasse darf nicht abgeleitet werden. Keines von A-D. Sonst macht die Musterlösung keinen Sinn, da ist D richtig! 17. Welche der Aussagen sind richtig? A. B. C. D. E. Eine finale Klasse muss instanziiert werden. Eine finale Klasse sollte nur finale Methode enthalten. Eine finale Klasse sollte keine nicht-finalen Datenfelder enthalten. Eine abstrakte Klasse darf nicht abgeleitet werden. Keines von A-D. dito, aber in diesen Punkt wird die Musterlösung auf E geändert. 18. Was gibt folgendes Programm aus? public class A { static int x; public static void main(String args[]) { A that1 = new A(); A that2 = new A(); that1.x = 5; that2.x = 1000; x = -1; System.out.println(x); } } A. B. C. D. 0 5 1000 -1 19. Betrachte die beiden Klassen, die in verschiedenen Dateien gespeichert sind: public class Base { public void method(int i) { System.out.print("Value is " + i); } } public class Sub extends Base { public void method(int j) { System.out.print("This value is " + j); } public void method(String s) { System.out.print("I was passed " + s); } public static void main(String args[]) { Base b1 = new Base(); Base b2 = new Sub(); b1.method(5); b2.method(6); } } Was gibt das Programm aus, wenn die main-Methode aufgerufen wird? A. B. C. D. E. Value is 5Value is 6 This value is 5This value is 6 Value is 5This value is 6 This value is 5Value is 6 I was passed 5I was passed 6 20. Betrachte die folgende Klasse: public class Test extends Base { public Test(int j) { } public Test(int j, int k) {// 4 super(j, k); } } Womit werden Instanzen der Klasse Test erzeugt? t = new Test(); t = new Test(1); Test t = new Test(1,2); Test t = new Test(1,2,3); Test t = (new Base()).new Test(1); A. B. C. D. E. Test Test 21. Angenommen die Klassen Test und Base sind im gleichen package. Welche Konstruktoren sollten in Base vorkommen? A. Base() { } B. Base(int j) { } C. Base(int j, int k) { } D. Base(int j, int k, int l) { } 22. Welche der Methoden können die Methode void xyz(float f) überschreiben? A. void xyz(float f) B. public void xyz(float f) C. private void xyz(float f) D. public int xyz(float f) E. private int xyz(float f) Vorname Nachname Matrikelnummer Erreichte Punktzahl Gesamtpunktzahl Tutor: Frank Abromeit Igor Geier Gerold Kühne Mohammed Sayar 22