Podstawowe konstrukcje języka Java Bartosz Walter InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin.

1 Podstawowe konstrukcje języka Java Bartosz Walter InMoS...
Author: Wiktor Kosiński
0 downloads 2 Views

1 Podstawowe konstrukcje języka Java Bartosz Walter InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin realizacji: 01.08.2005 – 31.10.2007 Szkolenie finansowane ze środków Europejskiego Funduszu Społecznego (75%) i budżetu państwa (25%) w ramach Zintegrowanego Programu Operacyjnego Rozwoju Regionalnego

2 Zmienne  Zmienne w Javie dzielą się na 3 rodzaje typów  typ obiektowy  typ prymitywny  typ tablicowy  Zmienne muszą być deklarowane przed użyciem; deklaracja może jednocześnie być połączona z inicjalizacją zmiennej  Typy w Javie są ściśle kontrolowane  nie można przypisać zmiennej jednego typu danej drugiego typu

3 Zmienne (cd.)  zmienne prymitywne int licznik = 0; double suma = 0.0; boolean pelnoletni = false; char literaA = 'A';  zmienne obiektowe Date teraz = new Date(); String imie = new String("Kazimierz"); String imie = "Kazimierz";  zmienne tablicowe int[] wynikiTotka = new int[6]; String[] studenci = new String[3]; String[] studenci = {"Kowalski", "Nowak", "Kaczmarek"};

4 Typy prymitywne  Typy prymitywne (inaczej proste) służą do reprezentacji danych, które nie są obiektami  Typami prymitywnymi są: int, long, short, byte, char, boolean, float i double  Typy prymitywne są przechowywane na stosie (wkompilowane w program)

5 Odpowiedniki typów prymitywnych  Typy prymitywne często nie wystarczają  Dlatego mają swoje odpowiedniki obiektowe  Integer, Short, Long, Byte  Boolean  Character  Float, Double  Obiekty tych typów mogą mieć nadane wartości tylko przy ich tworzeniu Integer jedynka = new Integer(1); int wartosc = jedynka.intValue();// wartosc == 1 jedynka.ustawWartość(2); // niemożliwe....

6 Napisy  Napisy są w Javie reprezentowane przez typ java.lang.String  Łączenie napisów  napis1 + napis 2  połączenie dwóch napisów zawsze powoduje utworzenie trzeciego String napis1 = "Ala"; String napis2 = "ma"; String napis2 = "kota"; System.out.println(napis1 + " " + napis2 + " " + napis3);

7 Obsługa napisów  Pomiar długości napisu  int length()  Wycinanie fragmentów napisów  String substring(int poczatek, int koniec)  Czy napis zaczyna się od podanego fragmentu?  boolean startsWith(String fragment)  Czy napis kończy się na podanym fragmencie?  boolean endsWith(String fragment)  Zamiana wielkości liter  String toLowerCase()  String toUpperCase()

8 Obsługa napisów  Porównanie z innym napisem  int compareTo(String innyNapis)  bolean equals(String innyNapis)  Porównanie z innym napisem bez różnicy w wielkości  boolean equalsIgnoreCase(String innyNapis)  Odczyt znaku na podanej pozycji  char charAt(int pozycja)  Odczyt pozycji podanego znaku  int indexOf(char znak)  int lastIndexOf(char znak)

9 Napisy – trochę inaczej  Istnieje drugi typ reprezentujący napisy java.lang.StringBuffer  StringBuffer pozwala na łączenie napisów bez konieczności tworzenia nowych obiektów StringBuffer napis1 = new StringBuffer(); napis1.append("Ala").append(" "); napis1.append("ma").append(" "); napis1.append("kota"); System.out.println(napis1);

10 Funkcja printf() W wersji Java 5.0 wprowadzono znaną z języka C (i innych...) funkcję printf() System.out.printf(tekst, zmienna1, zmienna2,...); Formaty %c znak o podanym kodzie %s napis %d całkowita liczba dziesiętna ze znakiem %u całkowita liczba dziesiętna bez znaku %f liczba zmiennoprzecinkowa "Imię: %s, wiek %u" imie wiek

