1.1

- outer class access modifiers: public and default
- abstract public class / public abstract class
- klasa w difultowym pakiecie nie ma pakietu w pierwszej linii
normal import declaration imports classes from packages,
static import declaration imports static members from classes

abstract class can have constructor and it can be called from subclasses constructors trough super()

jedna zwykla klasa wewnetrzna moze rezszerzyc inna zwykla klase, rowniez abstract
klasa w metodzie moze rozszerzyc inna zwykla wewnetrzna
nie mozna rozszerzyc klasy zdefiniowanej w metodzie poza metoda, ale w samej metodzie mozna
stworzyc druga klasa i ona moze rozszerzyc

klasy z pakietu java.lang sa automatycznie importowane
klas z tego samego pakietu tez nie importujemy ba sa widoczne bezposrednio
* nie zastepuje nazw podpakietów tylko klasy (+ pola i metody statyczne przy imporcie statycznym?)
unikamy przez to koniecznoscoi podawnia klasy albo interfejsu przed statytczna metoda albo polem

zmienna interfejsu public static final – dowolna kombinacja tych modyfikatorów

klasy i interfejsy wewnatrz interfejsu sa implicite static i public

override – nie trzeba rzucac wyjatku w submetodzie

nazwy klas $ i podkreslnik “_” ok, kreska nie

klasy lokalne metody niemoga miec modyfikatorow dostepu, tylko default + abstractmfinal i striftfp

klasy metody (anonimowe i nazwane)nie moga uzywac zmiennych metody nie final

ze statycznej metody nie mozna odwolac si edo nie statycznego pola, ale można do statycznego pola z nie staycznej metody

tablica ma pole length, nie ma metody

Rozne

- wywolanie finalize() nie gwarantuje zeobiekt bedzie usuniety, bo w tej metodzie mozna przekazac referencje do siebie do innego obiektu

@Override stosuje sie tez do metod implementowanych z interfejsu

nie mozna override klas prywatnych, nAWET PRZEZ KLASY wew
overload tez nie dziala w tym przypadku. Mozna poprosty stworzyć metode o takiej samej nazwie i syganturze ale nie jest to nadpisywanie ani overload. Bedzie to osobna implementacja tej samej metody nie podlegającej polimorizmowi. Oznacza to, że wywolanie metody na obiekcie o typie referencji Sub i typie obiektu Super, wywola metode Super.

@Override nie pozwala na zwracanie int/Integer
Overload pozwala na takie coś
Overload pozwala na int/Integer oraz Sup/Sub w argumencie

legalnie przładowana metoda pozwala zwracać dowolny typ danych
łącznie z void/int
zwracanie int/Integer nie jest przeladowaniem ale w przeladowanej metodzie jest ok, podobnie jak Sup/Sub

nie moze byc dwoch takich samych klas w pakiecie, dotyczy to sytuacji kiedy w jednym pliku mamy class X a inny plik to Public class X

ordering of booleans??????????????

ExceptionInitializerError extends LinkageError
wyjatek w trakcie staycznej inicjalizaji albo inicjalizacji
zmiennej statycznej

^ bitwise exclusive OR
f i f = f
t i t = f
t i f = t
f i t = t
| bitwise inclusive OR
działa na dwóch zmiennych 4 | 5
porównuje zapisy bitowe tych liczb
zapis bitowy daje
1 i 1 = 1
reszta kombinacji: 0

~ Unary bitwise complement
zamienia bity 1 na 0 a zero na jeden w bitowej reprezentacji liczb

join()

package methodLocal;



public class Main {



    public static void main(String[] args) throws InterruptedException {



        Runnable r1 = new Runnable(){

            @Override

            public void run() {

                for(int i=0;i<100;i++){
                    System.out.println(i);

                    try {

                        Thread.sleep(100);

                    } catch (InterruptedException e) {

                    }

                }

            }

        };

        Thread t1 = new Thread(r1);

        t1.start();

        t1.join();

        

        System.out.println(Thread.currentThread().getName());

        

    }

}



