Java, Koło 1, odpowiedzi
Pytanie 1.
public class A {
protected int i;
A(float i) {
this.i = (int)i;
}
void A (){
this.i=10+this.i;
}
A(long i){
this.i=100+(int)i;
}
public static void main(String args[]){
A a = new A(2.0f);
System.out.println(a.A());
}
}
konstruktor zawiera wywołanie z parametrem typu float (2.0f), a więc wywoływana jest pierwsza wersja `A', ale przy system.out parametru nie ma, więc wywoływane jest void A, które dodaje 10 do wartości a.
Rumiński jednak poleciał w kulki, i program się nie kompiluje (void type not allowed here).
System.out.println(a.i); wyświetliłoby 2
Prawidłowa odpowiedź: D
Pytanie 2.
public class B {
protected int i;
B(double i)
{
this.i=15+(int)i;
}
public static void main(String args[]){
B b = new B(4.8);
System.out.println(b.i);
}
}
odpowiedź: A, 19
użycie (int) przed nazwą zmiennej powoduje jej zaokrąglenie w dół (obcięcie części ułamkowej)
Pytanie 3.
public class C {
protected int i;
C(int i){
this.i=15+i;
}
C(long i){
this.i=(int)(10+i);
}
public static void main(String args[]){
C c = new C(4);
System.out.println(c.i);
}
}
odpowiedź C, 19
nie wiem dokładnie czemu tak jest, ale konstruktor bez podanego typu uznał, że typ jest int (a nie long). Może zależeć od komplilatora (nie wiem)
Pytanie4 .
class Licznik {
public int wartosc=2;
public Licznik(){
wartosc=(22%4)<<1;
}
public static void main(String[] args) {
Licznik l = new Licznik();
System.out.println(l.wartosc);
}
}
odpowiedź: B, 4
`%' to dzielenie modulo, czyli reszta z dzielenia. Reszta z dzielenia 22 na 4 to 2, 2 << 1 (przesunięcie bitowe w lewo) to 4.
Pytanie 5: Dany jest blok instrukcji switch:
char znak = 'c';
switch (znak) {
default:
case 'a': System.out.println("a");
case 'b': System.out.println("b");
}
Które z poniższych stwierdzeń jest prawdziwe?
Wybierz jedną odpowiedź:
a) Blok ten jest niewłaściwy ponieważ tylko liczby całkowite mogą
być użyte w instrukcji switch.
b) W wyniku wykonania tego kodu zostanie wydrukowana litera "a"
a potem "b".
c) Blok ten jest niewłaściwy ponieważ wyrażenie default powinno
być na końcu.
d) W wyniku wykonania tego kodu nic nie zostanie wydrukowane.
e) W wyniku wykonania tego kodu zostanie wydrukowana litera "a".
Prawidłowa odpowiedź : B, ponieważ w tej konstrukcji nie został użyty rozkaz BREAK, kończący opis zachowania dla danego przypadku, tylko wpisanie `b' spowoduje przeskok do etykiety `B' a więc niewydrukowanie `a'. Wszystko inne co wpiszemy, bez względu na to czy załapie się na `a' czy na `default', spowoduje wykonanie wszystkich poleceń
Pytanie 6: Podać jakie słowo kluczowe musi być użyte w deklaracji klasy
Kobieta, jeśli ma ona dziedziczyć z innej klasy Ssak?
Class kobieta extends ssak
Pytanie 7: Dane jest wyrażenie:
int[][] s = new int[10][5];
Które stwierdzenie jest prawdziwe:
Wybierz jedną odpowiedź:
a) Prezentowana linia kodu jest niewłaściwa.
b) s reprezentuje obiekt macierzy o rozmiarach 10x5
przechowującej wartości typu int
c) s reprezentuje obiekt klasy int o rozmiarze 10x5 przechowującej
wartości typu int
c) s reprezentuje obiekt klasy Integer o rozmiarze 10x5
przechowującej wartości typu int
stawiam na odpowiedź C. To znaczy pierwszą, z odpowiedzi C Ale pewności nie mam, intuicyjny strzał.
Pytanie 8: Dana jest aplikacja:
class Test {
int myArg = 1;
public static void main(String[] args) {
int myArg=2;
System.out.println(Test.myArg);
}
}
kod nie komplikuje się:
non-static variable myArg cannot be referenced from a static context
main jest statyczne, i nie może się odwoływać do obiektów (myArg) definiowanych jako lokalne
Pytanie 9: Która deklaracja dla metody main() aplikacji jest właściwa?
Wybierz jedną odpowiedź:
a) public static void main()
b) static public void main(String[] string)
c) public static void main(String args)
d) static public int main(String[] args)
e) static void main(String[] args)
main musi być publiczne, więc odpowiedz e odpada
d odpada ponieważ definiuje main jak zwracającą wartość typu int, więc potrzebny byłby return
odpowiedz b komplluje sie i uruchamia
odpowiedz c daje no such metod main
poprawna jest odpowiedz b.
Pytanie 10: Który identyfikator jest nieprawidłowy?
Wybierz jedną odpowiedź:
a) $_jedi
b) _jedi
c) 3jedi
d) _5_
odpowiedz C: identyfikator nie moze zaczynac sie od cyfry
Pytanie 11: Podaj kod wywołanie konstruktora (bez argumentów) klasy
Klasa w celu stworzenia referencji do obiektu (identyfikator k).
Klasa k = new Klasa();
final class First {
protected static int a = 1;
static int b = 2;
}
class Second extends First {
public void method() {
System.out.println(a + b);
}
}
po klasach finalnych nie można dziedziczyć, odpowiedz D
Pytanie 13: Dany jest fragment kodu:
String s1 = new String("ALA");
String s2 = new String("ALA");
if (s1 == s2)
if (s1.equals(s2))
System.out.println("a");
else
System.out.println("b");
else
if (s1.equals(s2))
System.out.println("c");
else
System.out.println("d");
S1==s2 zwraca false (obikety nie sa sobie rowne), natomiast s1.equals(s2) zwraca true,
Wiec jako odpowiedz dostajemy C
Pytanie 14: Dany jest fragment kodu:
int[] arr = {1, 2, 3};
for (int i=0; i < 2; ++i)
arr[i+1] = 0;
Które wyrażenie jest prawdziwe (po zadziałaniu pętli)?
Wybierz jedną odpowiedź:
a) arr[0] == 0
b) arr[1] == 1
c) arr[1] == 0
d) arr[2] == 3
e) arr[3] == 0
odpowiedz c
Pytanie 15 : Dany jest kod (2 min.):
class E {
int i;
E(int i) {
this.i = i * 2;
}
}
class F extends E {
public static void main(String[] args) {
F f = new F(2);
}
F(int i) {
super(i);
System.out.println(i);
}
}
Co się stanie w wyniku próby kompilacji i uruchomienia aplikacji?
b) Zostanie wydrukowana wartość 2
ale dlaczego? Ciężko powiedzieć. Bez komendy super() kod nie komplikuje się, pisząc, że nie może znaleźć konstruktora E. Super to odniesienie do nadklasy, po której dziedziczymy, ale jak ktoś wie jak to wyjaśnić to proszę o kontakt ;)
Strasznie się dla Was zmęczył przez te 50 minut:
zambari@sedez.iq.pl
http://www.zambari.art.pl