Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32...

40
Aplikacje w środowisku Java - wykład 1 Java-wprowadzenie (typy proste, operatory, instrukcje sterujące) 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 C. S. Horstmann, Java, Techniki zaawansowane(wydanie10), Helion, Gliwice 2017 Dorota Pylak

Transcript of Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32...

Page 1: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

Aplikacje w środowisku Java - wykład 1

Java-wprowadzenie (typy proste, operatory, instrukcje sterujące)

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● C. S. Horstmann, Java, Techniki zaawansowane(wydanie10),

Helion, Gliwice 2017

Dorota Pylak

Page 2: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

BIBLIOGRAFIA

Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014

C. S. Horstmann, G. Cornell, Java. Podstawy, Helion, Gliwice 2013

C. S. Horstmann, Java. Techniki zaawansowane, Helion, Gliwice 2017

The Java Tutorials, http://download.oracle.com/javase/tutorial/

http://docs.oracle.com/javase/8/docs/

http://docs.oracle.com/javase/10/docs/

Page 3: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

3

WstępW 1995 roku firma Sun Microsystems wprowadziła na rynek nowy język programowania– Javę.Java to uniwersalny język programowania składniowo podobny do C/C++Dziś Java to nie tylko język programowania, ale cały olbrzymi zbiór technologii i produktów z nim powiązanych. Programy napisane w Javie działają na przeróżnych maszynach i systemach poczynając od telefonów komórkowych poprzez komputery PC, a kończąc na wysokowydajnych serwerach.

Page 4: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

4

Zestaw standardowych bibliotek wraz z kompilatorem, debuggerem, narzędziami tworzenia dokumentacji – JDK (Java Development Kit)

JDK uzupełniany w zależności od zastosowań tworzy platformę Javy podzieloną na edycje:

Standardowa - JavaStandard Edition (Java SE)

Biznesowa - Java Enterprise Edition (Java EE)

Mikro - JavaMicro Edition (Java ME) - do programowania urządzeń mobilnych

Page 5: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

5

Charakterystyka języka JavaPRZENOŚNOŚĆ-WIELOPLATFORMOWOŚĆ

Java jest językiem, w którym w przeciwieństwie do standardowych języków kompilowanych, gdzie program źródłowy jest tłumaczony przez kompilator wprost na kod maszynowy, kod źródłowy jest kompilowany na tzw. kod bajtowy (pośredni) i w takiej postaci jest dystrybuowany.

Programy Javy w postaci kodu bajtowego nie są związane z żadną konkretną platformą i mogą być uruchamiane na różnych procesorach i systemach operacyjnych.

Page 6: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

6

KOD ŹRÓDŁOWY (pliki z rozszerzeniem .java)

kompilator Javy javac

KOD BAJTOWY (B-kod .class)

Wirtualna maszyna Javy JVM (program java wraz z odpowiednimi bibliotekami dynamicznymi)

zainstalowana na danej platformie systemowej

Java 11 daje możliwość uruchamiania programów zdefiniowanych w pojedynczym pliku źródłowym (bez jawnej kompilacji) jednolinijkową komendąjava MojaKlasa.java

Charakterystyka Javy

Page 7: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

7

Biblioteki standardowe i narzędziowe interfejsy programistyczne (API) JAVY pozwalają w jednolity i niezależny od platformy sposób programować:

● Graficzne interfejsy użytkownika (GUI)● Dostęp do baz danych● Działania w sieci● Aplikacje WEB● Aplikacje rozproszone● Grafikę, gry, multimedia● Aplikacje na urządzenia mobilne

Charakterystyka Javy

Page 8: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

8

Charakterystyka Javy

OBIEKTOWOŚĆJava jest językiem obiektowym.

Wszystko, z czym mamy do czynienia w programie jest obiektem jakiejś klasy (poza kilkoma typami podstawowymi).W ten sposób podejście obiektowe do programu jest niejako wymuszone.

Obiekty w programie odzwierciedlają rzeczywiste obiekty (konkretne lub abstrakcyjne) i charakteryzują się

cechami (atrybutami, polami)

