Programowanie w Javie - wykład 2

Podobne dokumenty
JAVA- wykład 2 Klasy

Programowanie w środowisku graficznym- wykład 2 Java - Klasy

Programowanie w Javie - wykład 3

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Aplikacje w środowisku Java - wykład 1

Wykład 4: Klasy i Metody

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie w Internecie. Java

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Rozdział 4 KLASY, OBIEKTY, METODY

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Wykład 8: klasy cz. 4

Programowanie obiektowe

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Definiowanie własnych klas

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Wykład 2: Podstawy Języka

Wykład 7: Pakiety i Interfejsy

Programowanie obiektowe

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Podstawowe części projektu w Javie

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Podstawy programowania skrót z wykładów:

Dokumentacja do API Javy.

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe

Dorota Pylak. Aplikacje w Javie- wykład 1

Podstawy programowania obiektowego

Programowanie obiektowe

Enkapsulacja, dziedziczenie, polimorfizm

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Java Język programowania

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Języki i metody programowania Java. Wykład 2 (część 2)

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Definicje klas i obiektów. Tomasz Borzyszkowski

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Programowanie obiektowe

Java niezbędnik programisty spotkanie nr 3. Modyfikatory, jednostki kompilacji, tworzenie/inicjalizacja, odśmiecanie/ finalizacja...

Podstawy Programowania C++

Wykład 5: Klasy cz. 3

Podstawy Języka Java

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Java-wykład. Dorota Pylak

Aplikacje w środowisku Java

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Wykład 5: Więcej o Klasach i Metodach

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

1 Atrybuty i metody klasowe

Platformy Programistyczne Podstawy języka Java

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Pakiety i interfejsy. Tomasz Borzyszkowski

Klasy abstrakcyjne, interfejsy i polimorfizm

Metody Metody, parametry, zwracanie wartości

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Szablony klas, zastosowanie szablonów w programach

KOTLIN. Język programowania dla Androida

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Podstawy i języki programowania

Materiały do zajęć VII

Języki i metody programowania Java INF302W Wykład 2 (część 1)

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Programowanie obiektowe

Dziedziczenie. Tomasz Borzyszkowski

PARADYGMATY PROGRAMOWANIA Wykład 4

Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu.

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Lab 9 Podstawy Programowania

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Multimedia JAVA. Historia

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

Programowanie obiektowe

Pętla for. Wynik działania programu:

Tworzenie aplikacji w języku Java

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Wprowadzenie do języka Java

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

1 Podstawy c++ w pigułce.

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

PHP 5 język obiektowy

Transkrypt:

Programowanie w Javie - wykład 2 Java-wprowadzenie (instrukcje sterujące) Klasy podstawy Pakiety Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 http://docs.oracle.com/javase/8/docs/ http://docs.oracle.com/javase/10/docs/ C. S. Horstmann, G. Cornell, Java. Podstawy, Helion, Gliwice 2013 Dorota Pylak C. S. Horstmann, Java, Techniki zaawansowane(wydanie10), Helion, Gliwice 2017

INSTRUKCJE STERUJĄCE 2 Instrukcje sterujące występujące w Javie są bardzo podobne do tych znanych z języka C/C++. Istnieje właściwie tylko jedna ważna różnica: Java nie pozwala na użycie liczby tam, gdzie oczekuje wartości logicznej. Każde wyrażenie logiczne, (np. a==b) jest typu boolean.

