Scopul acestui laborator îl constă recapitularea principalelor noțiuni de OOP și Java prezentate în cadrul laboratoarelor.
Testul final va verifica aceste concepte prin întrebări grilă similare celor date ca exemplu în acest laborator (nu toate exercțiile din laborator sunt însă conforme cu formatul testului).
1) Se consideră următoarea declarație de clasă. Ce se va întâmpla la compilarea și executarea ei?
public class Core { private void privateMethod() { System.out.println("This is a private method"); } public static void staticMethod() { System.out.println("This is a static method"); this.privateMethod(); } // Application Entry Point public static void main(String[] Params) { Core Instance = new Core(); Instance.staticMethod(); Core.staticMethod(); } }
“This is a static method”
și de două ori “This is a private method”
main()
(Core.staticMethod()
) this.privateMethod()
Instance.staticMethod()
2) Se consideră următoarea situație. Câte versiuni distincte ale variabilei x
sunt accesibile în (*)?
class Outer { int x; class Inner extends Outer { int x; void f(int x) { (*) } } }
3) Se consideră următoarea structură de clase. La rularea metodei printAll()
, ce valori se vor afișa și în ce ordine (ignorați faptul că acestea apar pe linii diferite)?
class Outer { int x = 10; class Inner extends Outer { int x = 15; void printFirst(int x) { System.out.println(this.x); System.out.println(x); System.out.println(super.x); } void printSecond() { System.out.println(this.x); System.out.println(x); System.out.println(super.x); } void printAll() { printFirst(20); printSecond(); } } }
4) În următorul exemplu, ce se va afișa (ignorați faptul că mesajele apar pe linii diferite)?
public class Core { private void someFunction(int x) { try { System.out.println("1"); if (x == 1) return; x /= x; } catch (Exception error) { System.out.println("2"); } finally { System.out.println("3"); } } // Application Entry Point public static void main(String[] Params) { Core instance = new Core(); instance.someFunction(1); instance.someFunction(0); } }
5) În fișierul “LuxuryCar.java” există următoarele declarații:
class Car { private String name = "Some Car"; } public class LuxuryCar extends Car { public LuxuryCar() { name = "Luxury Car"; } } class Main { // Application Entry Point public static void main(String[] params) { LuxuryCar instance = new Car(); } }
Ce se întâmplă în momentul în care încercăm să compilăm conținutul acestui fișier?
6) Fie următoarea secvență de cod. Ce se întâmplă la execuția ei?
import java.util.*; public class Main { private void process() { ArrayList<Integer> myList = new ArrayList<Integer>(); try { for(int I = 0; I < 5; ++I) myList.add(I + 1); int result = myList.get(5); System.out.println(result); } catch(StackOverflowError error) { System.out.println("! Stack overflow !"); } } // Application Entry Point public static void main(String[] Params) { new Main().process(); } }
“! Stack overflow !”
5
IndexOutOfBoundsException
, care nu va fi prinsă 7) Ce se întâmplă la compilarea și executarea următoarei aplicații Java?
public class Main { private static Main Instance = new Main(); public static Main getInstance() { return Instance; } public void print() { System.out.println(this.getClass()); } // Application Entry Point public static void main(String[] Params) { Main.getInstance().print(); new Main().print(); } }
new Main()
new Main().print();
nu este corectă Instance
nu este accesibilă la nivelul funcției getInstance()
8) Ce va afișa instrucțiunea new Child(2)
?
class Parent { public Parent() { System.out.println("Parent 0"); } public Parent(int x) { System.out.println("Parent 1"); } } class Child extends Parent { public Child(int x) { System.out.println("Child 1"); } }
9) Fie următoarea secvență:
class C {} class D extends C {} class A { void f(C c) {...} void f(D d) {...} } class B extends A { void f(C c) {...} void f(D d) {...} }
Care implementare a metodei f
va fi utilizată în cadrul invocării de mai jos:
A a = new B(); C c = new D(); a.f(c);
10) Adăugați un cuvânt cheie la următorul antet de clasă, astfel încât declarația să devină contradictorie:
abstract class C
11) Întrebarea de mai sus, aplicată în cazul metodei:
abstract void f()