operacjami, które można na nich wykonywać (metodami)

KLASA to opis cech grupy podobnych obiektów, które są dla nich niezmienne.

Page 9: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

9

Charakterystyka Javy

BEZPIECZEŃSTWOBezpieczeństwo konstrukcji językowych

Automatyczne odśmiecanie (garbage collection) - automatyczne usuwanie przydzielonych wcześniej, a nie używanych już obszarów pamięci(Język Java nie udostępnia w ogóle pojęcia wskaźników. Operujemy na referencjach do obiektów, nie martwiąc się o przydzielanie pamięci – czyni to konstruktor, ani o zwalnianie zasobów – czyni to Garbage Collector)

Kontrola zgodności typów na etapie kompilacji

Wymuszona przez kompilator obsługa niektórych wyjątków(obsługa błędów w Javie jest realizowana za pomocą wyjątków, przy czym jeżeli w wywoływanej metodzie może zostać wyrzucony wyjątek, jego obsłużenie jest wymuszone (poza RuntimeExceptions))

Page 10: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

10

Charakterystyka Javy

Bezpieczeństwo transmisji danych oraz ochrona informacjiJava posiada zintegrowane z językiem mechanizmy pozwalające na wszechstronne zabezpieczanie pisanych programów np.:

– pakiety JAAS (Java Authentication and Authorization Services) pozwalają na elastyczne uwierzytelnianie użytkowników chcących pracować w systemie, a następnie kontrolowanie jakie operacje mogą być wykonywane w trakcie działania programu na rzecz uwierzytelnionego już użytkownika

– wbudowane mechanizmy szyfrowania przesyłanych danych (jak np. SecureSocket) oraz cała gama zaimplementowanych i gotowych rozwiązań kryptografii (uwierzytelnianie poprzez certyfikaty, podpisy cyfrowe) np. algorytmy ChaCha20 i Poly1305 czy TLS 1.3 dodane w Java 11

– pliki security.policy pozwalają decydować, które klasy pochodzące z jakich lokalizacji i podpisane cyfrowo przez kogo maja mieć dostęp do zasobów

Page 11: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

11

Charakterystyka Javy

SIECIOWOŚĆJęzyk Java był od początku projektowany jako język programowania dla Internetu.Stąd mamy w nim wbudowane wygodne w obsłudze mechanizmy obsługi sieci, np. czytanie z gniazda sieciowego jest realizowane, z punktu widzenia programu, tak samo jak z klawiatury, a pomiędzy korzystaniem z pliku znajdującego się na dysku i na serwerze sieciowym nie ma praktycznie żadnej różnicy.

Page 12: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

12

Charakterystyka Javy

OTWARTOŚĆDzięki temu, że standard języka jest otwarty, a JDK dostępny za darmo, tysiące ludzi na całym świecie pracuje, by wnieść swój wkład w rozwój tego języka. Dlatego język jest żywy, a jego rozwój nie ogranicza się tylko do kilkudziesięciu osób z firmy produkującej kompilator, ale jego twórcy mogą czerpać z doświadczeń wielu profesjonalistów i naukowców, by wybrać i zaadoptować w następnych wersjach najlepsze rozwiązania

● Oracle kończy z wydawaniem Oracle JDK za darmo do użytku komercyjnego na początku 2019 (do użytku osobistego nadal będzie za free). Na szczęście jest rozwiązanie tej sytuacji - OpenJDK wydawane na licencji GPL. Dodatkowo Oracle zobowiązało się, że od wersji 11 OpenJDK i Oracle JDK będą wymienne.

Page 13: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

13

PIERWSZY PROGRAM

Pierwszy program● Pobieramy z internetu aktualną wersję JDK wraz z