JavaToHtmlTest/Java2HtmlTest is a test program to display 

    * capabilites of togotutor’s online tool for converting Java Code to 

    * HTML format. The generated HTML code can be pasted on any web page 

    * to display properly formatted Java Code. 

    */

public class JavaToHtmlTest{

       private static final long serialVersionUID = 8683452581122892189L;



       private transient int javaToHtml;



       private String name;



      /**

       * Prints Welcome message

       *

       * @param args

       *            String array with input parameters.

       */


       @SuppressWarnings(“unchecked”)

       public static void main(String args[]){

           System.out.println(“Welcome to Togotutor.com’s “

                   + “Online Java To Html Conversion tool.”);

       }



}

Static class

- Can have both static and non-static methods
- In regular non-static classes, a static method can’t call non-static method (example: can’t call non static method form main method).
-można wywołac metode statyczną z nie statycznej, nie można wywołac statycznej z nie statycznej.

-można z jednej klasy statycznej wolac metody statyczne innej klasy statycznej

Overload vs Override vs Hide

Overload principles:

- the method name must remain the same
- any access modifier is accapted, but just changing it is not enough for legal overloading
- any exception is accepted but changing it is not enough
- return type must be the same, changing it breaks oveloading and compilation fail due to ‘Duplicate method’
- with 2 method implementations: in subclass and in superclass, different return type is allowed (Super->Sub)
- in same one class: not allowed, changing return type super->sub
-
- return types: primitive type and wrapper object are not enough to overload but in properly overloaded method
- w przeladowanej na przestrzeni dwoch klas metodzie suber/sub w returnie jest ok

public abstract class Main {

public Main operate() {
return null;
}
}
class Klaska extends Main{
public Klaska operate(int i) {
return null;
}
}

Override principles:

- return type the same or subtype
- access modifier wider
- exception the same or subtype
- same name and sygnature

Hide principles:
- apply only to static methods
- are not polymorphic, you always call the reference type method
- should not be called on instances

test killer

review
001 – pola interfejsu: public,static final
002 – dynamiczna lista argumentów jest traktowana jak tablica
003 – boolean b1 = true;
boolean b2 = false;//wykona sie tez dla true. Jesli zmienimy b2==true, wtedy tylko dla true
if((b2=true)&&b1){
System.out.println(3);
}
004 – finally działa nawet jeśli nie tylko w try ale też w catch pojawi się wyjątek
005 – ClassCastException kiedy mówimy ze Parent jest Dzieckiem: x = (Dziecko)parent
znaczenie ma to co jest po prawej stronie w nawiasach. W typie referencji po lewej może być dowolny
supertyp, ten sam typ albo subtyp na który próbujemy rzutować.
006 – Locale ma trzy metody tworzenia:

Locale l = Locale.getDefault();
System.out.println(l.getDisplayCountry()); //Polska
System.out.println(l.getCountry()); //PL
System.out.println(l.getDisplayLanguage());//polski
System.out.println(l.getLanguage()); //pl
new Locale(String language)
new Locale(String language,String country)

