Java test 3 Java test 3 Co można powiedzieć o poniższym kodzie? public class A { // 1 public static T t; // 2 public static void main(String[] args){ A a = new A(); a.t++; // 3 } } Jego kompilacja zakończy się błędem w linii 1 Jego kompilacja zakończy się błędem w linii 3 Jego kompilacja i uruchomieniu metody main powiedzie się Jego kompilacja zakończy się błędem w linii 2 None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie? public class A { private int i; default void m() { } void m(int i) { this.i = i; } } Wystąpi błąd kompilacji (implementacja metody domyślnej może nastąpić tylko w interfejsie, a nie w klasie) Wystąpi błąd kompilacji (nie można umieszczać w klasie dwóch metod o tej samej nazwie) Jego kompilacja powiedzie się Wystąpi błąd kompilacji (zły dostęp do zmiennej prywatnej) None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie? public class A { private String s; String getS(){ return s;} A(String s){ this.s=s; } public static void main(String[] args){ A a = new A("1"); switch(a.getS()){ case "1": System.out.print("1, "); break; case "2": System.out.print("2, "); break; } } } Jego kompilacja i uruchomienie powiedzie się. Na ekranie zostanie wypisane 1,2, Wystąpi błąd kompilacji (brak bezaurgumentowego konstruktora) Wystąpi błąd kompilacji (zła instrukcja switch) Jego kompilacja i uruchomienie powiedzie się. Na ekranie zostanie wypisane 1, None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie (zamieszczonym w dwóch osobnych plikach)? package inny; public class A { private void k() {} void l() {} public void m() {} void n() {} } package inny; public class B { B(){ A a = new A(); // 1 a.l(); // 2 a.n(); // 3 } } Jego kompilacja nie powiedzie się (wystąpi błąd w linii 2) Jego kompilacja powiedzie się Jego kompilacja nie powiedzie się (wystąpi błąd w linii 3) Jego kompilacja nie powiedzie się (wystąpi błąd w linii 1) None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie? package pakiecik; class E extends Exception{} public class A { public static void m() throws E, Exception { } public static void main(String[] args) throws Exception { m(); } } Jego kompilacja zakończy się błędem (brak deklaracji importu klasy Exception) Jego kompilacja zakończy się błędem (brak wyjątku E w klauzuli throws) Jego kompilacja i uruchomienie metody main powiedzie się Jego kompilacja zakończy się błędem (bo w ciele metody m()brak wyrzucenia wyjątków) None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie (zamieszczonym w dwóch osobnych plikach)? package pakiecik; public class A { private int i; public void m(A a) { a.i++; // 1 } } package inny; import pakiecik.A; public class B extends A{ public static void main(String[] args){ B b1 = new B(), b2 = new B(); // 2 b1.m(b2); // 3 } } Jego kompilacja i wykonanie metody main powiedzie się None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie? Integer i,j; j = new Integer(20); // 1 i = j; j ++; // 2 System.out.println(i); Jego kompilacja i uruchomienie powiedzie się. Na ekranie zostanie wypisane 21 Jego kompilacja zakończy się błędem w linii 1 Jego kompilacja zakończy się błędem w linii 2 Jego kompilacja i uruchomienie powiedzie się. Na ekranie zostanie wypisane 20 None Poprawna odpowiedź Co można o powiedzieć o poniższym kodzie? public class A { private class A {} public static void main(String[] args){ A.A a = null; } } Wystąpi błąd kompilacji (nie można odwoływać się do typu klasy wewnętrznej instancyjnej będąc wewnątrz jakiejś statycznej metody). Wystąpi błąd kompilacji (nie można deklarować wewnętrznych klas o takiej samej nazwie jak klasa zewn.) Jego kompilacja powiedzie się Wystąpi błąd kompilacji (nie można deklarować wewnętrznych klas jako prywatnych) None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie? import java.util.Set; import java.util.HashSet; public class A { private String s; @Override public boolean equals(Object obj) { if (! ((A)obj).equals(s)) return false; return true; } public A(String s) {this.s=s;} public static void main(String[] args){ Set z = new HashSet(); z.add(new A("1")); z.add(new A("1")); System.out.println(z.size()); } } Jego kompilacja i uruchomienie metody main powiedzie się. Na ekranie pojawi się 2 Jego kompilacja zakończy się błędem Jego kompilacja powiedzie się, jednak podczas uruchomienia pojawi się wyjątek Jego kompilacja i uruchomienie metody main powiedzie się. Na ekranie pojawi się 1 None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie? class C { class B { static int x = 10; // 1 } } public class A { public static void main(String[] args) { C.B obj = new C().new B(); // 2 int i = obj.x + 2; // 3 } } Podczas kompilacji wystąpi błąd w linii 2 Podczas kompilacji wystąpi błąd w linii 3 Jego kompilacja i uruchomienie powiedzie się Podczas kompilacji wystąpi błąd w linii 1 None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie (zamieszczonym w dwóch osobnych plikach)? package pakiecik; public class A { protected int i; public int m(A a) { a.i++; return i; // 1 } } package inny; import pakiecik.A; public class B extends A{ public static void main(String[] args){ B b1 = new B(), b2 = new B(); // 2 b1.i =b1.m(b2); // 3 } } Jego kompilacja nie powiedzie się (wystąpi błąd w linii 2) Jego kompilacja nie powiedzie się (wystąpi błąd w linii 1) Jego kompilacja i wykonanie metody main powiedzie się Jego kompilacja nie powiedzie się (wystąpi błąd w linii 3) None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie (przy założeniu, że odpowiednie importy zostały wykonane i klasy znajdują się w osobnych plikach)? interface I extends Remote { default void m() throws RemoteException { System.out.println("A"); } // 1 } public class A implements I, Serializable { // 2 public static void main(String[] args) { try { LocateRegistry.createRegistry(1099).rebind("A", new A()); // 3 Thread.sleep(50000); } catch (RemoteException|InterruptedException e) { }}} public class B { public static void main(String[] args) { try { ((A) LocateRegistry.getRegistry().lookup("A")).m(); // 4 } catch (RemoteException | NotBoundException e) { }}} Podczas kompilacji wystąpi błąd w liii 3 lub 4 (tzn. którejś z nich) Podczas kompilacji wystąpi błąd w linii 2 Podczas kompilacji wystąpi błąd w linii 1 Jego kompilacja i uruchomienie powiedzie się, jeśli najpierw zostanie uruchomiona metoda main klasy A, a potem metoda main klasy B. Jednak uruchomienie metody m()będzie lokalne None Poprawna odpowiedź Co można powiedzieć o klasie A (zakładając, że wszystkie konieczne importy zostały dokonane)? public class A { static BufferedReader instream; static Socket s1, s2; public static void main(String[] args) throws UnknownHostException, IOException { new Thread(() -> { try { s1 = new ServerSocket(2000).accept(); instream = new BufferedReader(new InputStreamReader(s1.getInputStream())); System.out.println(instream.readLine()); } catch (Exception ex) { System.out.println("Exception"); }}).start(); s2 = new Socket("localhost", 2000); s2.close(); } } Jej kompilacja i uruchomienie metody main powiedzie się. Program zakończy się, a na ekranie pojawi się Exception Jej kompilacja powiedzie się. Po uruchomieniu metody main ekran pozostanie pusty, a program nie skończy swojego działania Jej kompilacja zakończy się błędem Jej kompilacja i uruchomienie metody main powiedzie się. Program zakończy się, a na ekranie pojawi się null None Poprawna odpowiedź Co można powiedzieć o klasie A (zakładając, że wszystkie konieczne importy zostały dokonane)? class A { public static void main(String[] args) { Socket so; try { so = new Socket("192.168.75.94", 2000); // 1 ObjectInputStream out = new ObjectInputStream(so.getInputStream()); Integer i = out.readObject(); // 2 System.out.println(i); // 3 } catch (Exception e) {} } } Jej kompilacja powiedzie się Jej kompilacja zakończy się błędem w linii 2 Jej kompilacja zakończy się błędem w linii 3 Jej kompilacja zakończy się błędem w linii 1 None Poprawna odpowiedź Co można o powiedzieć o poniższym kodzie (zamieszczonym w trzech osobnych plikach)? public class A { private A(){} // 1 } public class B extends A { public B(){ } // 2 } public class C { public static void main(String[] args) { B b = new B(); // 3 }} Jego kompilacja powiedzie się Wystąpi błąd kompilacji w linii 3 Wystąpi błąd kompilacji w linii 1 Wystąpi błąd kompilacji w linii 2 None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie? class R extends Thread { R(Runnable t) { new Thread(t).start(); // 1 } public void run() { try { join(); } catch (InterruptedException e) {} } } public class A { public static void main(String args[]) { R r = new R(() -> System.out.println("T")); // 2 r.start(); } } Jego kompilacja i uruchomienie metody main powiedzie się: na ekranie nic się nie pojawi, a program zakończy swoje działanie. Jego kompilacja i uruchomienie metody main powiedzie się: na ekranie zostanie wypisanie T, jednak program nie zakończy swojego działania Jego kompilacja i uruchomienie metody main powiedzie się: na ekranie zostanie wypisanie T, po czym program zakończy swojego działanie. Jego kompilacja nie uda się. Błąd wystąpi w linii 1 lub linii 2 (tj. w którejś z nich) None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie? public class A { // 1 public U m(U u, T t){ // 2 if(u.equals(t)) return u; else return null;} public static void main(String[] args) { System.out.println((new A()).m("10", "10")); // 3 } } Jego kompilacja zakończy się błędem w linii 3 Jego kompilacja zakończy się błędem w linii 2 Jego kompilacja i uruchomienie metody main powiedzie się (na ekranie wypisane zostanie 10) Jego kompilacja zakończy się błędem w linii 1 None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie (zakładając, że wykonano wszystkie konieczne importy)? public class A { // 1 Collection c = new LinkedList(); // 2 public static void main(String[] args) { (new A()).c.add(10); // 3 } } Jego kompilacja zakończy się błędem w linii 2 Jego kompilacja i uruchomienie metody main powiedzie się Jego kompilacja zakończy się błędem w linii 3 Jego kompilacja zakończy się błędem w linii 1 None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie? import java.util.Random; class B { public static String s = "Ala"; } class W extends Thread { private static Random r = new Random(); W(String s) {super(s);} // 1 public void run() { while (true) { synchronized (B.s) { // 2 B.s = this.getName()+ // 3 Long.toString(Math.abs(r.nextLong()), 36); System.out.println(B.s); }}} } public class A { public static void main(String[] s) { new W("A").start(); new W("B").start(); } } Jego kompilacja zakończy się błędem w linii 2 Jego kompilacja zakończy się błędem w linii 3 Jego kompilacja zakończy się błędem w linii 1 Jego kompilacja i wykonanie metody main powiedzie się None Poprawna odpowiedź Co można powiedzieć o poniższym fragmencie kodu przy danych definicjach klas B, Prod, Cons? B b = new B(); Prod p = new Prod(b); Cons c = new Cons(b); c.start(); p.start(); class B { double pole = 12.0;} class Prod extends Thread { private B b = null; Prod(B b) {this.b = b; } public void run() { while(true){ synchronized(b.pole){ b.pole = Math.random(); }} }} class Cons extends Thread { private B b = null; Cons(B b) {this.b = b;} public void run() { while(true){ synchronized(b.pole){ System.out.println(b.pole); }} }} Jego kompilacja i uruchomienie powiedzie się. Powstaną dwa wątki, które zakleszczą się (program wypisze kilka wartości, a potem „zawiesi się”). Jego kompilacja i uruchomienie powiedzie się. Powstaną dwa wątki, które będą zmieniać i odczytywać wartość b.pole wzajemnie się przy tym wykluczając (iteracje w pętli while będą mogły powtórzyć się kilka razy zanim dojdzie do wykluczenia) Jego kompilacja zakończy się błędem Jego kompilacja i uruchomienie powiedzie się. Powstaną dwa wątki, które będą zmieniać i odczytywać wartość b.pole wzajemnie się przy tym wykluczając (iteracje w pętli while będą wykonywać się na zmianę, raz jednego wątku, raz drugiego) None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie? public class A { private void m(){ // 1 private final class B {} // 2 } public static void main(String[] args){ new A().m(); // 3 } } Wystąpi błąd kompilacji w linii 1 Wystąpi błąd kompilacji w linii 2 Wystąpi błąd kompilacji w linii 3 Jego kompilacja powiedzie się None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie? interface I{ public void n(); } public class A { public void m(){} public void n(I i){ i.n(); } public static void main(String[] args){ A a = new A(); // 1 a.n(()-> {}); // 2 a.n(A::m); // 3 } } Jego kompilacja powiedzie się Wystąpi błąd kompilacji w linii 1 Wystąpi błąd kompilacji w linii 3 Wystąpi błąd kompilacji w linii 2 None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie? class B extends A {} public class A { public static void n(A... a){} // 1 public static void main(String[] args) { B[] ab = new B[2]; A a = new A(); n(ab); // 2 n(a,a); // 3 } } Jego kompilacja i uruchomienie metody main powiedzie się Jego kompilacja zakończy się błędem w linii 3 Jego kompilacja zakończy się błędem w linii 1 Jego kompilacja zakończy się błędem w linii 2 None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie? public class A { void m(int a) { } int m(String s){return Integer.parseInt(s);} String m(int a){ return Integer.toString(a);} } Jego kompilacja powiedzie się Jego kompilacja nie powiedzie się (nieobsłużony wyjątek NumberFormatException) Jego kompilacja nie powiedzie się (zła konwersja z int do String) Jego kompilacja nie powiedzie się (złe przeciążenie metody m) None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie (przy założeniu, że odpowiednie importy zostały wykonane i klasy znajdują się w osobnych plikach)? public interface I extends Remote { default void m() throws RemoteException { System.out.println("A"); } // 1 } public class A extends UnicastRemoteObject implements I { // 2 public static void main(String[] args) { try { LocateRegistry.createRegistry(1099).rebind("A", new A()); // 3 } catch (RemoteException e) { }}} public class B { public static void main(String[] args) { try { ((I) LocateRegistry.getRegistry(1099).lookup("A")).m(); // 4 } catch (RemoteException | NotBoundException e) { }}} Podczas kompilacji wystąpi błąd w linii 1 Jego kompilacja i uruchomienie powiedzie się, jeśli najpierw zostanie uruchomiona metoda main klasy A, a potem metoda main klasy B. Tylko wtedy zdalnie uruchomiona zostanie metoda m(). Podczas kompilacji wystąpi błąd w linii 2 Podczas kompilacji wystąpi błąd w liii 3 lub 4 (tzn. którejś z nich) None Poprawna odpowiedź Co można powiedzieć o poniższym kodzie? package pakiecik; import java.util.Set; import java.util.TreeSet; public class A { public static void main(String[] args){ Set z = new TreeSet(); z.add(new A()); z.add(new A()); System.out.println(z.size()); } } Jego kompilacja i uruchomienie metody main powiedzie się. Na ekranie pojawi się 1 Jego kompilacja powiedzie się, jednak podczas uruchomienia pojawi się wyjątek Jego kompilacja zakończy się błędem Jego kompilacja i uruchomienie metody main powiedzie się. Na ekranie pojawi się 2 None Poprawna odpowiedź Time's up