11 Stałe  Stałe reprezentują dane, które się nie zmieniają  Można tylko raz przypisać wartość zmiennej; drugie przypisanie zostanie uznane przez kompilator za błąd  Stałą jest zmienna poprzedzoną słowem final final int LICZBA_KOL_W_SAMOCHODZIE = 4; final double GRAWITACJA = 9.81; final String uczelnia = "WSB";

12 Typy obiektowe  Typ obiektowy pozwala przechowywać dane będące obiektami danej klasy  W Javie wszystkie typy poza typami prymitywnymi są typami obiektowymi (tablice też)  Typy obiektowe (klasy) można samodzielnie definiować MojaKlasa klasa; MojaKlasa klasa = new MojaKlasa(); typ obiektowy utworzenie obiektu zmienna

13 Instrukcja if  Instrukcja warunkowa if pozwala wykonać instrukcję jeżeli podany warunek jest prawdziwy  Opcjonalnie, w klauzuli else można podać instrukcję, która ma być wykonana, jeżeli warunek jest nieprawdziwy if (wiek < 13) szkola = "Podstawówka"; else szkoła = "Inna";

14 Instrukcja for  Instrukcja for pozwala wykonywać określone polecenia w pętli, wykorzystując zmienne sterujące  Pętla for pozwala na realizację wielu typów pętli for (int licznik = 0; licznik < 10; licznik++) { System.out.println("Licznik=" + licznik); instrukcja początkowa pętli warunek kontynuacji instrukcja postępu pętli

15 Instrukcja while Instrukcja while pozwala wykonywać określone polecenia dopóki spełniony jest warunek kontynuacji sprawdzany na początku pętli while (licznik < 25) System.out.println("Licznik=" + licznik++); warunek kontynuacji

16 Instrukcja do..while  Instrukcja do..while pozwala wykonywać określone polecenia dopóki spełniony jest warunek kontynuacji sprawdzany na końcu pętli  do..while różni się od while tym, że zostanie wykonana przynajmniej raz do { System.out.println("Licznik=" + licznik++); } while (licznik < 25); warunek kontynuacji

17 Instrukcja switch  Instrukcja switch pozwala wykonywać określone polecenia w zależności od wartości wyrażenia  Instrukcja switch działa jedynie dla wyrażeń o wartościach całkowitych, znakowych lub logicznych switch (znak) { case 'A' : System.out.print('A'); break; case 'B' : System.out.print('B'); break; default : System.out.print('D'); } wyrażenie sterujące przypadek 'A' przypadek domyślny przerwanie

18 Instrukcje break, continue i return  Instrukcja break przerywa działanie pętli i powoduje jej opuszczenie  Instrukcja continue przerywa bieżącą iterację pętli i powoduje przejście do następnej  Instrukcja return powoduje opuszczenie bieżącej metody (funkcji) i ew. zwrócenie wyniku

19 Instrukcje break i continue for (int x = 0; x 5) continue; // koniec danej iteracji if (x > 10) break;// koniec pętli }  Instrukcja break przerywa działanie pętli i powoduje jej opuszczenie  Instrukcja continue przerywa bieżącą iterację pętli i powoduje przejście do następnej

20 Instrukcja return public int fibb(int n) { if (n == 1 || n == 2) return 1; return fibb(n–1) + fibb(n–2); } fibb(1) == 1 fibb(2) == 1 fibb(5) == fibb(4) + fibb(3)  Instrukcja return powoduje opuszczenie bieżącej metody (funkcji) i ew. zwrócenie wyniku

21 Instrukcja złożona  Instrukcja złożona jest sekwencją instrukcji ograniczoną znakami '}' i '{'  Może być użyta w instrukcjach warunkowych i pętlach w miejsce pojedynczej instrukcji if (wiek < 13) { szkola = "Podstawówka"; System.out.println(szkola); } else { szkoła = "Inna"; System.out.println(szkola); }

22 Operatory  Arytmetyczne  +, –, *, /, %  Inkrementacji i dekrementacji  ++, – – (prefiksowy i postfixowy)  Porównania  >, >=, ==,

23 Operatory (cd.)  Przypisania  =, op= (op jest operatorem dwuargumentowym: +, –, etc.)  Konkatenacji łańcuchów +  przykład: "Ala ma " + wiek + " lat"  Sprawdzenia typu obiektowego instanceof  przykład: kot instanceof Ssak  Warunkowy :?  przykład: x = (a > 5? 1: 2);

24 Konwersje i rzutowania  Konwersja niejawna jest wykonywana automatycznie między typami liczbowymi mniejszymi a większymi  byte  short  int  long  float  double  przykład: int a = 1; long b = a; // OK  Konwersja jawna (rzutowanie) jest wymagana w pozostałych przypadkach  przykład: long a = 1; int b = (int) a; // OK, ale możliwa utrata informacji

25 Wyrażenia  Wyrażeniem jest ciąg operacji posiadający jakąś wartość, którą można obliczyć  Składnia wyrażeń jest wzorowana na języku C i pochodnych a / (2 * b) a + b * (5 – 3 * a) 2 * Math.sin(Math.PI / 2) (a > 5? 10: 0)

26 Modyfikatory dostępu  Modyfikatory dostępu określają, jak dostępna jest dana klasa lub metoda  private: metoda jest dostępna tylko dla innych metod w tej samej klasie  protected: metoda jest dostępna dla innych metod w tej samej klasie lub w podklasach  public: metoda jest dostępna dla wszystkich metod we wszystkich klasach  domyślny: metoda jest dostępna dla wszystkich klas w pakiecie public class Fibbonacci { public int fibb(int n) {} }

27 Wybrane inne modyfikatory  abstract: metoda jest jedynie zadeklarowana, natomiast jej definicja (treść) powinna znaleźć się w klasach potomnych  static: metoda/pole jest dostępne bez konieczności tworzenia obiektów (instancji klas)  final: "zamyka" pole, metodę lub klasę  metoda nie może być pokrywana,  pole nie może być zmieniane (jest stałą),  klasa nie może posiadać podklas. public class Fibbonacci { final static int ELEM_1 = 1; public abstract int fibb(int n); }

28 Klasy  Program w Javie jest zbudowany z klas  Klasa posiada pola i metody public class Rachunek { private String numer; private String wlasciciel; private int saldo; public Rachunek(String n, String w) { numer = n; wlasciciel = w; saldo = 0; } public void wplata(int kwota) { saldo += kwota; }

29 Konstruktor  Każdy obiekt musi posiadać konstruktor; jeżeli go nie ma, wówczas kompilator generuje domyślny (pusty, bezparametrowy) public class Rachunek... public Rachunek(String id, String wlasciciel) { } modyfikator dostępu brak zwracanego typu lista parametrów

30 Konstruktor public class Rachunek { public Rachunek(String id, String wlasciciel) { //... } public Rachunek(String id) { this(id, null); } konstruktor nr 1 konstruktor nr 2  Konstruktor zawsze nazywa się tak jak jego klasa  Klasa może posiadać dowolną liczbę konstruktorów odwołanie do konstruktora nr 1

31 Utworzenie obiektu Rachunek rachunek; Rachunek rachunek = new Rachunek(1, "Nowak"); typ obiektowy wywołanie konstruktora: utwórz nowy rachunek, nadaj mu nr 1 i właściciela Nowaka zmienna operator new  Obiekt jest tworzony przez operator new i wywołanie konstruktora  Uzyskaną referencję do obiektu można zapamiętać w zmiennej

32 Metody (funkcje)  Program jest wykonywany poprzez wywołania metod  Metody są ciągiem instrukcji, posiadają nazwę i mogą zwrócić wartość  Metody muszą być zdefiniowane wewnątrz klas public int fibb(int n) { if (n == 1 || n == 2) return 1; return fibb(n–1) + fibb(n–2); } parametry nazwa metody typ zwracany ciało metody sygnatura metody

33 Wywołanie metody na obiekcie Rachunek rachunek = new Rachunek(1, "Nowak"); rachunek.wplata(1000); parametry metody obiekt komunikat (metoda)  Wywołanie metody polega na wysłaniu do obiektu komunikatu z parametrami

34 Pola (atrybuty)  Pola przechowują informacje w klasie  Pola definiuje się identycznie jak zmienne, tylko na poziomie klasy public class Student { private String imie; private String nazwisko; public Student(String i, String n) { imie = i; nazwisko = n; } }

35 Interfejs public interface InstytucjaFinansowa { public void wplata(String numer, int kwota); public void wyplata(String numer, int kwota) } nazwa klasy deklaracje metod  Interfejs, podobnie jak klasa, musi być zdefiniowany w osobnym pliku o nazwie takiej jak interfejs  Interfejs deklaruje nazwy metod, ale nie zawiera ich definicji (treści, ciała)  Interfejs jest "okienkiem", przez które można zajrzeć do klasy, która go implementuje

36 Interfejs SKOKATMskarbonka instytucja finansowa

37 Interfejsy i klasy public class Bank implements InstytucjaFinansowa { public void wplata(String numer, int kwota) { Rachunek rachunek = (Rachunek) rachunki.get(numer); rachunek.wplata(kwota); } public void wyplata(String numer, int kwota) { Rachunek rachunek = (Rachunek) rachunki.get(numer); rachunek.wplata(kwota); } implementacja interfejsu implementacja metody wplata() implementacja metody wyplata()

38 Interfejsy i klasy public class Bankomat implements InstytucjaFinansowa { public void wplata(String numer, int kwota) { Karta karta = (Karta) karty.get(numer); karta.wplac(kwota); } public void wyplata(String numer, int kwota) { Karta karta = (Karta) karty.get(numer); karta.wyplac(kwota); } implementacja interfejsu implementacja metody wplata() implementacja metody wyplata()

39 Interfejsy i klasy public class Skarbonka implements InstytucjaFinansowa { public void wplata(String numer, int kwota) { monety += kwota; } public void wyplata(String numer, int kwota) { this.rozbij(); monety = 0; } implementacja interfejsu implementacja metody wplata() implementacja metody wyplata()

40 Dziedziczenie public class KontoLokacyjne extends Rachunek public void ulokuj(int kwota) {...} public void wplata(int kwota) {...} } nadklasa nowa metoda  Dziedziczenie pozwala utworzyć nową klasę na bazie już istniejącej  Nowa klasa ( podklasa ) domyślnie dziedziczy wszystkie cechy (pola i metody) nadklasy, ale może też je przedefiniować  Podklasa jest szczególnym przypadkiem nadklasy i może być zawsze użyta zamiast niej metoda przedefiniowana

41 Pakiety  Pakiety pozwalają odróżnić różne klasy o tych samych nazwach  Pakiet + nazwa klasy tworzą pełną nazwę klasy  Pakiety mogą być w sobie zagnieżdżane package pl.org.inmost.java.adamnowak; class Klasa {} pełna nazwa: pl.org.inmost.java.adamnowak.Klasa

42 Polecenia importu  Polecenie importu na początku pliku klasy wskazuje, że ta klasa potrzebuje innej klasy  Import nie powoduje dołączenia jakiegokolwiek kodu do pliku wynikowego kompilacji; podpowiada jedynie kompilatorowi, o jakie obce klasy chodzi import java.util.Map; // import pojedynczej klasy import java.io.*;// import wszystkich klas z pakietu

43 Konwencje nazewnicze  Typy prymitywne: małymi literami  int, float, boolean  Typy obiektowe (klasy, interfejsy): z dużej litery  String, MojaKlasa  Zmienne i pola klas: małymi literami  i, imie, licznikPetli, daneOsobowe  Stałe: dużymi literami  PI, NAZWA_UCZELNI  metody: małymi literami  public void wydrukuj(String tekst)  publik void wydrukujNaEkranie(String tekst)

44 Komentarze /* komentarz wieloliniowy obowiązuje między znakami "/*" i "*/" */ int i; // komentarz jednoliniowy // obowiązuje od znaków "//" do końca linii /** komentarz JavaDoc pozwala dokumentować kod programu @author Bartosz Walter @version 1.0 */

45 Pytania?