DateFormat df = DateFormat.getInstance();
.getTimeInstance(); .getTimeInstance(int style); .getTimeInstance(int style,Locale l);
.getDateInstance(); .getDateInstance(int style); .getDateInstance(int style,Locale l);
.getDateTimeInstance(); .getDateTimeInstance(int style);.getDateTimeInstance(int style,Locale l);
007 – enkapsulacja:pola prywatne,ustawiane przez set/get; propertisy
008 – nie można używać private fielda parenta, ani bezpośrednio ani przez super.
009 – has-a pole może być prywatne
010 – jeśli klucz nie nadpisuje hashCode i equals można dodać takich obektów dużo do HashMapy
nie można jednak usunać, remove do którego przekazujemy tak sam klucz jak przy dodawaniu nie znjadzie
elementu który chcemy usunąć a wszystkich też nie usuwa. Klucz jesli jest custom obiektem zeby byc kluczem
w kolekcji musi nadpoisać equals i hashcode, wtedy uwuwamy podając unikalną instancję na postawie pól.
Nie dodamy dwa razy takiego samego klucza, usuwa wczesniejszy, zachowuje ostatni.
Operacja add(E e); interfejsu Set zwraca boolean – jesli element już był w kolekcji nie dodaje
go i zwraca false.
011 – sortowanie tablicy różnych typów (String,Integer,Boolean) powoduje ClassCastException
wraper Byte przyjmuje byte albo String: new Byte((byte) 787); trzeba rzutować argument
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Byte
nie można rzutować pierwszego elementu listy na pierwszy innego typu
012 – int x = 0;
int y = 0;
System.out.println(“x: “+ x++); //0
System.out.println(“y: “+ ++y); //1
013 – można statycznie zimportować pole,metode, statyczna nested class
014 – jesli enum jest w klasie, to z innej klasy notacja: Klasa.Enum ke = Klasa.Enum.WARTOSC;
015 –