dokumentacją (http://java.sun.com)● Do pisania programów możemy używać zintegrowanych

środowisk programowania IDE (np. IntelliJ Idea, NetBeans, Eclipse) lub nawet wybranego edytora tekstowego

● Program źródłowy zapisujemy w pliku lub plikach z rozszerzeniem .java (każdy musi zawierać pełną definicję jednej lub więcej klas)

● Nazwa pliku musi być taka sama jak nazwa klasy publicznej występującej w tym pliku (ze specyfikatorem public) (rozróżniamy wielkość liter)

Page 14: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

14

PIERWSZY PROGRAM

public class Test{public static void main(String[] args){

System.out.println(”Witaj Javo”);}

}

● Zauważmy, że program w Javie zawsze składa się z definicji klasy.

● Do definiowania klas służy słowo kluczowe class, po nim podajemy nazwę klasy. Definicję klasy (pola i metody) podajemy w występujących potem nawiasach {}.

● W klasie Test zdefiniowano metodę main, wykonanie programu zaczyna się właśnie od tej metody.

Page 15: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

15

PIERWSZY PROGRAM

public static void main(String[] args)

Jest to nagłówek funkcji o nazwie main i następujących modyfikatorach:● public – oznacza, że funkcja jest publiczna, tzn. dostępna z

zewnątrz klasy. Musi taka być, aby JVM działająca na zewnątrz klasy mogła ją uruchomić

● static – funkcja jest statyczna, tzn. może być wywołana dla klasy, nie tylko dla konkretnego jej obiektu. Dzięki temu JVM nie musi tworzyć obiektu naszej klasy, może po prostu wywołać jej metodę main. Tę właśnie metodę JVM próbuje wywołać zawsze kiedy uruchamiamy ją poleceniem java JakasKlasa.

Słowo void nie jest modyfikatorem, ale typem zwracanym przez funkcję. Oznacza ono „pusty”, „bez wyniku”.

Page 16: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

16

PIERWSZY PROGRAM

public static void main(String[] args){System.out.println(”Witaj Javo”);}

● W nawiasach widzimy String[]. Jest to tablica elementów klasy String służącej do przechowywania łańcuchów znakowych (napisów). Tablica ta zawiera parametry wywołania programu (np. z linii poleceń)

● Za wypisywanie na standardowe wyjście odpowiadają metody obiektu out będącego polem statycznym standardowej klasy System odpowiadającej za komunikację z systemem. Obiekt out posiada m.in. metodę println(String s), która wypisuje przekazany jej obiekt klasy String, po czym przechodzi do nowej linii

● ”Witaj Javo” to stała łańcuchowa typu String

Page 17: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

17

PIERWSZY PROGRAM

● Zapisujemy program w pliku źródłowym Test.java● Zapisany program kompilujemy za pomocą javac Test.java (lub w IDE)

● Otrzymujemy plik binarny Test.class● Uruchamiamy program w IDE lub pisząc java Test

(uruchamiając maszynę wirtualną – polecenie java, podajemy jako argument samą nazwę klasy w której zdefiniowana jest metoda main, bez rozszerzenia .class)

Page 18: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

18

KOMENTARZE

●//komentarz jednowierszowy●/*komentarzwielowierszowy*/

●/**komentarz dokumentacyjny*/(komentarze dokumentacyjne są przetwarzane przez oprogramowanie tworzące dokumentacje np. javadoc )

Nazwy zmiennych, metod, klas mogą zawierać litery (duże lub małe), cyfry oraz znaki _ i $, przy czym nie mogą zaczynać się od cyfry (i od Javy 9 sam znak "-" nie może być identyfikatorem).

Page 19: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

19

TYPY PODSTAWOWE

TYP Rozmiar Zakres Klasa opakowująca

Całkowitoliczbowe

byte 8 bitów -128 : 127 Byte

short 16 -32768 : 32767 Short

int 32 -2 mld : 2 mld Integer

long 64 -9 tryl. : 9 tryl. Long

Zmiennoprzecinkowe

float 32 -3.4E38...+3.4E38 Float

double 64 -1.7E308...1.7E308 Double

Znakowy

char 16 \u0000 : \u8fff Character

Logiczny

boolean - true:false Boolean

Pusty

void - - Void

Page 20: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

20

LITERAŁY

● LITERAŁ to napis w programie reprezentujący w sposób bezpośredni wartość danej. Tak, więc: 1, 1.5,'a', ”tekst” są literałami odpowiednio liczbowymi, znakowymi i łańcuchowymi.

● Wszystkie literały całkowitoliczbowe są typu int.

● Każda liczba rzeczywista zapisana literalnie (zapisana z „.” lub w notacji naukowej) jest typu double.

● Aby zdefiniować liczbę typu long dodajemy L lub l na końcu.

● Użycie f lub F, powoduje traktowanie liczby jako typu float

● Napis true lub false to literał typu boolean

● Liczby całkowite możemy zapisać np. w systemie szesnastkowym, poprzedzając liczbę frazą 0x lub 0X

Page 21: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

21

LITERAŁY c.d.

Pojedyncze znaki w apostrofach to literały znakowe typu char. Zwróćmy uwagę, że znaki w Javie zapisywane są w Unicodzie (z Basic Multilingual Plane) i zajmują 2 bajty.

Przy pomocy backslasha „\” zapisujemy znaki specjalne np.\n,\t, \b, \', \”, \\

\uNNNN – dowolny znak o kodzie NNNN (N-cyfra szesnastkowa)

Literały łańcuchowe oznaczają obiekty klasy String (String nie jest typem podstawowym), np. ”Witaj”.

Wszystkie inne dane poza danymi typów prostych reprezentują obiekty, których atrybuty i funkcjonalność definiują określone klasy. Są to typy zwane referencyjnymi.

Page 22: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

22

ZMIENNE

Zmienna to nazwana część pamięci służąca do przechowywania informacji

Deklaracja zmiennejnazwa_typu nazwa_zmiennej;

Inicjacja zmiennej nazwa_typu nazwa_zmiennej=wyrażenie;

Deklaracja stałych. (Wartość stałej można ustalić tylko raz)final nazwa_typu nazwa_stałej[=wyrażenie];

Konwencje nazewnicze

nazwy zmiennych, metod – zaczynamy mała literą, a następnie każdy składnik wyróżniamy dużą literą np. poleFigury

nazwy klas – każdy składnik dużą literą np. StringBuilder

nazwy stałych – kapitalikami – np. PI

Page 23: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

23

ZMIENNE var

Od Java 10 w przypadku deklaracji zmiennej lokalnej występującej razem z inicjalizacją można zastosować mechanizm konkludowania typów i zamiast nazwa_typu wpisać słowo kluczowe var

var mojfajnyObiekt = new MojaSuperFajnaKlasa();

//zamiast

MojaSuperFajnaKlasa mojfajnyObiekt = new MojaSuperFajnaKlasa();

Typ jest konkludowany na podstawie wyrażenia inicjującego

var value = "abcd"; //value jest Stringiem

Page 24: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

24

OPERATORY

W Javie dysponujemy zestawem operatorów podobnym do tego z C/C++:

Jednoargumentowe

- zmiana znaku

+ potwierdzenie znaku (nic nie robi)

++ pre/postinkrementacja (zwiększenie o 1)

-- pre/postdekrementacja (zmniejszenie o 1)

Arytmetyczne

* mnożenie

/ dzielenie (całkowite lub zmiennopozycyjne!)

% modulo (reszta z dzielenia)

+ dodawanie

- odejmowanie

Page 25: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

25

OPERATORY c.d.

Przesunięcia

>> przesuniecie bitowe w prawo<< przesuniecie bitowe w lewo>>> przesuniecie bitowe w prawo z uzupełnianiem zerami

Relacji

== równe!= różne< mniejsze> większe<= mniejsze lub równe>= większe lub równe

Operator warunkowy ? : arytmetyczne if-else

Operatory przypisania

= przypisanieop= złożony operator przypisania

Page 26: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

26

OPERATORY c.d.

Logiczne i bitowe

&& logiczne i

|| logiczne lub

& logiczne i bitowe i

| logiczne i bitowe lub

^ logiczne i bitowe XOR

Uwaga. W przypadku pojedynczych & oraz | obliczane są zawsze obie strony wyrażenia, natomiast w wersji && oraz || następuje pewna optymalizacja, tzn. jeśli po obliczeniu lewej strony znany jest wynik całego wyrażenia, wówczas prawa strona nie jest obliczana.

Uwaga 2. Złożony operator przypisania ma następujące działanie:

a op= b;

jest równoważne:

a = a op b;

Page 27: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

27

OPERATORY c.d.

Uwaga 3. Operator ? : ma następująca składnie:

wyrazenieLogiczne ? wartosc1 : wartosc2

gdzie zmienne (lub wyrażenia) wartosc1 i wartosc2 muszą być wyrażeniami tego samego typu. Jeśli wyrazenieLogiczne ma wartość true operator zwraca wartosc1 w przeciwnym wypadku wartosc2.

Uwaga 4. Dla obiektów działają tylko operatory = (przypisanie), == (równe) oraz != (rożne). Działają one jednak na referencjach, a nie na zawartości obiektów.

Uwaga 5. Dla klasy String działają również operatory + i += i to z dowolnymi argumentami. Uwaga jednak na kolejność Np.:

String s = "a";

int a = 1, b = 2;

System.out.println(s + a + b); // wypisze "a12"

System.out.println(a + b + s); // wypisze "3a"

Page 28: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

28

OPERATORY c.d.

Przypisania i porównania działają nie bezpośrednio na obiektach, ale na referencjach.

● Przykład 1

String s1 = "coś", s2 = "co";

s2 += "ś";

System.out.println(s1 + " == " + s2 + ": " + (s1 == s2));

// wypisze "coś == coś: false"

//s1 i s2 to takie same napisy,

//ale operator == sprawdza,

//czy są to te same napisy

Page 29: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

29

OPERATORY c.d.

● Przykład 2

class Test {

public int i;

public static void main(String[] args) {

Test t1, t2;t1 = new Test(); // inicjalizacjat2 = t1;t1.i = 1;t2.i = 2;System.out.println(t1.i); // wypisze 2

}

}

Po przypisaniu t2 = t1 zmienne t1 i t2 reprezentują ten sam obiekt. Jeden obiekt.

Page 30: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

30

OPERATORY c.d.

● Do porównywania obiektów (wartości, nie referencji) służy metoda equals(). Przypisanie wartości jest bardziej skomplikowaną sprawą. Przykład użycia metody equals():

String s1 = "coś", s2 = "co";

s2 += "ś";

System.out.println(s1 + "==" + s2 + (s1.equals(s2)));

// wypisze "coś == coś: true"

Page 31: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

31

OPERATOR KONWERSJI TYPU● Zmiana typu wyrażenia- konwersja (rzutowanie)● Operator konwersji (rzutowania) ma postać:

(nazwa_typu) wyrażeniegdzie nazwa_typu oznacza typ do jakiego jest przekształcany aktualny typ wyrażenia

int n=7;double x=(double)n/5;//dzielenie rzeczywiste

● W trakcie obliczania wartości wyrażeń arytmetycznych dokonywane są automatyczne konwersje (promocje numeryczne)

Dla operatorów dwuargumentowych: Jeśli jeden z argumentów jest typu double, to drugi jest przekształcany do double

W przeciwnym razie, jeśli jeden jest float, to drugi konwertuje się do float

W przeciwnym razie, jeśli jeden jest long, to drugi do long

W przeciwnym razie, oba argumenty są konwertowane do int

Page 32: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

32

INSTRUKCJE STERUJĄCE

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.

Page 33: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

33

if-else

if (wyrazenie) instrukcja1;

lub

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.

Page 34: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

34

while, do-while

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.

Page 35: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

35

for

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

Page 36: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

36

for-each

for(Typ zm : zestaw) instrukcja;

Pętla for-each wykonuje instrukcje, dla każdego elementu zestawu.

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.

Page 37: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

37

break, continue

● 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.

Page 38: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

38

Polecenia : continue i break z etykietami

● 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.

Page 39: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

39

Polecenia : continue i break z etykietami

● 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).

Page 40: Java-wprowadzenie (typy proste, operatory, instrukcje ... · Zmiennoprzecinkowe float 32 -3.4E38...+3.4E38 Float double 64 -1.7E308...1.7E308 Double Znakowy char 16 \u0000 : \u8fff

40

switch

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;}