Agnieszka Nowak - Brzezińskazsi.tech.us.edu.pl/~nowak/itBiznes/w3.pdf · 1992 r. –wielofunkcyjny...
Transcript of Agnieszka Nowak - Brzezińskazsi.tech.us.edu.pl/~nowak/itBiznes/w3.pdf · 1992 r. –wielofunkcyjny...
Agnieszka Nowak - Brzezińska
Wystarczy raz zapisać kod a program
można uruchomić wszędzie…
Java – język programowania stworzony przez James’a Goslinga i Patric’a Naughton’a z firmy Sun Microsystems.
Krótka historia języka:1991 r. – Projekt „Green” – czyli niezależny
od platformy i kompaktowy język programowania tunerów telewizji kablowej.
1992 r. – wielofunkcyjny pilot tv oraz tv box z funkcją wideo na żądanie!
1993 – 1994 r. – 300 000 punktów Air Miles za loty w celu promocji technologii Green.
1995 r. – przeglądarka internetowa HotJava z obsługą apletów. Pierwsza wersja (1.0) Javy (bo nazwa Oak była już zajęta).
1998 r. – Java 1.2 – GUI i funkcję graficzne – przemianowano na Java 2 SE ver. 1.2.
2004 r. – Java 1.5 – typy generyczne, pętla for each, dużo zmian –przemianowano na Java 5.0.
Źródło: K. Sierra, B. Bates. Head First Java. 2nd Edition. O’Reilly, USA.
Java rozróżnia wielkość liter – println, Println,PRINTLN to są 3 różne nazwy!
Główny plik źródłowy zawierający kod programu(z rozszerzeniem .java) musi nazywać się taksamo jak nazwa klasy.
Wszystko w Javie musi się znajdować w jakieśklasie!
Nazwa klasy musi się zaczynać od litery, poktórej mogą wystąpić dowolne kombinacje liter icyfr. Nazwa nie może być zarezerwowanymsłowem kluczowym.
Funkcja (metoda main) musi się znajdować wpliku źródłowym klasy, która chcemy uruchomić.
Typy komentarzy: Jednolinijkowe (liniowe)
// to jest komentarz składający się z 1 linii
Wielolinijkowe (blokowe)/* tutaj
komentarzmający wielelinii */
Komentarzy blokowych NIE wolno zagnieżdżać /* /* błąd */ */
Automatyczne generowanie dokumentacji/** Jest to nasz pierwszy program
@version 1.01@author Tomasz Jach
*/
Deklarujemy referencję zmiennej
Tworzymy obiekt
Połączenie odwołania do obiektu i referencji
Należy zalogować się jako administrator. Przejdź do panelu sterowania, przełącz na widok
klasyczny i kliknij dwukrotnie ikonę Systemu. Wsystemach Windows NT/2000/XP od razu otworzy sięokno Właściwości systemu. W systemie Windows Vistanależy kliknąć „Zaawansowane ustawienia systemu”.W oknie dialogowym Właściwości systemu kliknijkartę Zaawansowane, a następnie przycisk Zmienneśrodowiskowe. W oknie tym znajdź zmienną o nazwiePath. Kliknij przycisk Edytuj i dodaj tam katalogjdk\bin na początku ścieżki i wpis ten oddziel odreszty wpisów średnikiem, jak poniżej:
C:\jdk\bin; inne wpisy Zapisz ustawienia. Każde nowe okno konsoli będzie
wykorzystywać prawidłową ścieżkę.
W Javie każdy typ int to liczba 32bitowa, w C/C++ to była 16-to albo 32-u albo dowolna inna liczba. Teraz nie ma przynajmniej problemów z przenoszeniem kodu.
Interpreter Javy może wykonać kod bajtowy Javy bezpośrednio na urządzeniu, na którym interpreter zainstalowano.
Obecnie kod bajtowy jest tłumaczony przez kompilator JIT (just-in-time compiler) na kod maszynowy.
Skrót JVM (ang. Java Virtual Machine),
wirtualny (programowy) procesor, który wykonuje kod pośredni ładowany z plików class lub archiwów z lokalnego systemu plików lub poprzez sieć
maszyna wirtualna implementowana jest jako samodzielnie uruchamiany program lub wbudowywana np. w przeglądarkę WWW albo w system operacyjny (statycznie jako moduł lub biblioteka łączona dynamicznie)
Podstawowa wersja środowiska Javy dostarczana jest przez firmę Sun Microsystems w postaci pakietu narzędzi Java 2 Software Developers Kit
Standard Edition (Java 2 SDK SE) Zestaw przygotowywany jest dla różnych systemów
operacyjnych Dawniej nazywany był Java Developers Kit (JDK) istnieje rozbudowana wersja pakietu Enterprise Edition
zawierającadodatkowe narzędzia oraz biblioteki środowisko zawierające tylko implementację maszyny
wirtualnej dla określonego systemu operacyjnego i biblioteki standardowe Javy, bez narzędzi programistycznych, nazywane jest Java Runtime Environment i służy tylko do
uruchamiania programów utworzonych w Javie
w zestawie J2SDK kompilatorem jest program o nazwie javac (Java Compiler)
pliki wynikowe mogą być pogrupowane logicznie w pakiet, który fizycznie może być zlokalizowany w pewnej drzewiastej strukturze katalogowej
pakiet może być zarchiwizowany do formatu zip lub jar np. za pomocą programu narzędziowego jar dostarczanego w zestawie J2SDK
Małe programy z interfejsem graficznym uruchamiane przez przeglądarkę WWW z wbudowaną obsługą Javy lub specjalną przeglądarkę apletów o nazwie appletviewer dostarczaną w pakiecie J2SDK;
informacja o tym skąd i jaki plik class lub jar załadować wbudowywana jest w stronę WWW w postaci specjanego znacznika HTML, który dodatkowo może zawierać parametry uruchomieniowe apletu, aplikacje graficzne, lub tekstowe programy uruchamiane przez maszynę wirtualną pracującą z poziomu systemu operacyjnego
Implementacją maszyny wirtualnej w pakiecie J2SDK jest program java uruchamiany z linii komend wraz z parametrem określającym plik class lub jar w lokalnym systemie plików, od którego zaczyna się wykonywanie aplikacji
serwlet program wykonywany po stronie serwera
midlet program wykonywany w urządzeniu przenośnym
jedna z klas musi zawierać metodę public static void main(String[ ] args)
jeśli jest to klasa publiczna, nazwa tej klasy musi być taka sama jak nazwa pliku, w której jest zdefiniowana
po kompilacji pliku źródłowego .java do Bkodu (polecenie javac) powstają pliki .class (dla każdej klasy osobny plik)
poleceniem java klasa .class zostaje załadowana przez JVM (Java Virtual Machine) i sterowanie zostaje przekazane do metody main( ), gdzie zaczyna się „życie”: tworzenie obiektów, odwołania do innych klas aplikacji
class Aplikacja1 {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Przy założeniu, że kod aplikacji zapisany został w pliku
Aplikacja1.java
kompilujemy go kompilatorem javac wydając polecenie:
javac Aplikacja1.java
W wyniku kompilacji otrzymamy plik z kodem pośrednim
Aplikacja1.class
który możemy uruchomić wykorzystując interpreter java
java Aplikacja1
<applet>
<html>
<head>
<title>Aplet1</title></head
>
<body>
<applet code="Aplet1.class"
width="400"
height="200">
</applet>
</body>
</html>
import java.applet.*;
import java.awt.*;
public class Aplet1 extends
Applet {
public void init() {
add(new Label(„Hello world”));
}
}
Plik źródłowy:
Applet1.java
javac Aplet1.java
Applet1.class
Plik HTML:
Applet.html
Applet.html
Nazwa Przykładowe wartośdi Objaśnienie
CODE CODE="Pusty.class" określa nazwę pliku zawierającego kod bajtowy apletu
WIDTH HEIGHT
WIDTH=100HEIGHT=200
określają wymiar apletu w pikselach
HSPACE VSPACE
HSPACE=10VSPACE=20
określają w pikselach odstęp pomiędzy apletem a otaczającym go tekstem
CODEBASE CODEBASE="C:/Aplety"
Określa ścieżkę dostępu do tego pliku. Jeżeli zbiór z kodem bajtowym jest w tej samej kartotece, co dokument HTML, to nie trzeba podawad ścieżki dostępu. Wartością CODEBASE może byd również adres sieciowy URL.
Jeżeli kod HTML strony WWW został zapisany w pliku Aplet1.html to działanie apletu możemy sprawdzić ładując stronę do przeglądarki lub korzystając z interpretera appletviewer poprzez podanie komendy: appletviewer Aplet1.html
Wyszukiwaniem i ładowaniem plików zawierających kod pośredni zajmuje się moduł ładujący (bytecode
loader, classloader)
klasy, o ile to możliwe, ładowane są w pierwszej kolejności z lokalnego systemu plików a następnie z sieci
Przed rozpoczęciem wykonywania załadowanego kodu bajtowego jest on sprawdzany przez weryfikator w czterech etapach
1. weryfikacja pliku klasy: weryfikacja sygnatury pliku
i jego struktury
2. weryfikacja tworzenia podklas, stałych, wskaźników do obszarów pamięci
3. weryfikacja kodu bajtowego: analiza metod, kontrola argumentów, inicjalizacji zmiennych, analiza stosu argumentów, badanie możliwości wystąpienia nadmiaru i niedomiaru podczas operacji arytmetycznych
4. sprawdzenie podczas wykonania typu danych oraz dostępu: analiza poziomów dostępu do składowych prywatnych i chronionych
Maszyna wirtualna może zawierać zintegrowany kompilator JIT, który "w locie" (JustInTime) generuje kod wykonywalny specyficzny dla danego komputera na podstawie kodu pośredniego.
Przy pierwszym uruchomieniu kod pośredni trafia wprost do interpetera, ale jest kompilowany i zapamiętywany w postaci kodu wynikowego.
Kolejne odwołanie do tego kodu powoduje, że wykorzystywany jest kod wynikowy, co przyśpiesza działanie programu nawet 20krotnie
menedżer bezpieczeństwa jest klasą implementującą powłokę ochronną w układzie maszyna wirtualna/przeglądarka
określa i nadzoruje politykę dostępu przeglądarki do zasobów lokalnych i sieciowych
menedżer bezpieczeństwa musi wyrazić zgodę na uzyskanie przez aplet dostępu do następujących zasobów:
1. komunikacji sieciowej,2. danych w lokalnym systemie plików,3. procesów systemu operacyjnego,4. modułu ładowania,5. bibliotek Javy
przy standardowych ustawieniach aplety załadowane przez sieć nie mają np. dostępu do lokalnego systemu plików i mogą nawiązywać połączenia sieciowe tylko z serwerem, z którego zostały załadowane.
aplikacje nie podlegają tym ograniczeniom i mogą uzyskiwać dostęp do dowolnych zasobów lokalnych i sieciowych
Ścieżka (bezwględna) do katalogu jdk/bin powinna być umieszczona w zmiennej systemowej PATH
javac kompilator
Składnia wywołania:
javac [opcje] [plikiźródłowe] [@plikzlistąplikówźródłowych]
pliki źródłowe z rozszerzeniem java mogą być wymienione w linii komend lub zebrane w listę rozdzieloną odstępami i/lub znakami nowego wiersza zapisaną w pliku, którego nazwa podawana jest po znaku @
w wyniku kompilacji powstają pliki z kodem pośrednim o rozszerzeniu class.
każdy plik class zawiera jedną skompilowaną klasę lub interfejs
program w języku Java jest zbiorem definicji klas i interfejsów
javac kompilator Program w języku Java może być zapisany w jednym
pliku lub w wielu plikach przy czym: w jednym pliku źródłowym może znajdować się co
najwyżej jedna klasa publiczna jeżeli plik źródłowy zawiera definicję klasy
publicznej, to jego nazwa musi być identyczna z nazwą tej klasy (wielkość liter jest istotna).
Składnia wywołania:
java [opcje] nazwaklasy [argumenty]
jako parametr podawana jest nazwa klasy (bez rozszerzenia class), od której zaczyna się wykonanie aplikacji. Klasa taka nazywana jest klasą startową
java interpreter aplikacji
java [opcje] jar plik.jar [argumenty]
wskazywany jest plik archiwum z rozszerzeniem jar, który zawiera klasę startową, inne klasy aplikacji oraz pliki zasobów (grafiki, dźwięki i.t.p.).
Składnia wywołania:
appletviewer [opcje] url
interpreter apletów pozwala uruchamiać aplety bez korzystania z przeglądarki WWW
jako parametr podawany jest url strony WWW
jeśli w stronę WWW wbudowanych jest kilka apletów, to dla każdego z nich otwierane jest osobne okno interpretera
pakiet jest mechanizmem łączenia w pewną całość
logicznie powiązanych klas i interfejsów
zapewniania kontrolę dostępu do klas i interfejsów
oraz ich składowych pozwala unikać kolizji nazw biblioteki Javy zorganizowane są w pakiety
Przynależność klas i interfejsów zdefiniowanych w danym pliku do konkretnego pakietu możemy określić podając jako pierwszy wpis w pliku źródłowym deklarację pakietu
package nazwapakietu; dalszaczęśćplikuźródłowego
pakiety mogą zawierać podpakiety i tworzyć hierarchie zorganizowaną w strukturę drzewa
struktura ta jest mapowana na strukturę katalogów
katalogi zawierają skompilowane pliki klas i interfejsów
programy mogą wykorzystywać klasy i interfejsy z istniejących pakietów deklarując ich import
można importować wszystkie klasy i interfejsy danego pakietu podając w deklaracji importu symbol * na końcu nazwy pakietu
deklaracja z symbolem* oznacza, że wykorzystane zostaną z danego pakietu tylko te definicje klas i interfejsów, które są niezbędne do skompilowania i uruchamiania programu
jeśli nie podano żadnej deklaracji importu, to i tak domyślnie zawsze importowany jest pakiet java.lang.*
Kod bajtowy może być tłumaczony w locie (w trakcie działania programu) na kod maszynowy przeznaczony dla określonego procesora, na którym działa aplikacja.
Korzyści płynące z wielowątkowości to lepszainteraktywność i działanie w czasierzeczywistym.
W Javie realizacja wielowątkowości jest owiele prostsza niż w innych językach. Wątki wJavie mogą korzystać z systemówwieloprocesorowych, jeśli podstawowysystem operacyjny to umożliwia.
Java jest bardziej dynamicznym językiem niżC i C++ pod wieloma względami. Została takzaprojektowana aby dostosowywać się doewoluującego środowiska. Do bibliotekmożna bez przeszkód dodawać nowe metodyi zmienne egzemplarzy, nie wywierającżadnego wpływu na klienty.
Założenie jest proste: użytkownik pobiera kod bajtowy z internetu i uruchamia go na własnym urządzeniu. Programy napisane w Javie, które działają na stronach internetowych, noszą nazwę apletów Javy.
Aby używać apletów, wystarczy mieć przeglądarkę obsługującą Javę, w której można uruchomić kod bajtowy tego języka.
Nie trzeba nic instalować. Dzięki temu, że forma Sun udziela licencji na kod
źródłowy Javy i nie zezwala na wprowadzanie żadnych zmian w języku i bibliotece standardowej, każdy aplet powinien działać w każdej przeglądarce która obsługuje Javę.
Najważniejsze jest jednak to, że dzięki zabezpieczeniom maszyny wirtualnej nie trzeba obawiać się ataków ze strony złośliwego kodu.
Pobieranie apletu odbywa się w podanysposób jak wstawianie obrazu na stronęinternetową.
Aplet integruje się ze stroną a tekst otacza goze wszystkich stron jak obraz. Różnicapolega na tym, że ten obraz jest żywy.
Reaguje na polecenie użytkownika, zmieniawygląd oraz przesyła dane pomiędzykomputerem, na którym został uruchomionya tym, ż którego pochodzi.
Zmienna – konstrukcja programistyczna posiadająca swoją unikalną nazwę, oraz typ danych jakie zmienna jest w stanie przechowywać.
Każda zmienna przed wykorzystaniem w programie musi zostać zadeklarowana (stworzona). Deklaracja polega na podaniu typu i nazwy zmiennej w formie:
typ_zmiennej nazwa_zmiennej;np. int suma;
Aby naraz zadeklarować wiele zmiennych tego samego typu oddzielamy ich nazwy przecinkiem:
np. int suma, pensja, obroty;
Na końcu każdej deklaracji musi znajdować się średnik!Nazwa zmiennej może się składać z liter (małych lub wielkich),
cyfr, oraz znaku podkreślenia, ale nie może się zaczynać od cyfry.
Aby przypisać zmiennej jakąś określoną wartość wpisujemy:
nazwa_zmiennej = wartość;
np. suma = 100;
Pierwsze przypisanie wartości zmiennej nazywa się jej inicjalizacją. Inicjalizacja zmiennej może się odbyć w dowolnym miejscu programu po jej wcześniejszym zadeklarowaniu. Może też wystąpić równocześnie z deklaracją:
int suma = 100;
W Javie każda zmienna musi mieć określonytyp. Deklaracja zmiennej polega na napisaniunazwy typu, a po nim nazwy zmiennej.
Double pensja;
Int liczbaDniPracujacych;
Long liczbaMieszkancowZiemi;
Boolean czyZdanyEgzamin;
Po zadeklarowaniu zmiennej trzeba zainicjować ją za pomocą instrukcji przypisania – nie można użyć wartości niezainicjowanej zmiennej.
Int liczbaDniPrzepracowanych;
System.out.println(liczbaDniPrzepracowanych);
Błąd – zmienna nie została zainicjowana !!!
lub
Int liczbaDniPrzepracowanych;
liczbaDniPrzepracowanych = 12;
Int liczbaDniPrzepracowanych = 12;
Java jest językiem o ścisłej kontroli typów.Oznacza to, że zmienna każda musi miećokreślony typu. Istnieje 8 podstawowychtypów. 4 z nich reprezentują liczby całkowite,dwa – liczby rzeczywiste, jeden o nazwie charzarezerwowano dla znakówreprezentowanych przez kody liczbowesystemu Unicode, zaś ostatni jest logiczny(boolean).
To liczby pozbawione części ułamkowej.Zaliczają się do nich także liczby ujemne.
Typ Liczba bajtów
zakres
Int 4 -2147483648 do 2 147483647
Short 3 -32 768 do 32 767
Long 8 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807
byte 1 -128 do 127
Służą do przechowywania liczb z częściąułamkową.
Typ Liczba bajtów
zakres
Float 4 Około 3,40282345E+38F (6-7 znaczących cyfr dziesiętnych)
double
8 Około 1,79769313486231570E + 308 (15 znaczących cyfr dziesiętnych)
Typ char służy do reprezentacji pojedynczych znaków. Mogą to być stałe znakowe opatrzone apostrofami np. ‘A’, ‘z’, ‘0’. Typ ten zajmuje 16 bitów.
Można również wyświetlać symbole zakodowane w Unicode (których wartości mieszczą się w zakresie \u0000 do \uFFFF). Przykładowo \u03C0 to grecka litera .
Ponadto wyróżnia się symbole reprezentujące znaki specjalne jak znak nowej linii czy tabulacja:
\n – nowa linia \t – tabulacja \b – backspace \r – powrót karetki \” – cudzysłów \’ – znak apostrofu \\ - lewy ukośnik (ang. backslash)
Może przechowywać dwie wartości: true ifalse.
Służy do sprawdzania warunków logicznych.
Wartości logicznych nie można konwertowaćna wartości całkowitoliczbowe.
+ (dodawanie)
- (odejmowanie)
* (mnożenie)
/ (dzielenie całkowitoliczbowe)
% (dzielenie modulo)
++ (inkrementacja)
-- (dekrementacja)
Wynik:
Operator inkrementacji (++) zwiększa wartość zmiennej o jeden, podczas gdy operator dekrementacji (--) zmniejsza wartość zmiennej o jeden.
Oba operatory mogą występować w dwóch formach:◦ Przedrostkowej (++x).◦ Przyrostkowej (x++).
Obie postacie powodują zwiększenie zapamiętanej w zmiennej wartości o jeden, ale w przypadku formy przedrostkowej odbywa się to przed jej wykorzystaniem (przed zwróceniem jej wartości), a w przypadku formy przyrostkowej dopiero po wykorzystaniu danej zmiennej.
Wynik:
Jeśli w wyniku operacji w dalszej części programu na zmiennej liczbowej przekroczymy dopuszczalny zakres przyjmowanych przez nią wartości to nie spowoduje to błędu kompilacji!
Przekroczenie dopuszczalnej wartości nie powoduje błędu a jedynie „zawinięcie” liczby zgodnie z zasadą:
INT_MAX + 1 = INT_MIN
INT_MAX + 2 = INT_MIN +1
oraz
INT_MIN – 1 = INT_MAX
INT_MIN – 2 = INT_MAX + 1
Operatory bitowe służą do wykonywania operacji na bitach. Są one następujące:
Operator Nazwa Przykład
& Bitowe AND x & y
| Bitowe OR x | y
~ Bitowe NOT ~x
^ Bitowy XOR x ^ y
<< Przesunięcie arytmetyczne w lewo x << y
>> Przesunięcie arytmetyczne w prawo x >> y
>>> Przesunięcie arytmetyczne w prawo
z wypełnieniem zerami
x >> y
Operacje logiczne wykonujemy na argumentach, które przyjmują jedną z dwóch możliwych wartości logicznych: true lub false.
Wyróżniamy 3 operatory logiczne:
Operator Nazwa Przykład
&& Logiczny AND x && y
|| Logiczny OR x || y
! Logiczny NOT !x
Operatory przypisania są operatorami dwuargumentowymi i powodują przypisanie operandowi lewostronnemu wartości operandu prawostronnego.
Argument 1 Operator Argument 2 Znaczenie
x = y x = y
x += y x = x + y
x -= y x = x – y
x *= y x = x * y
x /= y x = x / y
x %= y x = x % y
x <<= y x = x << y
x >>= y x = x >> y
x >>>= y x = x >>>y
x &= y x = x & y
x |= y x = x | y
x ^= y x = x ^ y
Operatory porównania służą do porównania operandów. Zwracają one wartość true lub false. Przykład:
Wynikiem działania arg1 == arg2 będzie true jeśli oba argumenty są sobie równe. W przeciwnym przypadku wynikiem będzie false.
Operator Wykonywane działanie Przykład
== Równość x == y
!= Nierówność x != y
< Mniejszość x < y
> Większość x > y
<= Mniejszość lub równość x <= y
>= Większość lub równość x >= y
Typ operatora Symbol operatora
Przyrostkowe x++ x --
Unarne ++x --x +x -x ~ !
Multiplikatywne * / %
Addytywne + -
Przesunięcia bitowe << >> >>>
Relacyjne < > <= >= instanceof
Równości == !=
Bitowy AND &
Bitowy XOR ^
Bitowy OR |
Logiczny AND &&
Logiczny OR ||
Warunkowy ? :
Przypisania = += -= *= /= %= &= ^= |== <<= >>= >>>=
Wszystkie operatory dwuargumentowe (za wyjątkiem op. przypisania) o jednakowym priorytecie są sprawdzane od lewej do prawej. Operatory przypisania są oceniane od prawej do lewej.
== (operator równości)
!= (operator nierówności)
> (większości)
< (mniejszości)
>= (większe bądź równe)
<= (mniejsze bądź równe)
&& (koniunkcja logiczna)
|| (alternatywa logiczna)
! (negacja)
Wartością tego wyrażenia jest wyrażenie1jeśli warunek ma wartość true, lub wyrażenie2 gdy warunek ma wartość false.
Warunek ? Wyrażenie1: wyrażenie2
Klasa Math zawiera zestaw funkcjimatematycznych, które mogą być bardzoprzydatne przy pisaniu niektórych rodzajówprogramów.
int x=4;
float pierwZx= Math.sqrt(x);
System.out.println(pierwZx);
Wynik : 2.0
double x=9.997;
Int nx = (int) z;
Wynik : 9
W javie łańcuchy składają się z szeregu znaków Unicode. Nie ma wbudowanego typu String, ale standardowa biblioteka Javy zawiera predefiniowaną klasę o takiej właśnie nazwie. Każdy łańcuch w cudzysłowach jest obiektem klasy String:
String e=„”;
String powitanie= ”Witaj”;
Aby wydobyć z łańcucha jakiś podłańcuch, należy użyć metody substring klasy String. Np..
String powitanie= ”Witaj”;
String s= powitanie.substring(0,3);
Wit
Metoda equals
String imie1= ”Aleks”;
String imie2= „Aleksandra”;
Imie2.equals(imie1);
Instrukcje warunkowe służą do sprawdzania warunków. W zależności od tego czy warunek jest prawdziwy, czy fałszywy, wykonywane są różne bloki instrukcji. Ogólna postać instrukcji warunkowej jest następująca:
if (warunek) {//instrukcje do wykonania, gdy warunek jest prawdziwy
}else {
//instrukcje do wykonania, gdy warunek jest fałszywy}
Blok else jest blokiem opcjonalnym. Prawdziwa jest zatem instrukcja:if (warunek) {
//instrukcje do wykonania, gdy warunek jest prawdziwy}
Często przydatna jest również zmodyfikowana postać instrukcji warunkowej, sprawdzająca warunki podrzędne, w przypadku gdy nie jest spełniony warunek nadrzędny.
if (warunek1) {//instrukcje do wykonania, gdy warunek1 jest prawdziwy.
}else if(warunek2) {
//instrukcje do wykonania, gdy warunek2 jest prawdziwy, natomiast warunek1 jest fałszywy.}else if(warunek3) {
//instrukcje do wykonania, gdy warunek3 jest prawdziwy, natomiast warunek1 oraz warunek2 jest fałszywy.}else {
//instrukcje do wykonania, gdy wszystkie warunki są fałszywe.}
Instrukcja switch pozwala w wygodny sposób sprawdzić ciąg warunków i wykonać różny kod w zależności od tego czy są one fałszywe czy prawdziwe. Jej postać jest następująca:
Operator warunkowy jest postaci:
warunek ? wartość1 : wartość2;
Co należy rozmieć jako: jeśli warunek jest prawdziwy to podstaw za wartość wyrażenia wartość1, w przeciwnym wypadku podstaw za wartość wyrażenia wartość2.
Można go traktować jako skróconą wersję instrukcji warunkowej if. Przykład:
Pętla while wykonuje daną instrukcję lub blok instrukcji tak długo jak długo warunek jest spełniony (ma wartość true). Ogólna postać pętli while jest następująca:
while (warunek)
instrukcja;
Pętla while bada prawdziwość warunku jeszcze przed wykonaniem dalszego kodu (na samym jej początku), dlatego też, jeśli warunek ma wartość false to instrukcje zawarte w tej pętli nigdy nie zostaną wykonane.
Można też tak:
Pętla do while jest odmianą pętli while, a jej ogólna postać jest następująca:
do
instrukcja;
while(warunek);
Co należy rozumieć jako: Wykonuj instrukcję dopóki warunek jest prawdziwy. Jako, iż warunek pętli sprawdzany jest na końcu, wykona się ona zawsze przynajmniej raz!
ALBO…
Ogólna postać pętli for jest następująca:
for (wyrażenie początkowe; wyrażenie warunkowe; wyrażenie modyfikujące)
instrukcja_do_wykonania;
W miejsce wyrażenia początkowego wstawiane jest wyrażenie stosowane do zainicjalizowania zmiennej służącej jako licznik wykonań pętli. Wyrażenie warunkowe określa jaki warunek musi być spełniony by przejść do kolejnego przebiegu pętli. Wyrażenie modyfikujące natomiast używane jest do modyfikacji wartości zmiennej będącej licznikiem pętli.
LUB
Wartość zmiennej i widoczna poza blokiem pętli
Wartość zmiennej i widoczna tylko w bloku pętli
Instrukcja break powoduje przerwanie wykonywania pętli i opuszczenie jej bloku.
Nie ma warunku zatrzymania pętli
A i tak zadziała…
Wynik
Instrukcja continue powoduje przejście do kolejnej iteracji danej pętli (chyba, że była to jej ostatnia iteracja).
Wynik
Instrukcje break i continue mają również postać w połączeniu z etykietami.
Etykieta to wyznaczone miejsce w kodzie programu. Etykietę definiuje się przez podanie jej nazwy zakończonej znakiem dwukropka
break etykieta powoduje przerwanie wszystkich pętli znajdujących się za etykietą (innymi słowy przerwij działanie pętli i idź do etykieta1).
continue etykieta powoduje przerwanie bieżącej iteracji pętli przejście do miejsca oznaczonego etykietą. Następnie następuje ponowne wejście do pętli znajdującej się tuż za etykietą!
Wynik
WynikWidać różnicę?
char charAt(int index) int compareTo(String anotherString)
{<0;0;>0} boolean endsWith(String suffix) int indexOf(int ch, int fromIndex) int indexOf(String str) int length() String replace(char oldChar, char newChar) String substring(int beginIndex) String toLowerCase() String toUpperCase() String valueOf( … )
System.out.println("abc");
String cde = "cde";
System.out.println("abc" + cde);
String c = "abc".substring(2,3);
String d = cde.substring(1, 2);
int dlugosc = cde.length();
boolean nextBoolean()
double nextDouble()
float nextFloat()
int nextInt()
int nextInt(int n) – uwaga na zakres: [0;n)
long nextLong()
void setSeed(long seed)
// Stworzenie obiektu klasy Random, który posłuży do losowania liczb
Random r = new Random();
// Losowanie liczby z zakresu [0,10] do zmiennej a.
int a = r.nextInt(11); // deklaracja i definicja zmiennej
// Losowanie liczby z zakresu [-10,22] i wyświetlenie jej na konsolę.
System.out.println( r.nextInt(33)-10 );
/* 33, bo w przedziale [-10,22] są 33 liczby i -10 bo to najmniejsza
liczba w zakresie. */
Tablica jest rodzajem struktury danych będącą zestawem elementów tego samego typu. Dostęp do każdego z tych elementów można uzyskać za pomocą jego indeksu w postaci liczny int. Jeśli np. a będzie tablicą liczb całkowitych to a[i] jest i-tym elementem tej tablicy. Deklaracja zmiennej tablicowej polega na określeniu typu tablicy i nazwy zmiennej.
Int[] a;
Int [] a = new int [100]; Powyższa instrukcja tworzy tablicę, w której można zapisać 100 liczb całkowitych.
Elementy tablicy numerowane są od 9. Tablicę można zapełnić wartościami np. za pomocą pętli:
Int [] a = new int [100];
For (int i=0; i100; i++)
A[i]=i
Próba dostępu do elementu o indeksie 100 lub większym w tablicy zawierającej 100 elementów zakończy się spowodowaniem wyjątku ArrayIndexOutOfBounds (indeks spoza przedziału tablicy).
Informację o liczbie elementów tablicy można uzyskać za pomocą odwołania nazwaTablicy.length
Rozmiaru tablicy nie można zmienić !Int [] a = new int [100];
For (int i=0; i<a.length; i++)
A[i]=i
Służą do reprezentacji tabel i innych bardziej złożonych struktur danych. Aby uzyskać dostęp do elementu tablicy wielowymiarowej należy użyć więcej niż jednego indeksu.
Int [][] a = new int [4][2];
Int [][] tablica =
{
{16,3}, {9,7}, {6,3}, {5,12}
}
System.out.println("\nTablica poszarpana");
int [][] tabSZ = new int[10][];
// 8 wierszy, ?? kolumn
for(int i=0; i<tabSZ.length; i++)
tabSZ[i] = new int[i];
/*w każdym wierszu tyle kolumn jaki jest numer wiersza */
//Wyświetlanie
for(int i=0; i<tabSZ.length; i++){ // "Przejście" przez
wiersze
for(int j=0; j<tabSZ[i].length; j++)//"Przejście" przez
kolumny System.out.print(tabSZ[i][j]+" ");
System.out.println();
// Koniec kolumn w danym wierszu - nowa linia
}
Tablice można kopiować jedną instrukcją:arraycopy(Object src, int srcPos,
Object dest, int destPos, int length)
Co otrzymamy po wykonaniu takiego czegoś?char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f',
'e', 'i', 'n', 'a', 't', 'e', 'd' };
char[] copyTo = new char[7];
System.arraycopy(copyFrom, 2, copyTo, 0, 7);
System.out.println(new String(copyTo));
String napis = „To jest napis”;
napis.length() - to jest funkcja zwracając nam długość
Jej definicja mogła by wyglądać tak:
int length(String arg)
Jeśli mamy jakiś kawałek kodu, który często wykorzystujemy
Jeśli często obliczamy lub potrzebujemy dostać efekt wywołania jakiegoś fragmentu kodu
int dodaj( int l1, int l2 )
{
int wynik;
wynik = l1 + l2;
return wynik;
}
Funkcja zwraca wartość typu int
Funkcja nazywa się „dodaj”
Funkcja przyjmuje dwa parametry typu int: l1, l2
Funkcja zwraca nam sumę tych dwóch parametrów
package jbPack;import java.util.*;public class Program { // Gdzieś tu muszą być funkcje
public static void main(String[] args) {
// Tutaj nie
} // Ale tutaj tak}
package jbPack;import java.util.*;public class Program {
int dodaj( int l1, int l2 ) { int wynik; wynik = l1 + l2; return wynik;
};
public static void main(String[] args) { System.out.println(„Suma 4 i 5 wynosi: „ + dodaj(4,5));} }
Jakaś funkcja:
void głupiaFunkcja( int arg ){
arg += 1;
}
Gdzieś w main():
int wartosc = 10;
System.out.println( wartosc );
głupiaFunkcja( wartosc );
System.out.println( wartosc );
Wynikiem będzie dwukrotne wyświetlenie 10!
8. Napisz funkcję, która w parametrze otrzymuje tablicę dwuwymiarową (o nieznanym rozmiarze) a w wyniku zwraca liczbę elementów dodatnich w tej tablicy.
9. Napisz funkcję, która dostaje trzy parametry: dwa znaki zn1, zn2 i jedną liczbę zak [4;8]. Funkcja ma zwrócić napis o długości zak i losowo wypełnioną znakami zn1, zn2.
10. Napisz funkcję, która dostaje jeden parametr intdzielnik. Funkcja ma wypisywać na ekran wszystkie liczby mniejsze od 100, a podzielne przez dzielnik
Schemat blokowy
ObliczeniaWejście / Wyjście
Start
Alterna-tywa
Koniec
Program wczytujący liczby tak długo dopóki nie zostanie podana liczba 0. Program podaje na końcu sumę tak wczytanych liczb.
BEGIN
Read(x);
Read(y);
suma := x + y;
Write(suma);
END.
BEGINRead(dzielna);Read(dzielnik);IF(dzielnik != 0) THEN
BEGINiloraz := dzielna / dzielnikwrite(‘Wynik wynosi’,
iloraz);END
ELSEwrite(‘Błąd dzielenia przez
0!’);
END
W celu wyświetlenia wartości zmiennych korzystamy ze znanej już instrukcji:
System.out.println(zmienna_do_wyswietlenia);Przykładowo aby wyświetlić zawartość zmiennej suma:int suma = 100;System.out.println(suma);
Aby wyświetlić jakiś napis, podajemy go jako argument w/winstrukcji opatrzony w cudzysłów:
System.out.println(”Jakiś napis do wyświetlenia”);
Można połączyć wyświetlanie napisu i wartości zmiennych za pomocą operatora łączenia +:
System.out.println(”Wartość zmiennej suma wynosi” + suma);
Aby wyświetlić zawartość dwóch zmiennych w jednej linii można posłużyć się instrukcją:
System.out.print(zmienna);Przykładowo:int zawodnik = 1;double czas = 33;System.out.print(” Zawodnik nr ”);System.out.print(zawodnik);System.out.print(” miał czas ”);System.out.println(czas);
LUB użyć operatora łączenia +
System.out.println(” Zawodnik nr ” + zawodnik + ” miał czas ” + czas);
Wszystkie sekwencje znaków specjalnych przedstawionych przy okazji omówienia typu char działają również na łańcuchach znaków.
\n – nowa linia \t – tabulacja \b – backspace \r – powrót karetki \” – cudzysłów \’ – znak apostrofu \\ - lewy ukośnik (ang. backslash)
Aby wyświetlić tekst w 3 liniach wykorzystujemy sekwencję \n:System.out.println(„To\njest teskt\nw 3 liniach”);
boolean hasNext() - zwraca wartość True jeśli następna wartość dowolnego typu jest dostępny do odczytu.string next() - zwraca odczytaną następną wartość dowolnego typu.boolean hasNextInt() - zwraca wartość True jeśli następna wartość jest typu Integer.int nextInt() - zwraca następną odczytaną wartość typu int.boolean hasNextDouble() - zwraca wartość True jeśli następna wartość jest typu Double.double nextDouble() - zwraca następną odczytaną wartość typu Double.
Ryzykowne operacje zawiera się w blokach „try”
Gdy coś złego się stanie – program wygeneruje wyjątek
Ów wyjątek jest łapany (stąd „catch”) i może zostać „obsłużony”
Dzięki temu program rzadziej się wysypuje Blok „finally” wykona się zawsze, niezależnie
od błędów Literatura: http://www.javaworld.com/jw-07-
1998/jw-07-exceptions.html
1. Pamiętaj, że buforowane wyjście należy czyścić, a pliki – zamykać!
2. Klasa PrintWriter , jak również wszystkie inne poznane, mają wiele użytecznych metod, warto je poznać.
3. Za pomocą klasy File możesz zmieniać strukturę katalogów: tworzyć, kasować, odczytywać.
4. FileReader może bezpośrednio odczytywać plik, ale robi to bardzo wolno.
5. Parsowanie pliku tekstowego jest zadaniem wymagającym wiedzy o tym jak on jest zbudowany.
Obiekt A
Obiekt B
Obiekt C
Obiekt D
Załóżmy, że mamy napisać program o następującej specyfikacji:
1. Program wyświetla kwadrat, okrąg i trójkąt.
2. Gdy użytkownik kliknie na jakiś kształt –tenże zaczyna świecić na niebiesko.
3. Jednocześnie – odgrywana jest muzyczka w .mp3, specyficzna do każdego z kształtów.
Proceduralnie Obiektowo
Kwadrat
zmieńKolor() {// tu będzie kod do zmiany koloru}
odtwórzDźwięk() {/* odegraj dźwięk*/}
Trójkąt
zmieńKolor() {// tu będzie kod do zmiany koloru}
odtwórzDźwięk() {/* odegraj dźwięk*/}
Okrąg
zmieńKolor() {// tu będzie kod do zmiany koloru}
odtwórzDźwięk() {/* odegraj dźwięk*/}
Dodajemy nowy kształt:
Dodamy nowy kształt, ale tenże będzie odgrywał muzyczkę .wav
Proceduralnie Obiektowo
Kwadrat
zmieńKolor() {// tu będzie kod do zmiany koloru}
odtwórzDźwięk() {/* odegraj dźwięk mp3*/}
Trójkąt
zmieńKolor() {// tu będzie kod do zmiany koloru}
odtwórzDźwięk() {/* odegraj dźwięk mp3*/}Okrąg
zmieńKolor() {// tu będzie kod do zmiany koloru}
odtwórzDźwięk() {/* odegraj dźwięk mp3*/}
Dziwnokształtny
zmieńKolor() {// tu będzie kod do zmiany koloru}
odtwórzDźwięk() {/* odegraj plik .wav*/}
• Zmieniamy przetestowany już kod i być może coś się zepsuje
Kształt ma mieć inny kolor po kliknięciu:
A do tego kolor ten ma być zmienny,
podawany w parametrze i do
tego gradientowy
Proceduralnie Obiektowo
Kwadrat
zmieńKolor() {// tu będzie kod do zmiany koloru}
odtwórzDźwięk() {/* odegraj dźwięk mp3*/}
Trójkąt
zmieńKolor() {// tu będzie kod do zmiany koloru}
odtwórzDźwięk() {/* odegraj dźwięk mp3*/}Okrąg
zmieńKolor() {// tu będzie kod do zmiany koloru}
odtwórzDźwięk() {/* odegraj dźwięk mp3*/}
Dziwnokształtny
kolor1;kolor2;
zmieńKolor() {// tu będzie kod do zmiany koloru z gradientem}
odtwórzDźwięk() {/* odegraj plik .wav*/}
• Zmieniamy przetestowany kod• Kolejne if-y…
Kwadrat
zmieńKolor() {// tu będzie kod do zmiany koloru}
odtwórzDźwięk() {/* odegraj dźwięk mp3*/}
Trójkąt
zmieńKolor() {// tu będzie kod do zmiany koloru}
odtwórzDźwięk() {/* odegraj dźwięk mp3*/}
Okrąg
zmieńKolor() {// tu będzie kod do zmiany koloru}
odtwórzDźwięk() {/* odegraj dźwięk mp3*/}
Dziwnokształtny
kolor1;kolor2;
zmieńKolor() {// tu będzie kod do zmiany koloru z gradientem}
odtwórzDźwięk() {/* odegraj plik .wav*/}
Kwadrat TrójkątOkrąg Dziwnokształtny
Kształt
zmieńKolor() {// tu będzie kod do zmiany koloru}
odtwórzDźwięk() {/* odegraj dźwięk*/}
Kwadrat TrójkątOkrąg Dziwnokształtny
kolor1;kolor2;
zmieńKolor() {// tu będzie kod do zmiany koloru z gradientem}
odtwórzDźwięk() {/* odegraj plik .wav*/}
Kształt
zmieńKolor() {// tu będzie kod do zmiany koloru}
odtwórzDźwięk() {/* odegraj dźwięk*/}
Klasa będzie swoistym „projektem” obiektów tworzonych na jej podstawie.
To co obiekt wie = atrybuty
To co obiekt potrafi = metody
Nazwa klasy
To co obiekt wie…
To co obiekt potrafi…
Pies
To co obiekt wie…
To co obiekt potrafi…
Telewizor
To co obiekt wie…
To co obiekt potrafi…
Programowanie zorientowane obiektowo pozwala na dodawanie funkcjonalności bez zmiany uprzednio przetestowanego kodu.
Wszystko w Javie jest obiektem (znajduje się wewnątrz klasy) Klasa opisuje sposób na stworzenie obiektu danego typu. Taki
schemat. Obiekt potrafi robić różne rzeczy. Niekoniecznie interesuje nas
w jaki sposób to robi. Obiekt wie o niektórych rzeczach i robi specyficzne rzeczy Rzeczy które obiekt wie o sobie nazywane atrybutami.
Reprezentują stan obiektu. Rzeczy które obiekt robi nazywane są metodami. Reprezentują
zachowanie obiektu. Gdy tworzysz klasę, zwykle powinieneś też stworzyć oddzielną
klasę do testowania w której stworzysz obiekty poprzedniej klasy.
Klasa może dziedziczyć atrybuty i metody z superklas(bardziej ogólnych klas)
Programy w Javie to po prostu gadanie obiektów do siebie
public – dostęp do atrybutu z każdego miejsca
Private – dostęp do atrybutu tylko z wnętrza klasy bazowej/obiektu bazowego
Protected – dostęp do atrybutu tylko z wnętrza klasy bazowej lub niższej w hierarchii dziedziczenia
W Javie wszystko co napiszemy dziedziczy po klasie Object. I tam jest taka fajna metoda toString(). Ale nie działa ona tak jak chcemy… No to nic trudnego!
Java dba, abyśmy się nie pomylili…
No to co to ten static?
Pakiety z hierarchii java i javax (dodatki wprowadzone wpóźniejszych wersjach) należą do podstawowego zestawuklas rozprowadzanych jako Java.Zestaw ten jest dostępny w dwóch wersjach:•JRE (Java Runtime Environment) – udostępnia kod bajtowywszystkich klas standardowych i wirtualną maszynę doich uruchamiania,•zaś JDK (Java Development Kit) dodatkowo udostępniaźródła tych klas oraz dodatkowe narzędzia takie jakkompilator, paker czy debuger.Podział ten wprowadzono dlatego, że użytkownik Javy douruchamiania programów potrzebuje tylko JRE, natomiastdo programowania działających aplikacji potrzeba jużJDK.
Specyfikatory dostępu pełnią rolę w Javie bardzo ważną, pozwalają bowiem na określenie swoistego rodzaju praw dostępu do składowych klas, a także do samych klas.
PublicznyPrywatnyChronionypakietowy
Domyślnie, jeżeli przed składową klasy niewystępuje żadne określenie, dostęp jestpakietowy, co oznacza, że dostęp do tejskładowej mają wszystkie klasy pakietu, wktórym się one znajdują. Dostęp publicznyjest określany słowem „public”, dostępprywatny słowem „private” a chronionysłowem „protected”.
Pakiet JDK (konsola)
NetBeans
Eclipse
1. Zainstaluj JDK:◦ http://www.oracle.com/technetwork/java/javase/
downloads/jdk6-jsp-136632.html
2. Zainstaluj NetBeans:◦ http://netbeans.org/downloads/start.html?platfor
m=windows&lang=en&option=javase
Książki: ◦ Kathy Sierra, Bert Bates: Head First Java. Edycja
polska (Rusz głową!)
◦ C.S.Horstmannm G. Cornell: Java. Podstawy, wyd. VIII; Rozdziały 1-3, 7
Dokumentacja JDK:◦ http://www.oracle.com/technetwork/java/javase/d
ocumentation/index.html
◦ Zwłaszcza tutoriale
Dokumentacja NetBeans:◦ http://netbeans.org/kb/index.html