020 – System.out.println() wywołuje na obiekcie toString();
021 – abstrakt w typie referencji
022 – metoda zwykla moze wołać abstrakcyjną w tej samej klasie abstrakcyjnej
023 – najpierw extends potem implements
jeśli interface i klasa abstrakcyjna mają tę samą metodę (abstrakcyjną) wówczas implementuje sie ją tylko raz
024 – klasa abstrakcyjna rozszerza inna abstrakcyjna i nie musi implemetowac jej abstrakcyjnych metod
025 – klasa abstrakcyjna moze implementować interfejsy
nie ma konstrukcji: implements A, implements B, jest implements A,B
026 – jeśli klasa implementuje interface który zaimplementował juz parent, wówczas sama nie musi implementować, użyje implementacji parenta
027 – zmienna zdefiniowana w try nie jest widoczna w catch i finally
zmienna zdefiniowana przed try musi byc zainicjalizowana zeby mozna bylo jej uzyc w catch i finally
028 – int x = 5 x+=x sysout x= 10
029 – do jednej tablicy można przypisać inna: int[]x = {1,2} int[]y = x; y ma te same elementy co x
030 – # nie może być na początku zmiennej, ~ nie może być wogóle, $ moze być _ tez
031 – taka konstrukcja nie przejdzie: int[]a = new int[3]{1,2,3};
może być jednak coś takiego: static final int[]a;
static {a=new int[2]; a[0]=100;a[1]=101}
taka deklaracj ajest ok: int[]a = new int[]{1,2,3}; (brak podanej wielkości tablicy)
032 – iteracje po enumie: for(Color c : Color.values())
033 – wartośc enuma np KOLOR(233) uzyskujemy definiując pole, jego wartosc powinna być ustawiana przez konstruktor a pobierana getem
wtedy można getem pobrać ten numer
ordinal to index enuma, zaczyna sie od 0
034 –
035 – Object o = new int[]{1,2,3};
int[]tab = (int[]) o;
036 – metoda niestatyczne moze wołać statyczną
037 – zmienna liczba argumentów (String…s
038 – JavaBeans naming standard: camelCase
039 – metoda statyczna nie moze wołać pola nie statycznego
040 – getter dla boolean może być isCosTam zamiast getCosTam
041 – submetoda może zwrócić ten sam typ lub subtyp
042 – override modyfikatory: taki sam lub szerszy
043 – override nie moze zwrocic supertypu
044 – jesli sa dwie metody metoda1(int a,int b) oraz metoda1(int…x) i wywołamy z 2 argumentami odpali sie ta pierwsza, bardziej konkretna
045 – return type to nie overload
046 – klasa statyczna Outer.Static = new Outer.Static();
047 – zobacz lepiej przykład
048 – konstruktory wykonuja sie od konca
049 – dwa konstruktory argumentowe Sub i Super, sub musi jawie wywołać super(argument), mimo ze oba sie mapuja
050 –
051 – konstruktory w jednej klasie wykonuja się tak jak
w przypadku dziedziczenia, od najwyższego
052 – w switchu default musi być na końcu i jest sam, tzn nie ma case: default – jest samo default
053 – nie musi być default w switchu
054 – Boolean.valueOf(“True”)
055 – wrapery można dodawać new Integer(2)+new Integer(3)
056 – długośc String to length()
po else nie może być else, jedynie else if
057 – if else nie ma finally
058 – zobacz
059 – jesli warunek while nie jest spełniony, petl a nie wykona sie
060 – do while moze wykonywac sie w nieskonczonośc jesli warunek jest spelniony. Nawet jesli wyjściowo warunek jest niespełniony, pierwsza iteracja która zawsze jadzie moze go zmienić na true
061 – interfejs Collection ma metode iterator() która zwraca instancję Iterator
Po instancji Iteratora nie można iterować. Można iterować po tablicy i instancji Iterable
062 – Collection może być w typie referencji, możemy po tym iterowac
063 – i w pętli for nie jest dostępny za pętlą
064 – AssertionError nie AssertionException
065 – AssertionError nie AssertionException
066 – słowo kluczowe assert jako nazwa zmiennej wymaga: javac -source 1.3 wtedy compilation succedes with warnings
067 – default: assert false; – to jest ok, do sprawdzenia w wersji drukowanej, można zrobić assert na metodzie która zwraca boolean assert (stuff4()); assert nie może sprawdzać argumentów publicznych metod
068 – override metoda nie może rzucac Exce jesli metoda parenta nie rzucała
069 – klasa która extends Exception jest checkedException, trzeba łapac albo rzucic dalej
070 – finally zawsze
071 – override nie może rzucać checked exce jesli parent nie rzucał
072 – override może rzucic Runtimeexception nawet jesli parent nie rzucał
po: throw new Exception() nic więcej się nie wykona (jak return)
class B extends A ((A)new B()).process(); – wywoła sie metoda z B
jeśli rzucamy na parenta (upcast): B b = (A)new B(); jest compil error
w typie referencji musi być parent: A b = (A)new B(); – i tak jest wołana metoda z B
073 – metody statycznie nie działają polimorfcznie. Jeśli same klasy są polimorficzne a metody nie, polimorfizm działa normalnie. Jeśli metoda parenta rzuca wyjątek checked a wołamy polimorficznie metode childa A b = new B(); (która nie rzuca) b.metoda() – wykona sie polimorficznie metoda childa nie parenta, ale i tak wtwołanie musi obsłuzyć wyjątek

074 – child nie musi rzucać exception jesli parent rzucał
075 – po rzuceniu wyjątku rzeszzta tego co jest w try sie nie wykona
076 – do analizy
077 – do analizy
078 – łapanie wyjątkow musi mieć odpowiednią kolejność,najpierw najbardziej specyficzne
jeśli najpierw złapiemy Exception następne catch z bardziej konkretnym wyjątkiem da compilation error
079 – jesli metoda rzuca Error a my łapiemy wyjątek, metoda która woła metode rzucającą sama rzuci Throwable
080 – jesli nie ma catch, wyjatek nie jest łapany i wraca do metody która wywołała metoda rzucajaca
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100

Thread & Runnable

Nadpisanie metody run() w Thread powoduje, że ta nadpisana metoda zostaje wywołana zamiast run() z Runnable.
Nawet jesli run() jest w Thread i Runnable i runnable jest przekazany do thread, wywolanie run() albo start() uruchamia
run z Thread nie Runnable. Zeby uruchomił się run() z Runnable, w Thread nie moze byc run().