java_02.pdf

(303 KB) Pobierz
Microsoft Word - roz_2.doc
Jacek Rumi ń ski – J ę zyk JAVA – Rozdzia ł 2
Rozdział 2 Konstrukcja kodu
2. 1 Metody konstrukcji kodu programów
2. 1 . 1 Litera ł y
2. 1 .2 Identyfikatory i s ł owa kluczowe.
2. 1 .3 Zmienne
2. 1 .4 Typy danych
2. 1 .5 Operatory
2. 1 .6 Instrukcje steruj ą ce
2.2 Informacja praktyczna – wy ś wietlanie polskich znaków w
konsoli platformy Javy
2.1 Metody konstrukcji kodu programów
Zapoznanie się z ogólną metodologią tworzenia programów w Javie pozwala
na wejście w szczegółowy opis języka i tworzenie przykładowych aplikacji. Warto
jednak najpierw określić szczegółowe zasady pisania kodu oraz stosowania
komentarzy.
Czytelne pisanie kodu programu ułatwia w znaczny sposób unikania błędów oraz
upraszcza przyswajalność kodu. Podstawą tworzenia kodu w sposób czytelny jest
grupowanie kodu w bloki, wyróżnialne wcięciami. Blokiem nazwiemy zestaw kodu
ujęty w nawiasy klamrowe:
np.:
i instrukc j ja_grupu j j ą ąca{
kod..
kod..
} // kon i iec i instrukc j ja_grupu j j ą ąca
Instrukcja grupująca rozpoczyna blok kodu. Instrukcją grupującą może być klasa,
metoda, instrukcja warunkowa, instrukcja pętli, itp. Klamra otwierająca blok znajduje
się bezpośrednio po instrukcji grupującej. Pierwsza fragment kodu po klamrze
otwierającej umieszcza się w nowej linii. Każda linia bloku jest przesunięta względem
pierwszego znaku instrukcji_grupującej o stałą liczbę znaków. Blok kończy się
umieszczeniem klamry zamykającej w nowej linii na wysokości pierwszego znaku
instrukcji grupującej. Blok warto kończyć komentarzem umożliwiającym identyfikację
bloku zamykanego przez daną klamrę.
W konstrukcji programu należy pamiętać, że język Java rozróżnia małe i wielkie
litery, Oznacza to, że przykładowe nazwy zmiennych „Jedi” oraz „jedi” nie są
równoważne i określają dwie różne zmienne. Dodatkowe elementy stylu
programowania, o których należy pamiętać to:
- stosowanie nadmiarowości celem poprawienia czytelności kodu np.:
int a=(c * 2) + (b / 3); zamiast int a=c* 2 + b/ 3;
- stosowanie separatorów np.:
int a=(c * 2) + (b / 3); zamiast int a=(c*2)+(b/3);
- konsekwencja w oznaczaniu, np.:
int[] n;
int n[];
definicja jednoznaczna lecz różna forma.
2-3
Jacek Rumi ń ski – J ę zyk JAVA –
Jacek Rumi ń ski – J ę zyk JAVA – Rozdzia ł 2
Ważnym elementem czytelnej konstrukcji kodu jest używanie dokumentacji kodu za
pomocą komentarzy. W Javie stosuje się trzy podstawowe typy komentarza:
- komentarz liniowy:
// miejsce na komentarz do końca linii
- komentarz blokowy:
/*
miejsce na komentarz w dowolnym miejscu bloku
*/
- komentarz dokumentacyjny
/**
miejsce na komentarz w dowolnym miejscu bloku
*/
Komentarz liniowy wykorzystuje się do krótkiego oznaczania kodu np. interpretacji
zmiennych, oznaczania końca bloku, itp. Komentarz blokowy stosuje się do
chwilowego wyłączania kodu z kompilacji oraz do wprowadzania szerszych opisów
kodów. Komentarz dokumentacyjny używa się do tworzenia dokumentacji kodu
polegającej na opisie klas i metod, ich argumentów, dziedziczenia, twórców kodu, itp.
Komentarz dokumentacyjny w Javie może zawierać dodatkowe elementy takie jak:
@author - umożliwia podanie autora kodu,
@version - umożliwia podanie wersji kodu,
@see - umożliwia stworzenie referencji,
itp.
Pełny zestaw elementów formatujących znajduje się w opisie narzędzi javadoc ,
tworzących dokumentację na podstawie kodu i komentarza dokumentacyjnego.
Należy pamiętać, że standardowo zostaną opisane tylko elementy kodu oznaczane
jako public i protected .
O czym należy pamiętać używając komentarzy w Javie? Otóż o tym, że komentarz
jest zastępowany spacją, co oznacza że kod:
double pi = 3.14/*kto by to wszystko zapamiętał*/56;
jest interpretowany jako double pi = 3.14 56; co jest błędem.
Przykład 2.1
// Jedi3.java :
/**
RycerzJedi określa klasę rycerzy Jedi
@author Jacek Rumiński
@version 1.0
*/
class RycerzJedi{
/** nazwa - określa nazwę rycerza Jedi */
String nazwa;
/** kolor_miecza - określa kolor miecza rycerza Jedi */
String kolor_miecza;
/** konstruktor umożliwia podanie właściwości obiektu */
RycerzJedi(String nazwa, String kolor_miecza){
this.nazwa=nazwa;
2-4
Jacek Rumi ń ski – J ę zyk JAVA –
Jacek Rumi ń ski – J ę zyk JAVA – Rozdzia ł 2
this.kolor_miecza=kolor_miecza;
}
/** metoda opis wyświetla zestaw właściwości rycerza Jedi */
void opis(){
System.out.println("Rycerz "+nazwa+ " ma "+kolor_miecza+" miecz.");
}
}// koniec class RycerzJedi
/**
Jedi3 określa klasę główna aplikacji
@author Jacek Rumiński
@version 1.0
*/
public class Jedi3{
public static void main(String args[]){
RycerzJedi luke = new RycerzJedi("Luke", "niebieski");
RycerzJedi ben = new RycerzJedi("Obi-wan","biały");
luke.opis();
ben.opis();
}// koniec public static void main(String args[])
}// koniec public class Jedi3
Tworząc dokumentację HTML dla kodu z przykładu 2.1 należy w następujący sposób
wykorzystać narzędzie javadoc :
j j
a
v
a
d
o
c
-
p
r i i
v
a
t
e
-
a
u
t
h
o
r
-
v
e
r
s i i
o
n
J
e
d i i
3
. j j
a
v
a
g
d
z i i
e
:
-
p
r i i
v
a
t
e
p
o
w
o
d
u j j
e
,
ż ż
e
w
y
g
e
n
e
r
o
w
a
n
a
z
o
s
t
a
n i i
e
d
o
k
u
m
e
n
a
c j j
a
d l l
a
w
s
z
y
s
t
k i i
c
h
t
y
p
ó
w
e l l
e
m
e
n
t
ó
w
p
r i i
v
a
t
e
,
p
r
o
t
e
c
t
e
d
i i
p
u
b l l i i
c
;
-
a
u
t
h
o
r
p
o
w
o
d
u j j
e
,
ż ż
e
w
y
g
e
n
e
r
o
w
a
n
a
z
o
s
t
a
n i i
e
i i
n
f
o
r
m
a
c j j
a
o
a
u
t
o
r
z
e
,
-
v
e
r
s i i
o
n
p
o
w
o
d
u j j
e
,
ż ż
e
w
y
g
e
n
e
r
o
w
a
n
a
z
o
s
t
a
n i i
e
i i
n
f
o
r
m
a
c j j
a
o
w
e
r
s j j i i
.
W rezultacie otrzymuje się szereg stron w formacie HTML, wraz ze stroną startową
index.html.
2.1.1 Literały
Literały oznaczają nazwy zmiennych, których typ oraz wartości wynikają z
zapisu. Przykładowo „Niech moc będzie z Wami!” jest literałem o typie łańcuch
znaków (String) i wartości Niech moc będzie z Wami! . Inne przykłady to: true, false,
12, 0.1, ‘e’, 234L, 0.34f, itp. Tłumaczenie kodu z literałami jest pobieraniem
konkretnych wartości typu łańcuch znaków, znak, liczba rzeczywista, liczba
całkowita, wartość logiczna (true lub false). Uwaga, wartości logiczne nie są
jednoznaczne w Javie z wartościami liczbowymi np. typu 0 i 1.
2.1.2 Identyfikatory i słowa kluczowe.
2-5
Jacek Rumi ń ski – J ę zyk JAVA –
t
Jacek Rumi ń ski – J ę zyk JAVA – Rozdzia ł 2
Stworzenie programu wymaga znajomości zasad tworzenia identyfikatorów
oraz podstawowych słów kluczowych. Zasady tworzenia identyfikatorów określają
reguły konstrukcji nazw pakietów, klas, interfejsów, metod i zmiennych. Identyfikatory
są więc elementami odwołującymi się do podstawowych elementów języka.
Identyfikator tworzy się korzystając z liter, liczb, znaku podkreślenia „_” oraz znaku
„$”. Tworzona nazwa nie może się jednak zaczynać liczbą. Pierwszym znakiem
może być litera bądź symbol podkreślenia „_” lub „$”. W Javie rozróżnialne są wielkie
i małe litery w nazwach, tak więc nazwy: Jedi i jedi oznaczać będą dwa różne
identyfikatory!
Słowa kluczowe to identyfikatory o specjalnym znaczeniu dla języka Java.
Identyfikatory te są już zdefiniowane dla języka i posiadają określone znaczenie w
kodzie programu. Wszystkie więc nazwy w kodzie źródłowym będące poza
komentarzem i i nie są stworzonymi przez programistę identyfikatorami są
traktowane jako słowa kluczowe i ich znaczenie jest poszukiwane przez kompilator w
czasie kompilacji. Słowa kluczowe (nazwy) są więc zarezerwowane dla języka i
programista nie może używać tych nazw dla konstrukcji własnych identyfikatorów.
Następujące słowa kluczowe są zdefiniowane w Javie:
abstract - deklaruje klase lub metodę jako abstrakcyjną,
boolean - deklaruje zmienną lub wartość zwracaną jako wartość logiczną,
break - przerwanie,
byte - deklaruje zmienną lub wartość zwracaną jako wartość byte,
case - określa opcję w instrukcji wyboru switch,
catch - obsługuje wyjątek,
char - deklaruje zmienną lub wartość zwracaną jako wartość znaku,
class - oznacza początek definicji klasy,
const ,
continue - przerywa pętle rozpoczynając jej kolejny cykl,
default - określa domyślne działąnie dla instrukcji wyboru switch,
do - rozpoczyna blok instrukcji w pętli while,
double - deklaruje zmienną lub wartość zwracaną jako wartość rzeczywistą o
podwójnej precyzji,
else - określa kod warunkowy do wykonania jeśli nie jest spełniony warunek w
instrukcji if,
extends - określa, że definiowana klasa dziedziczy z innej,
final - określa pole, metodę lub klasę jako stałą,
finally - gwarantuje wykonywalność blok kodu,
float - deklaruje zmienną lub wartość zwracaną jako wartość rzeczywistą,
for - określa początek pętli for,
goto ,
if - określa początek instrukcji warunkowej if,
implements - deklaruje, że klasa korzysta z danego interfejsu,
import - określa dostęp do pakietów i klas,
instanceof - sprawdza czy dany obiekt jest wystąpieniem określonej klasy,
int - deklaruje zmienną lub wartość zwracaną jako wartość całkowitą 4 bajtową,
interface - określa początek definicji interfejsu,
long - deklaruje zmienną lub wartość zwracaną jako wartość całkowitą 8 bajtową,
native - określa, że metoda jest tworzona w kodzie danej platformy (np. C),
new - wywołuje nowy obiekt,
2-6
Jacek Rumi ń ski – J ę zyk JAVA –
Jacek Rumi ń ski – J ę zyk JAVA – Rozdzia ł 2
package - określa nazwę pakietu do którego należy dana klasa,
private - deklaruje metodę lub pole jako prywatne,
protected - deklaruje metodę lub pole jako chronione,
public - deklaruje metodę lub pole jako dostępne,
return - określa zwracanie wartości metody,
short - deklaruje zmienną lub wartość zwracaną jako wartość całkowitą 2 bajtową,
static - deklaruje pole, metodę lub kod jako statyczny,
super - odniesienie do rodzica danego obiektu,
switch - początek instrukcji wyboru,
synchronized - oznacza fragment kodu jako synchronizowany,
this - odniesienie do aktualnego obiektu,
throw - zgłasza wyjątek,
throws - deklaruje wyjątek zgłaszany przez metodę,
transient - oznacza blokadę pola przed szeregowaniem,
try - początek bloku kodu, który może wygenerować wyjątek,
void - deklaruje, że metoda nie zwraca żadnej wartości,
volatile - ostrzega kompilator, że zmienna może się zmieniać asynchronicznie,
while - początek pętli.
przy czym słowa kluczowe const (stała) oraz goto (skok do) są zarezerwowane lecz
nie używane.
2.1.3 Zmienne
Przetwarzanie informacji w kodzie programu wymaga zdefiniowania i pracy ze
zmiennymi. Zmienne są to elementy programu wynikowego reprezentowane w
kodzie źródłowym przez identyfikatory, literały i wyrażenia. Zmienne są zawsze
określonego typu. Typ zmiennych (typ danych) definiowany jest w Javie przez typy
podstawowe i odnośnikowe (referencyjne). W celu pracy ze zmiennymi należy
zapoznać się z możliwymi typami danych oferowanymi w środowisku Java.
2.1.4 Typy danych
Podstawowe typy danych definiowane w specyfikacji Javy charakteryzują się
następującymi właściwościami:
1. Typy danych są niezależne od platformy sprzętowej (w C i C++ często inaczej
interpretowane były zmienne zadeklarowane jako dany typ, np. dla zmiennej typu int
możliwe były reprezentacje w zależności od platformy 2 lub 4 bajtowe. Konieczne
było stosowanie operatora sizeof w celu uzyskania informacji o rozmiarze zmiennej) i
ich rozmiar jest stały określony w specyfikacji.
2. Konwersja ( casting - rzutowanie) typów danych jest ograniczona tylko dla liczb.
Nie można dokonać więc konwersji wprost pomiędzy typem znakowym a liczbą, czy
pomiędzy typem logicznym a liczbą.
3. Wszystkie typy liczbowe są przechowywane za znakiem, np. byte : -128..0..127.
Nie ma typów oznaczanych w innych językach jako unsigned , czyli bez znaku.
4. Wszystkie podstawowe typy danych są oznaczane z małych liter.
5. Nie istnieje w gronie podstawowych typów danych typ łańcucha znaków.
6. Istnieją klasy typów danych oznaczanych z wielkich liter, umożliwiające konwersję
i inne operacje na obiektach tych klas, a przez to na podstawowych typach danych.
2-7
Jacek Rumi ń ski – J ę zyk JAVA –
Zgłoś jeśli naruszono regulamin