Wykład 2: Podstawy Języka 1.wprowadzenie 8.obsługa błędów 2.podstawy języka 9.kolekcje obiektów 3.sterowanie 10.wejście i wyjście 4.inicjacja i sprzątanie 11.równoległość 5.kontrola dostępu 12.interfejs graficzny 6.dziedziczenie 13.programy sieciowe 7.polimorfizm 14.obsługa baz danych 15.obsługa serwerów Wykład 2: Zagadnienia ● obiekty: deklaracja, tworzenie, usuwanie ● typy podstawowe, tablice ● pola i metody klas ● pola i metody statyczne ● ● pierwszy program: kompilacja i interpretacja typowe zadania programistyczne Deklaracja Obiektu Wszystko w Javie jest obiektem. Deklaracja tworzy odwołanie do obiektu s typu/klasy String: String s Obiekt wskazywany przez s nie istnieje: s.length() Stworzenie Obiektu Deklaracja oraz inicjacja odwołania do obiektu s typu/klasy String: String s = new String(“abc”); Teraz s wskazuje na konkrety obiekt utworzony w pamięci, o wartości “abc”. s.length() Przechowywanie Danych 1.rejestry – szybka pamięć wewnątrz procesora, ograniczona liczba, niedostępne z programu 2.stos - część RAM, szybki dostęp, rozmiar i czas życia danych znane w czasie kompilacji, odwołania do obiektów 3.sterta – część RAM, rozmiar i czas życia danych nieznane w czasie kompilacji, składowanie obiektów, wolniejszy dostęp Przechowywanie Danych 4.obszar statyczny: część RAM, dane dostępne w dowolnym momencie z programu, słowo kluczowe static 5.obszar stałych: w kodzie programu, ewentualnie w pamięci ROM 6.obszar spoza RAM: obiekty trwałe (zachowują stan między wywołaniami programu), zamiana obiektów w strumień bajtów (do przesłania/zapisu). Typy Podstawowe: Powód Tworzenie obiektów “małych” na stercie (przez new) nie jest efektywne. Integer i = new Integer(1); Typ podstawowy: int i = 1; Tworzy się zmienna która nie jest odwołaniem do obiektu, a wartością. Typy Podstawowe: Lista typ rozmiar boolean klasa Boolean char 16 Character byte 8 Byte short 16 Short int 32 Integer long 64 Long float 32 Float double 64 Double void Void Typy Podstawowe: Własności Rozmiar każdego typu jest niezmienny – programy są przenośne. Wszystkie typy numeryczne są ze znakiem. Klasa opakowująca typ podstawowy pozwala umieszczać dane na stercie: Integer i = new Integer(1); Zasięg Zmiennych Zasięg przez położenie nawiasów: { int i = 1; // dostepny i { int j = 2; // dostepne i, j } i = j } // dostepny i Przesłanianie Niedozwolone Komunikat błędu – zmienna już istnieje: { int i = 1; { int i = 2; // niedozwolone } } Zasięg Obiektów Życie obiektów jest inne od życie zmiennych typów podstawowych. { String s = new String(“abc”); } Odwołanie s nie istnieje poza zasięgiem deklaracji, natomiast obiekt wskazany przez s będzie nadal istniał. Niszczenie Obiektów Obiekty utworzone przez new istnieją tak długo jak są potrzebne. Co nas chroni przed przepełnieniem pamięci i zablokowaniem programu? Odśmiecacz pamięci sprawdza obiekty utworzone przez new i wykrywa te, do których nie ma więcej odwołań. Tworzenie Typów: Klasy Nowe typy obiektów zawarte są w klasach. Deklaracja klasy: class NazwaTypu { ... } Utworzenie obiektów klasy: NazwaTypu a = new NazwaTypu(); Definicja Klasy Klasa zawiera dwa rodzaje elementów: 1.pola – obiekty dowolnego typu lub zmienne typów podstawowych 2.metody – komunikaty które może otrzymać dany obiekt Pola Klas Każdy obiekt uzyskuje własny obszar pamięci dla swoich zmiennych: class TylkoDane { int i; float f; Double d; } Obiekty nie dzielą zmiennych między sobą. Odwołania do Pól Utworzenie obiektu klasy: TylkoDane d = new TylkoDane(); Odwołanie do pól obiektu d: d.i = 47; d.f = 1.1f; d.d = new Double(1.0d); Wartości Domyślne Pól Gdy pole jest typu podstawowego, jeśli nie zainicjowane, to otrzyma wartość domyślną: boolean false char '\u0000' byte (byte)0 short (short)0 int 0 long 0L float 0.0f Wartości Domyślne Pól Inicjalizacja jest gwarantowana dla zmiennych: typu podstawowego ✔ deklarowanych jako składowe klas Inicjalizacja nie dotyczy zmiennych lokalnych – które nie są polami w klasie. int i; ✔ Metody Klas Metoda określa komunikat które może otrzymać dany obiekt: typZwracany nazwa(/*argumenty*/) { ciało metody } Deklarowane tylko jako części składowe klas, i wywoływane na rzecz obiektu. Deklaracja Metody typZwracany to typ wartości zwracanych przez metodę. argumenty to typy i nazwy lista argumentów przekazywanych metodzie. ciało metody to definicja metody. Wywołanie Metody Podanie nazwy obiektu, kropki, nazwy metody, i jej listy argumentów: nazwaObiektu.nazwaMetody (arg1,arg2) Inaczej wysyłanie komunikatu do obiektu. Obiekt musi być upoważniony: nazwaObiektu.nieIstnieje() Argumenty Metody Lista obiektów i ich klas które mogą być przekazane metodzie: int pamiec(String s) { return s.length()*2; } s jest referencją do obiektu. length jest jedną z metod łańcucha s. Wynik Metody return pełni dwie funkcje: 1.określa opuszczenie metody 2.określa wartość zwracaną (jeśli jest) Typ void - metoda nie zwraca wartości: void nic1() { return; } void nic2() {} Wykorzystanie Innych Klas Gdzie znajduje się klasa? ✔ ✔ w tym samy pliku źródłowym – użyć użyj klase ArrayList: import java.util.ArrayList; ✔ wszystkie w pakiecie java.util: import java.util.*; Pola Statyczne Deklaracja pól statycznych: class StaticTest { static int i = 47; } st1.i i st2.i są te same: StaticTest st1 = new StaticTest(); StaticTest st2 = new StaticTest(); Odwołania do Pól Statycznych Odwołanie przez obiekty klasy: st1.i++ Odwołanie bez obiektu klasy: StaticTest.i++ Metody Statyczne Możliwość wywołania metody bez konieczności tworzenia obiektu (np. main): class StaticFun { static void incr() { StaticTest.i++ } } Wywołanie Metod Statycznych Przez obiekt: StaticFun sf = new StaticFun(); sf.incr(); Przez klasę: StaticFun.incr(); Pierwszy Program Program wyświetla na ekranie bieżącą datę: //HelloDate.java import java.util.*; public class HelloDate { public static void main(String [] args) { System.out.println(“Dzisiaj jest: “); System.out.println(new Date()); } Komentarze komentarz: //HelloDate.java inny rodzaj komentarza to: /* To jest komentarz, * który rozciąga sie na * wiele wierszy */ Pakiety dodatkowe klasy/pakiety które będą potrzebne w kodzie programu: import java.util.*; Pakiet który jest włączany automatycznie do każdego pliku Java: java.lang Pakiet java.lang Pakiet java.lang zawiera klasę System. Klasa System zawiera pole: static PrintStream out; Klasa PrintStream zawiera metodę: void println(String x) Pierwszy Program deklaracja klasy HelloDate: public class HelloDate { deklaracja funkcji main: public static void main(String [] args) { Pierwszy Program wyświetlenie tekstu na ekranie: System.out.println(“Dzisiaj jest: “); uzyskanie i wyświetlenie bieżącej daty: System.out.println(new Date()); Kompilacja i Uruchomienie Kompilacja programu: javac HelloDate.java Uruchomienie programu: java HelloDate Nazewnictwo Nazwy klas rozpoczynają się od dużej litery, każdy kolejny wyraz też z dużej litery: HelloDate Nazwy zmiennych/pól/metod podobnie, ale pierwsza litera jest mała: liczbaCalkowitaKolorow Typowe Zadania 1.Wyświetlanie danych na ekranie 2.Przyjmowanie danych z klawiatury Wyświetlanie Danych class Wyswietl { public static void main(String args[]) { String s = “1 mila to ”; double d = 1.609; System.out.print(s); System.out.print(d); System.out.print(“ kilometrow\n”); } } Wyświetlanie Danych definicja klasy Wyswietl: class Wyswietl { Klasa musi być zapisana w pliku o tej samej nazwie: Wyswietl.java Wyświetlanie Danych definicja funkcji main: args jest tablicą argumentów z linii poleceń: public static void main(String args[]) { public - dostępność funkcji static - przypisanie funkcji do klasy void - typ zwracany przez funkcję Wyświetlanie Danych s to zmienna typu String d to zmienna typu double obie zmienne są inicjowane String s = “1 mila to ”; double d = 1.609; Wyświetlanie Danych zmienna s zostaje wyświetlona zmienna d zostaje wyświetlona tekst “ kilometrow\n” zostaje wyświetlony ze zmianą nowej linii: System.out.print(s); System.out.print(d); System.out.print(“ kilometrow\n”); Przyjmowanie Danych import java.io.*; class Przyjmowanie { public static void main(String args[]) { String input = “”; BufferedReader in = new BufferedReader (new InputStreamReader(System.in)); System.out.println(“Wpisz tekst: “); Przyjmowanie Danych try { input = in.readLine(); } catch(IOException e) { System.out.println(e); } System.out.print(“Wpisales: “); System.out.println(input); } } Przyjmowanie Danych Importujemy pakiet biblioteczny java.io: import java.io.*; Deklaracja klasy Przyjmowanie: class Przyjmowanie { Przyjmowanie Danych Deklaracja funkcji main: public static void main(String args[]) { Deklaracja zmiennej input typu String: String input = “”; Przyjmowanie Danych Deklaracja strumienia wejściowego in: BufferedReader in = new BufferedReader (new InputStreamReader(System.in)); in to obiekt klasy BufferedReader który buforuje operacje odczytu danych. Przyjmowanie Danych Wypisanie tekstu ze zmianą linii: System.out.println(“Wpisz tekst: “); Przyjmowanie Danych Wywołanie funkcji czytającej readLine: try { input = in.readLine(); } catch(IOException e) { System.out.println(e); } Wyjątek IOException, prowadzi do wyświetlenia komunikatu błędu. Przyjmowanie Danych Wyświetlenie tekstu i wartości zmiennej input wpisanej przez użytkownika: System.out.print(“Wpisales: “); System.out.println(input);