lub if-else if (wyrazenie) instrukcja1; if (wyrazenie) instrukcja1; else instrukcja2; Wyrażenie musi być typu logicznego (boolean), a poprzez instrukcje rozumiemy dowolną instrukcję, czyli w szczególności złożoną tj. instrukcję postaci: {instrukcja_1;... instrukcja_n; Jeżeli wyrażenie jest prawdziwe (ma wartość true) to wykonywana jest instrukcja1. W przeciwnym przypadku wykonywana jest instrukcja znajdująca się po else, o ile istnieje. 3

while, do-while 4 while(wyrazenie_logiczne) instrukcja; instrukcja jest powtarzana, dopóki wyrażenie_ logiczne jest prawdziwe. Obliczenie wartości wyrażenia następuje przed każdym kolejnym wykonaniem instrukcji. (Czyli możliwa jest sytuacja, gdy instrukcja nie zostanie wykonana ani razu) do instrukcja while(wyrazenie_logiczne) Pętla różniąca się od poprzedniej tylko tym, ze najpierw wykonywana jest instrukcja, a dopiero później liczona wartość wyrażenia logicznego. (Czyli instrukcja zostaje wykonana co najmniej jeden raz). Pętla jest powtarzana dopóki wyrazenie_logiczne ma wartość true.

for 5 for(inicjalizacja; wyr_log; krok) instrukcja; inicjalizacja zostaje wykonana raz, przed rozpoczęciem działania pętli. Następnie, przed każdym obrotem pętli obliczana jest wartość wyr_log. Jeśli jest ono prawdziwe wykonywana jest instrukcja, a po niej krok. W przeciwnym wypadku następuje wyjście z pętli. Każde z pól: inicjalizacja,wyr_log, krok może być puste. Dodatkowo pola inicjalizacja i krok mogą zawierać kilka instrukcji oddzielonych przecinkami. Zasięg zmiennych deklarowanych w części inicjacyjnej kończy się wraz z końcem instrukcji for

6 for-each for(typ zm : zestaw) instrukcja; Pętla for-each wykonuje instrukcje, dla każdego elementu zestawu (elementy zestawu są typu Typ). Pętla ta służy do przebiegania po zestawach danych (np. kolekcjach, tablicach, plikach). Przykład: String[]alfabet={ a, b, c, d, e ; for(string s: alfabet) System.out.println(s); //wypisze w kolejnych wierszach a,b,c,d,e.

break, continue 7 Wewnątrz każdej pętli możemy zastosować instrukcje break oraz continue. Służą one do sterowaniem wykonania pętli z jej środka. Instrukcja break powoduje natychmiastowe wyjście z pętli. Wykonanie instrukcji break powoduje skok do pierwszej instrukcji za przerwaną pętlą czy instrukcją wyboru. Instrukcja continue natomiast rozpoczyna następną iterację tej pętli (nie dokańczając aktualnie wykonywanej). Wykonanie bieżącej iteracji jest przerwane, nie zaś wykonanie całej pętli. W przypadku umieszczenia instrukcji break lub continue w pętli zagnieżdżonej w innej pętli mają one skutek tylko dla pętli w której bezpośrednio się znajdują, ale możliwe jest wskazanie poprzez etykietę pętli bardziej zewnętrznej. Etykieta jest identyfikatorem występującym przed instrukcją i oddzielonym od niej dwukropkiem.

Polecenia : continue i break z etykietami 8 break z etykietą - wyjście z pętli w dowolnym momencie ZewnetrznaPetla://etykieta for (...) { for(...){... break ZewnetrznaPetla;... Jeżeli instrukcja break wymienia etykietę, to przerwane zostanie wykonywanie iteracji tej pętli, przed którą umieszczono etykietę. Efekt ten stosowany jest do przerywania wykonania zewnętrznych pętli w przypadku zajścia określonego warunku testowanego w pętli zagnieżdżonej.

Polecenia : continue i break z etykietami 9 continue z etykietą ominięcie części poleceń pętli etykieta: while (...) {... continue etykieta;... Instrukcja continue z etykietą pozwala na zaniechanie i kontynuację instrukcji iteracyjnej oznaczonej tą etykietą (na ogół jest to jedna z pętli zewnętrznych w stosunku do pętli, w której użyto instrukcji continue).

switch 10 Instrukcja switch zwana czasem instrukcją wielokrotnego wyboru. Na podstawie wartości wyrażenia wyr wybiera i wykonuje odpowiedni fragment kodu. Wyrażenie wyr może być jednego z typów całkowitych lub typu char, Character, String lub dowolnego typu wyliczeniowego (enum). (Jeśli wyr jest typu referencyjnego, to do porównania używana jest metoda equals()) switch(wyr){ case wyr_stale_1: instrukcja1; break; case wyr_stale_2: instrukcja2; break;... case wyr_stale_k: instrukcjak; break; default: instrukcja_domyslna;

Klasy i obiekty w Javie Definiowanie klasy jest równoznaczne z tworzeniem wzorca (przepisu) danego obiektu, który umożliwia tworzenie obiektów tej klasy. [atrybutydostepu] class NazwaKlasy [extends NazwaNadklasy] [implements NazwyInterfejsów]{ //ciało klasy tj. //definicje składowych klasy: //pól, konstruktorów, metod, bloków inicjujących Wyróżnia się cztery atrybuty dostępu: public (publiczny) - możliwość dostępu z dowolnej klasy protected (chroniony) - możliwość dostępu z każdej klasy pochodnej lub klas należących do tego samego pakietu private (prywatny) - możliwość dostępu wyłącznie w danej klasie dostęp domyślny (bez podanego specyfikatora dostępu) - możliwość dostępu wyłącznie z klas należących do tego samego pakietu 27.02.2019 11

27.02.2019 12 POLA UWAGA: w pliku źródłowym może występować tylko jedna klasa publiczna i jeśli występuje, to plik musi mieć taką samą nazwę jak ta klasa, z uwzględnieniem wielkości liter. W ciele klasy definiowane są składniki klasy, tj. zmienne (pola) i metody. Pola określają z jakich elementów składają się poszczególne obiekty klasy, zaś metody określają działania, które można na nich wykonywać. DEFINIOWANIE PÓL KLASY [specyfikator_dostępu][static] nazwa_typu nazwa_pola [inicjator]; Przykład public class Para { private int a; private int b; // = 6; //...

METODY 27.02.2019 13 Przy tworzeniu obiektów pola klasy zawsze uzyskują początkowe, domyślne wartości (zerowe) DEFINIOWANIE METOD KLASY [public ]class NazwaKlasy{ //... [specyfikator_dostępu][static] typ_wyniku nazwa_metody(lista parametrów){ //ciało metody tj. //instrukcje wykonywane po wywołaniu metody

METODY 27.02.2019 14 Lista parametrów zawiera rozdzielone przecinkami deklaracje parametrów, które metoda otrzymuje przy wywołaniu. Jeśli metoda zwraca wynik, to w definicji określamy konkretny typ_wyniku i zakończenie jej działania powinno nastąpić na skutek instrukcji return [wyrażenie]; zwracającej dane typu_wyniku, jeśli nie zwraca żadnego wyniku, to jej typ_wyniku określamy słowem kluczowym void (zakończenie metody następuje po dotarciu do ostatniego nawiasu lub instrukcji return;). W Javie argumenty przekazywane są metodom wyłącznie przez wartość, tj. w metodzie odwołujemy się do kopii argumentu. Metody statyczne (static) nie są wywoływane na rzecz obiektów, mogą zatem być wywoływane nawet, gdy nie istnieje żaden obiekt danej klasy.

KONSTRUKTORY Konstruktor służy głównie do inicjowania wartości pól obiektów. Konstruktor ma nazwę jak nazwa klasy i nie ma żadnego typu wyniku. DEFINIOWANIE KONSTRUKTORÓW [public ]class NazwaKlasy{ [specyfikator_dostępu] nazwa_klasy(lista_parametrów){ //czynności wykonywane przez konstruktor Konstruktory zawsze są wywoływane za pomocą wyrażenia new : NazwaKlasy tworzonyobiekt = new NazwaKlasy(parametryKonstruktora) Jeśli w klasie nie zdefiniowano żadnego konstruktora, to do definicji klasy automatycznie dodawany jest konstruktor bezparametrowy (który nie robi nic). 27.02.2019 15

27.02.2019 16 PRZYKŁAD public class Para{ KONSTRUKTORY c.d. private int a, b; //pola klasy public Para(int x, int y){ a=x; b=y;//nadaje polom a i b, wartości //przekazane jako argumenty konstruktora public Para(int x){ a=x; b=x;//nadaje obu polom wartość x Dla tak zdefiniowanej klasy, możemy tworzyć obiekty: Para p1 = new Para(10,7); // para 10 7 Para p2 = new Para(5); //para 5 5 Parap3 = new Para();//BŁĄD-nie ma takiego konstruktora

27.02.2019 17 SKŁADOWE STATYCZNE Składowe (pola i metody) niestatyczne (instancyjne) zawsze wiążą się z istnieniem obiektu danej klasy Składowe statyczne (klasowe) tzn. ze specyfikatorem static nie dotyczą obiektów, ale całej klasy są wspólne dla wszystkich obiektów tej klasy mogą być używane nawet wtedy, gdy nie istnieje żaden obiekt klasy do składowych statycznych odwołujemy się NazwaKlasy.nazwaSkładowej UWAGI: Pola niestatyczne (instancyjne) istnieją w każdym obiekcie klasy, natomiast dla pól statycznych (klasowych) przydzielany jest tylko jeden obszar pamięci na całą klasę Z metod statycznych nie wolno odwoływać się do niestatycznych składowych klasy (gdyż obiekt może nie istnieć) PRZYKŁADY metoda main musi być statyczna ponieważ od niej zaczyna się wykonywanie programu, a w tym momencie nie istnieje jeszcze żaden obiekt.

SKŁADOWE STATYCZNE c.d. W klasie System (dostarczanej jako klasa standardowa) jest stała statyczna out (obiekt klasy PrintStream oznaczający standardowe wyjście) public class System{... public final static PrintStream out;... W klasie PrintStream (jedna z klas standardowych) zdefiniowane są metody println, wypisujące do strumienia wyjściowego -PrintStream podane argumenty public class PrintStream{... public void println(string s){... Zatem System.out to statyczne pole klasy System println to metoda używana na rzecz tego obiektu Stąd: System.out.println(String s) 27.02.2019 18

PRZECIĄŻANIE METOD Przeciążanie metod i konstruktorów polega na definiowaniu metod o tej samej nazwie, ale różniących się liczbą i/lub typami argumentów np. metoda println() ma bardzo wiele wersji z argumentami różnych typów. PRZYKŁAD dla klasy Para o prywatnych polach int a,b void add(para p)//dodaje do pary, na rzecz //której wywołano metodę, parę p void add(int i)//do obu pól pary dodaje podaną liczbę void add(int x, int y)//pierwszy argument dodaje do //1-go skł. Pary, a 2-gi do 2-go UWAGA: Należy specyfikować parametry o radykalnie różnych typach (aby uniknąć pomyłek wynikających z automatycznej konwersji typów) np. dla dwóch metod o tej samej nazwie z parametrami int i short, próba wywołania metody z parametrem char spowoduje wywołanie metody z parametrem int Nie istnieje możliwość deklarowania metod o tej samej nazwie, sygnaturze, ale o rożnym typie wyniku. 27.02.2019 19

PRZECIĄŻANIE KONSTRUKTORÓW Analogicznie możemy przeciążać konstruktory, czyli w jednej klasie możemy mieć konstruktory z różnymi parametrami. Aby nie powtarzać wspólnego kodu w różnych konstruktorach wygodnie jest wywoływać konstruktor w innym konstruktorze. Do takich wywołań używamy słowa kluczowego this(). PRZYKŁAD public class Para{ private int a,b; public Para(){//konstruktor bezparametrowy public Para(int x, int y){a=x; b=y; public Para(int x){ this(x,x); //this(...) musi być 1 instrukcją w ciele konstruktora 27.02.2019 20

public class Para{ private int a,b; OBIEKTY I REFERENCJE public Para(){//konstruktor bezparametrowy public Para(int x, int y){ a = x; b = y; //metoda ustalająca składniki pary public void set(int x, int y){ a = x; b = y; //metoda pokazująca parę public void show(){ System.out.println( ( + a +, + b + ) ); 27.02.2019 21

OBIEKTY I REFERENCJE 27.02.2019 22 Fragment funkcji main() z klasy TestPary: Para p = new Para();//wywołanie konstruktora bezparametrowego p.set(1,2); p.show(); Obiekt musi być utworzony za pomocą wyrażenia new (Sama deklaracja np. Para p; nie wystarcza). Dopiero zastosowanie wyrażenia new powoduje przydzielenie pamięci dla obiektu (na stercie). Wynikiem tego wyrażenia jest adres miejsca w pamięci przydzielonego obiektowi referencja. Zatem zmienna p z przykładu zawiera referencję do obiektu klasy Para. Wszystkie zmienne deklarowane z nazwą klasy w miejscu nazwy typu są zmiennymi typu referencyjnego (zawierają referencje do obiektów lub null).

OBIEKTY I REFERENCJE 27.02.2019 23 Dla zmiennych typów referencyjnych możemy: Porównywać referencję ( == lub!=) Przypisywać im wartości innych referencji oraz null Operacje wykonywane na zmiennych obiektowych dotyczą referencji, a nie obiektów (operacje arytmetyczne są niedozwolone). Na obiektach (ich wnętrzu) operujemy za pomocą metod zdefiniowanych w klasie obiektu. PRZYKŁAD Para p=new Para(1,2);//tworzony jest obiekt,wywoływany //jest dla niego konstruktor,nadający wartości polom, //new zwraca referencję do obiektu i podstawia pod p Para p1=new Para();//nowy obiekt o wartościach 0,0 p1=p;//kopiujemy referencję, teraz oba obiekty //wskazują na to samo miejsce w pamięci p1.show(); //(1,2)

SŁOWO KLUCZOWE this 27.02.2019 24 Wyrażenie new tworzy obiekt (przydziela pamięć i inicjuje wartości zerami), a następnie dla nowo utworzonego obiektu uruchamiany jest konstruktor. W konstruktorze dostępna jest referencja do tego obiektu w postaci niejawnie zdefiniowanej zmiennej this. this używamy przy przesłonięciu nazw zmiennych oznaczających pola. public class Para{ private int a,b; public Para(){ this(0,0);//this() -pierwsza instrukcja konstruktora //pozwala wywołać w nim inny konstruktor public Para(int a, int b){ this.a = a; this.b = b; //this.a, this.b pola obiektu inicjowanego //przez konstruktor //lub na rzecz którego wywołano metodę

SŁOWO KLUCZOWE this Ponieważ obiekt na rzecz którego wywołano metodę, jest wewnątrz metody reprezentowany przez this, dlatego kolejnym przypadkiem jego użycia są metody zwracające referencję do obiektu na rzecz którego zostały wywołane, np. metoda dodająca parę przekazaną jako argument do pary, na rzecz której wywołano metodę i zwracająca otrzymany wynik: Para add(para p){ a += p.a; b += p.b; return this; Przykładowe wykorzystanie powyższej metody (kaskadowe): Para suma = new Para(0,0); Para p1 = new Para(1,2); Para p2 = new Para(3,4); suma.add(p1).add(p2); this(...) używane jako pierwsza instrukcja konstruktora pozwala wywołać w nim inny konstruktor 27.02.2019 25

ZASIĘG ZMIENNYCH 27.02.2019 26 W każdej metodzie/konstruktorze klasy możemy odwołać się do identyfikatorów składowych klasy(pól i metod) niezależnie od tego w którym miejscu klasy są zadeklarowane. Zmienne zadeklarowane w metodzie/konstruktorze czyli tzw. zmienne lokalne mają zasięg lokalny- od miejsca deklaracji do końca metody, dotyczy to również parametrów deklarowanych w nagłówku metody. Próba odczytu niezainicjowanych zmiennych lokalnych powoduje błąd kompilacji. Zmienne deklarowane wewnątrz bloków lokalnych (zestaw instrukcji ujęty w {) mają zasięg od miejsca deklaracji do końca bloku. Wartości zmiennych lokalnych są tracone po wyjściu sterowania z bloku (automatyczne zwolnienie pamięci). Java sama dba o to, aby usunąć obiekt, gdy nie istnieje już żaden wskaźnik do niego (referencja). Zajmuje się tym tak zwany garbage collector. Jeżeli w klasie zostanie zadeklarowana metoda finalize(), to będzie ona wywoływana przed zwolnieniem pamięci przydzielonej obiektowi tej klasy.

PAKIETY 27.02.2019 27 Pakiety (ang.packages) są zbiorami klas służącymi ich logicznej organizacji. Pakiet grupuje klasy o wspólnej funkcjonalności. Standardowa biblioteka Javy składa się z wielu pakietów, do których należą java.lang, java.util, java.net. Mają one strukturę hierarchiczną. Pakiety mogą zawierać klasy, a także inne pakiety, podobnie jak w przypadku katalogów i podkatalogów. Wszystkie standardowe pakiety Javy znajdują się w pakietach java i javax. Pakiety chronią nas przed kolizjami nazw. Może istnieć wiele klas o takich samych nazwach w różnych pakietach np. File, dlatego używamy nazw kwalifikowanych: nazwa_pakietu.nazwa_klasy np. java.io.file f= new java.io.file( plik.txt ); Każda klasa należy do jakiegoś pakietu. Dla klas definiowanych w naszych przykładach używany był pakiet domyślny (zwykle bieżący katalog).

27.02.2019 28 PAKIETY c.d. Aby zachować unikalność nazw pakietów zaleca się stosowanie w tych nazwach odwróconych domen internetowych(które są unikatowe) Klasy są przechowywane w podkatalogach systemu plików. Ścieżka do klasy musi odpowiadać nazwie jej pakietu. Nazwy pakietów zwyczajowo pisze się małymi literami. Kolejne poziomy zagnieżdżenia w hierarchii pakietów oddziela się od siebie kropkami, podobnie do tego jak nazwy kolejnych katalogów w ścieżce dostępu oddziela się od siebie ukośnikami. Jeśli zatem deklarujemy, że klasa należy do pewnego pakietu, to plik zawierający implementację tej klasy musi znajdować się w katalogu odpowiadającym temu pakietowi. Przykładowo, jeśli plik zawierający definicję klasy HelloWorld znajduje się w katalogu pl/naukajavy, to klasa ta należy do pakietu pl.naukajavy.

PAKIETY c.d. Pakiety klas są zwykle przechowywane w plikach JAR (Java ARchive) lub ZIP. Pliki Jar zawierają skompresowane pliki klas i katalogi. Klasy zdefiniowane w nienazwanym pakiecie (tj. bez użycia dyrektywy package) mają nazwy proste np. Para. Przy tworzeniu większych projektów lub klas, używanych w innych programach, klasy umieszczamy w nazwanych pakietach, stosując dyrektywę package. (W IntelliJ,NetBeans wystarczy podać nazwę pakietu w dialogu definiowania klasy, a automatycznie wygenerowany plik źródłowy będzie zawierał odpowiednią dyrektywę package) np. : package pl.naukajavy; public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World!"); 27.02.2019 29

27.02.2019 30 IMPORTOWANIE KLAS Deklaracja importu pozwala na używanie nazw uproszczonych import nazwa_pakietu.*; //importuje wszystkie //nazwy klas z pakietu nazwa_pakietu import nazwa_pakietu.konkretnaklasa; np.: //importuje nazwę klasy import java.io.*; class A{ File f = new File( plik.txt );

IMPORTOWANIE KLAS Klasy String i System pochodzą z pakietu java.lang. Nie wymaga on importu, nazwy klas z tego pakietu są importowane domyślnie. Importowanie nazw klas nie oznacza wstawiania ich definicji do programu, umożliwia on tylko posługiwanie się nazwami skróconymi Import statyczny umożliwia odwołania do składowych statycznych import static nazwa_pakietu.*; import static nazwa_pakietu.konkretnaklasa; np.: import static java.lang.system.out; public class MojaKlasa{ public static void main(string[] args){ out.println( krócej ); 27.02.2019 31

STRUKTURA PROGRAMU 27.02.2019 32 Program w Javie to zestaw definicji klas Poza ciałem klasy nie może być żadnego kodu, poza dyrektywami package, importu i komentarzami package //nieobowiązkowa deklaracja pakietu import //deklaracje importu public class A{ class B{ Program może być zapisany w 1 lub wielu plikach (.java) (W pliku może być tylko 1 klasa publiczna)