Wykład 2: Podstawy Języka 1.wprowadzenie 2.podstawy języka 3.sterowanie 4.inicjacja i sprzątanie 5.kontrola dostępu 6.dziedziczenie 7.polimorfizm 8.obsługa błędów 9.kolekcje obiektów 10.wejście i wyjście 11.równoległość 12.interfejs graficzny 13.programy sieciowe 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 klasa boolean 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 byte short int 0 long '\u0000' (byte)0 (short)0 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);