I termin zwykły: grupa B
(Punktacja: 10+8+12+8+12)
1. Jakie są wady następującej deklaracji:
class Parent {
public void m() throws Exception {
//. . . }
}
Podstawowa wada jest taka, ze potencjalny user takiej klasy nie bedzie w stanie obsluzyc wlasciwie wyjatkow metody m(). Chodzi o to, ze nie bedzie w stanie zaimplementowac wlasciwej reakcji na konkretny wyjatek, bo Exception obejmuje wszystkie wyjatki w Javie. Czyli jest to zbyt ogolny typ, aby umieszczac go w sygnaturze metody.
2. Co będzie wynikiem klonowania obiektu a1 za pomocą standardowej metody clone() w sytuacji, gdy klasy A i B implementują interfejs Clonable?
rys: [a1*A] --Ib--> [b1*B]
Co by było, gdyby klasa A nie implementowała tego interfejsu?
Zalozylem, ze ten jego z dupy rysunek oznacza zawieranie sie obiektu b1 w a1. Wiec jesli w clone() klasy A nie odbywa sie klonowanie obiektow skladowych to powstanie plytka kopia obiektu a1. Jesli zas klonowanie obiektow skladowych sie odbywa to dostaniemy gleboka kopie (nie bedzie zadnych wyjatkow, bo klasa B implementuje Cloneable). Gdyby klasa A nie implementowala Cloneable to java wyplulaby wyjatek CloneNotSupportedException, bo clone() jest metoda klasy Object i bez znacznika w postaci interfejsu Cloneable nie moze byc redefiniowana.
3. Jakie są wady następującej implementacji metody equals:
class Point {
private double x, y;
public boolean eąuals(Point o) {
return (this.x == o.x && this.y == o.y);
}
//...
}
Omów, implementację, która tych wad nie ma.
Wady sa takie, ze np. jak mielibysmy jakis obiekt, ktory dziedziczy po Point i porownywalibysmy go z instacja klasy Point to mogloby sie okazac, ze sa sobie rowne, co jest bzdura. Poprawna implementacja powinna zawierac porownanie klas, pol dodatkowych, ktorych nie ma w klasie bazowej (np. w Point3D byloby jeszcze z) oraz wywolanie bazowej wersji equals. Na kolosie napisalem mu cos takiego:
public boolean equals(Object o) {
if (this.getClass() != o.getClass())
return false;
if (this.z != ((Point3D)o).z)
return false;
return super.equals(o);
}
EDIT: To oczywiscie jest drobne przeklamanie, bo chodzi o implementacje dla Point. Chyba mu napisalem taka metode, ale z rzutowaniem na Point wlasnie. Juz sam nie pamietam
4. Wyjaśnij krótko, jakie są główne typy wyjątków? Wyjaśnij krótko, jaki jest mechanizm rzucania wyjątków i jak są one obsługiwane.
[wykład2] *Typy wyjatkow: sprawdzane, niesprawdzane.
Sprawdzane wyjątki muszą być albo deklarowane w sygnaturze metody, albo łapane i obsługiwane wewnątrz niej.
- ClassNotFound Exception
- CloneNotSupported Exception
- IOException: MalFormed URLException, EOF Exception, Interrupted IOException
Niesprawdzane: RunTime Exception
**Co do obslugi to wiadomo: try, catch, finally.
try {
System.out.println(“What's your name?”);
String name = console.readLine(); //Tu może być rzucony wyjątek.
System.out.println(“Hello, “+ name + “!”);
}
catch (IOException e) { //Tu jest on łapany.
e.printStackTrace();
System.exit(1); //A tu jest on obsługiwany.
}
***Pytanie: Co będzie wynikiem wykonania metody n?
public void m() {
try {
System.out.println("mthrowsrunetimeexceptione.");
thrownew RuntimeException();
} catch(RuntimeExceptione){
System.out.println("mhandlese.");
throw e;
}
finally{
System.out.println("mexecutesitsfinally-part.");
}
}
publicvoid n() {
try {
System.out.println("ncallsm.");
m();
} catch(RuntimeExceptione){
System.out.println("nhandlese.");
}
finally{
System.out.println("nexecutesitsfinally-part.");
}
}
odp:
n callsm.
m throwsrunetimeexception
m handlese.
m executesitsfinally-part.
n handlese.
n executesitsfinally-part.
5. Rozważ następujący fragment metody run(). Jakie problemy wiążą się z następującą deklaracją, jeśli metoda doCriticalThing może być wykonana tylko wtedy, kiedy warunek condition jest spełniony?
try {
if(! condition) wait();
o.doCriticalThing();
}
Jak temu problemowi zaradzić?
Zamiast ifa musi byc while. Wynika to z faktu, ze warunek moze nadal nie byc spelniony po wyjsciu z waita. I tak moze sie dziac kilka razy pod rzad. Widac wiec, ze przy ifie sterowanie mogloby pojsc dalej, mimo ze warunek nie jest spelniony