27 lut 2010

Porównanie modyfikatorów


  1. Zmienne lokalne : final
  2. Zmienne ( nie lokalne) : final, public, protected, private ,static, transient volatile
  3. Metody: final, public, protected, private ,static, abstract, synchronized, strictpf, native
  4. Klasa: hm... public, default, strictfp, abstract...( dodać)

Zmienne instancji

  1. Można wykorzystać 4 aces modifiers
  2. Może być final
  3. Może być transient
  4. Nie może być: synchronized,abstract, native, strictfp,
  5. Nie może być static, bo wtedy staje sie zmienną klasy

char- przytowanie


public void absMethod() {
char c =65000; // dodatnie 0-65535
short s = 6500;

c=s; //zonk : possible lost , chodzi o ujemne!
s=c; //jak wyżej

byte b=0;

s=b; //ok
c=b; //possible lost a presicion bo ujemne!!

}

Kwestia ustraty znaku!, Char ma tylko dodatnie!

Spis ważnych

  1. Dostępność memberów -SCJP book , page 39
  2. Gdy metoda w base throw Exception - SCJHP book,page 108
  3. hashcode a equals , SCJP book, page 554

Podstawy cz.2


  1. Do protected nie odnosimy się przez .
  2. Dla klas w innych pakietach do protected członków można dostać się tylko
    przez dziedziczenie
  3. Do protected member dostaniemy się z klasy z tego samoego pakietu!!!
  4. Zmienne lokalne są bez modyfikatorów dostępu
  5. W zmiennych lokalnych można uzywać final
  6. Protected= package + subclass throught inheritance
  7. Klasa nie bastrakcyjna z choć 1 metodą abstract jest illegal!!
  8. Klasa abstrakcyjna nie musi mieć abstrakcyjnych metod!.
  9. Pierwsza nie abstrakcyjna klasa musi implementować wszystkie metody abstrakcyjne z superclass.
  10. static + abstract method are illegal!
  11. Oznaczenie synchronized stodujemy tylko do metod i bloków kodu!
  12. Native tylko dla metod! ( deklaracja jak metody anstrakcyjne)
  13. strictfp tylko dla klas i metod ( nie dla zmiennych!!!! )
  14. Varargs: void method(int... x) {}
  15. Varargs musi być ostatnim marametrem!
  16. Varargs=> 0 lub wiele
  17. Jeżeli przed konstruktorem damy void to jest traktowany jako metoda.
  18. Konstruktor nie może być ani final ani static ani abstract!
  19. Ile zajmuje boolean to zależy od sprzętu!.
  20. Char i short zajmują 16 bitów.
  21. Klasy abstrakcyjne mogą implemntować interfejsy!
  22. Metod ,które są w interfejsie nie trzeba zapisywać w klasie abstrakcuyjnej, dopiero w pierwszej klasie konkretnej!!!
  23. volatile tylko do zmiennych!
  24. Jeżeli klasa nie jest public to nazwa nie musi pasować do nazwy pliku!!!
  25. Metoda private nie może być overriden!!
  26. throws jest dozwolone po sygnaturze metody abstrakcyjnej!!
  27. może być synchronized łączone z final i modyfikatorami dostępu.
  28. Klasa abstrakcyjna może rozszerzać klasę konkretną!!





25 lut 2010

Protected access


public class Parent {
protected int i=14;
}

public class Child extends Parent {

@Test
public void testProtectedAcess(){
prn(i); // z superClass => OK działa

Parent parent = new Parent();

//zadziałała jak 2 klasy sa w tym samym pakiecie!
prn(parent.i);


}
}



  • Trzeba się bacznie przypatrzeć!!

TODO

  1. Przysłanianie metod, które są prywatne w klasie bazowej
  2. Kiedy obiekty są dostępne dla GC! {scope ,wyjście z metod, różne!!!}