Java test 3 Java test 3 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 1) Jego kompilacja nie powiedzie się (wystąpi błąd w linii 3) 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 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 i uruchomienie powiedzie się. Powstaną dwa wątki, które zakleszczą się (program wypisze kilka wartości, a potem „zawiesi się”). 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 (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? 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 Jego kompilacja i uruchomienie powiedzie się Podczas kompilacji wystąpi błąd w linii 3 Podczas kompilacji wystąpi błąd w linii 1 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 powiedzie się. Po uruchomieniu metody main ekran pozostanie pusty, a program nie skończy swojego działania Jej kompilacja i uruchomienie metody main powiedzie się. Program zakończy się, a na ekranie pojawi się null Jej kompilacja i uruchomienie metody main powiedzie się. Program zakończy się, a na ekranie pojawi się Exception Jej kompilacja zakończy się błędem 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 }} Wystąpi błąd kompilacji w linii 1 Wystąpi błąd kompilacji w linii 3 Jego kompilacja powiedzie się 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 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) Jego kompilacja i uruchomienie metody main powiedzie się: na ekranie nic się nie pojawi, a program zakończy swoje działanie. 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 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. Tylko wtedy zdalnie uruchomiona zostanie metoda 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)? 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) { }}} 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 Podczas kompilacji wystąpi błąd w linii 1 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 None Poprawna odpowiedź 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 3 Jego kompilacja zakończy się błędem w linii 2 Jego kompilacja zakończy się błędem w linii 1 Jego kompilacja i uruchomieniu metody main powiedzie się 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 powiedzie się, jednak podczas uruchomienia pojawi się wyjątek Jego kompilacja i uruchomienie metody main powiedzie się. Na ekranie pojawi się 1 Jego kompilacja zakończy się błędem 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 (zły dostęp do zmiennej prywatnej) Jego kompilacja powiedzie się Wystąpi błąd kompilacji (nie można umieszczać w klasie dwóch metod o tej samej nazwie) 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 zakończy się błędem w linii 2 Jej kompilacja zakończy się błędem w linii 1 Jej kompilacja powiedzie się Jej kompilacja zakończy się błędem w linii 3 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 1 Jego kompilacja i uruchomienie metody main powiedzie się (na ekranie wypisane zostanie 10) Jego kompilacja zakończy się błędem w linii 3 Jego kompilacja zakończy się błędem w linii 2 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 wyjątku E w klauzuli throws) Jego kompilacja zakończy się błędem (brak deklaracji importu klasy Exception) Jego kompilacja zakończy się błędem (bo w ciele metody m()brak wyrzucenia wyjątków) Jego kompilacja i uruchomienie metody main 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 } } Wystąpi błąd kompilacji w linii 2 Wystąpi błąd kompilacji w linii 1 Wystąpi błąd kompilacji w linii 3 Jego kompilacja powiedzie się 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 zakończy się błędem w linii 3 Jego kompilacja i uruchomienie metody main powiedzie się Jego kompilacja zakończy się błędem w linii 1 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 deklarować wewnętrznych klas jako prywatnych) Jego kompilacja powiedzie się 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.) 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 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 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 3) Jego kompilacja i wykonanie metody main powiedzie się Jego kompilacja nie powiedzie się (wystąpi błąd w linii 2) Jego kompilacja nie powiedzie się (wystąpi błąd w linii 1) 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 Jego kompilacja powiedzie się Wystąpi błąd kompilacji w linii 2 Wystąpi błąd kompilacji w linii 3 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 zakończy się błędem w linii 1 Jego kompilacja zakończy się błędem w linii 2 Jego kompilacja zakończy się błędem w linii 3 Jego kompilacja i uruchomienie metody main powiedzie się 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 1 Jego kompilacja zakończy się błędem w linii 3 Jego kompilacja i wykonanie 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? Integer i,j; j = new Integer(20); // 1 i = j; j ++; // 2 System.out.println(i); Jego kompilacja zakończy się błędem w linii 1 Jego kompilacja i uruchomienie powiedzie się. Na ekranie zostanie wypisane 21 Jego kompilacja i uruchomienie powiedzie się. Na ekranie zostanie wypisane 20 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 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; } } } Wystąpi błąd kompilacji (zła instrukcja switch) Jego kompilacja i uruchomienie powiedzie się. Na ekranie zostanie wypisane 1,2, Jego kompilacja i uruchomienie powiedzie się. Na ekranie zostanie wypisane 1, Wystąpi błąd kompilacji (brak bezaurgumentowego konstruktora) 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 nie powiedzie się (nieobsłużony wyjątek NumberFormatException) Jego kompilacja powiedzie się 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ź Time's up