Programowanie obiektowe /Java/
Laboratorium nr 2
1
Typy podstawowe i obiektowe
Nazwa typu
Rozmiar
Typ obiektowy
boolean
–
Boolean
char
16 bitów
Character
byte
8 bitów
Byte
short
16 bitów
Short
int
32 bity
Integer
long
64 bity
Long
float
32 bity
Float
double
64 bity
Double
void
–
Void
Tabela 1: Typy (Thinking in Java, Bruce Eckel, Wydanie IV, Helion, 2006)
Wszystkie typy numeryczne są typami ze znakiem. Klasa BigInteger służy do reprezentacji typu całkowi-
tego dowolnej precyzji. KlasaBigDecimal służy do reprezentacji liczb stałoprzecinkowych dowolnej precyzji.
Klasa String służy do przechowywania teksów np.
String tekst1 = "Tekst";
String tekst2 = new String("Tekst");
Łączenie tekstów, operator + np.
String tekst3 = tekst1 + tekst2;
2
Wyświetlanie na konsolę
System.out.print("Tekst ");
System.out.println("Tekst ");
System.out.printf("%s", "Tekst ");
Symbol nowej linii:
public static String newline = System.getProperty("line.separator");
Co pojawi się na ekranie po uruchomieniu przykładu?
System.out.println(1 + 1);
System.out.println("" + 1 + 1);
3
Podstawowe operatory
Podstawowe operatory: dodawanie (+), odejmowanie (−), mnożenie (∗), dzielenie (/) oraz reszta z dzie-
lenia (%). Przykład:
1
package
pl.kielce.tu.lab2;
2
3
public class
DBZ {
4
public static void
main(String args[]) {
5
Integer a = 0;
6
Integer b = 0;
7
Integer c = -1;
8
Integer d = 1;
1
9
System.out.println(
"a / b = "
+ (a / b));
10
System.out.println(
"a / c = "
+ (a / c));
11
System.out.println(
"a / d = "
+ (a / d));
12
System.out.println(
"c / a = "
+ (c / a));
13
System.out.println(
"c / d = "
+ (c / d));
14
System.out.println(
"d / a = "
+ (d / a));
15
System.out.println(
"d / c = "
+ (d / c));
16
}
17
}
Przykład 1: src/pl/kielce/tu/lab2/DBZ.java {link}
1
package
pl.kielce.tu.lab2;
2
3
public class
NaN {
4
public static void
main(String args[]) {
5
Float a = 0.0F;
6
Float b = 0.0F;
7
Float c = Float.NEGATIVE_INFINITY;
8
Float d = Float.POSITIVE_INFINITY;
9
System.out.println(
"a / b = "
+ (a / b));
10
System.out.println(
"a / c = "
+ (a / c));
11
System.out.println(
"a / d = "
+ (a / d));
12
System.out.println(
"c / a = "
+ (c / a));
13
System.out.println(
"c / d = "
+ (c / d));
14
System.out.println(
"d / a = "
+ (d / a));
15
System.out.println(
"d / c = "
+ (d / c));
16
}
17
}
Przykład 2: src/pl/kielce/tu/lab2/NaN.java {link}
Co wyświetli się na konsoli?
4
Standardy nazewnictwa
W Javie nazwy pakietów powinny być pisane małymi literami. W nazwie klasy pierwsza litera powinna
być wielka. Jeżeli nazwa klasy składa się z kliku słów, to pisane są one łącznie. Pierwsza litera każdego słowa
powinna być wielka. Nie stosuje się znaku podkreślenia do rozdzielenie słów np. M ojaSuperKlasa. Od tej
zasady istnieje kilka wyjątków. W przypadku metod, atrybutów (pól) i nazw referencji stosuje się taki sam
styl poza tym, że pierwsza litera jest mała np. licznikP arzystych, void zwiekszLicznik().
5
Komentarze
//komentarz znajdujący się w jednej linii
/* komentarz znajdujący się
w wielu liniach */
6
Definicje
Pakiet – grupa klas zebranych razem we wspólnej przestrzeni nazw. Nazwa pakietu powinna być odwróco-
ną nazwą domeny internetowej autora np. pl.kielce.tu.nowak. W jednostce kompilacji (pliku) może znajdować
się tylko jedna klasa publiczna. Nazwa klasy publicznej musi dokładnie pasować do nazwy pliku, w którym
się znajduje. W pliku mogą znajdować inne także inne klasy niepubliczne. Konstruktor – specjalna metoda
automatycznie wywoływana podczas tworzenia obiektu służąca do zainicjowania obiektu. Konstruktor bezar-
gumentowy (domyślny) – konstruktor nie przyjmujący żadnych parametrów. W Javie nazwa konstruktora jest
taka sama jak nazwa klasy. Destruktor – specjalna metoda automatycznie wywoływana podczas niszczenia
obiektu. W Javie nie istnieją destruktory. Metody niestatyczne wywoływane są na rzecz obiektu. Metody
2
statyczne (słowo kluczowe static) mogą być wywoływane na rzecz klasy bez konieczności tworzenia obiektów
danej klasy. Słowo kluczowe this – referencja do obiektu, na rzecz którego dana metoda została wywołana.
Może być stosowane tylko wewnątrz metod niestatycznych.
Przykład:
1
/* Pakiet */
2
package
pl.kielce.tu.lab2;
3
4
/* Klasa */
5
public class
Samochod {
6
7
/* Atrybut (pole) */
8
int
iloscPaliwa;
9
10
/* Atrybut statyczny (pole statyczne) */
11
static int
licznikSamochodow = 0;
12
13
/* Konstruktor bezargumentowy (domyślny) */
14
public
Samochod() {
15
this
.iloscPaliwa = 100;
16
licznikSamochodow++;
17
}
18
19
/* Konstruktor */
20
public
Samochod(
int
iloscPaliwa) {
21
this
.iloscPaliwa = iloscPaliwa;
22
licznikSamochodow++;
23
}
24
25
/* Metoda niestatyczna */
26
void
zatankujPaliwo(
int
paliwo) {
27
this
.iloscPaliwa += paliwo;
28
}
29
30
/* Metoda niestatyczna */
31
int
sprawdzPaliwo() {
32
return this
.iloscPaliwa;
33
}
34
35
/* Metoda statyczna */
36
static int
podajLiczbeSamochodow() {
37
return
licznikSamochodow;
38
}
39
40
/* Metoda statyczna */
41
public static void
main(String[] args) {
42
// wywołanie konstruktora bezargumentowego (domyślnego)
43
Samochod s1 =
new
Samochod();
44
45
// wywołanie metody niestatycznej
46
int
p1 = s1.sprawdzPaliwo();
47
System.out.println(
"1) S1 ma "
+ p1 +
" litrow paliwa"
);
48
49
// wywołanie metody niestatycznej z argumentem
50
s1.zatankujPaliwo(10);
51
52
// odczytanie wartości atrybutu (pola)
53
int
p2 = s1.iloscPaliwa;
54
System.out.println(
"2) S1 ma "
+ p2 +
" litrow paliwa"
);
55
56
// odczytanie wartości atrybutu statycznego (pola statycznego)
3
57
int
l1 = Samochod.licznikSamochodow;
58
System.out.println(
"3) Mamy "
+ l1 +
" samochod(y)"
);
59
60
// wywołanie konstruktora
61
Samochod s2 =
new
Samochod(50);
62
63
// wywołanie metody niestatycznej
64
s2.zatankujPaliwo(10);
65
66
// wywołanie metody statycznej
67
int
l2 = Samochod.podajLiczbeSamochodow();
68
System.out.println(
"4) Mamy "
+ l2 +
" samochod(y)"
);
69
}
70
}
Przykład 3: src/pl/kielce/tu/lab2/Samochod.java {link}
7
Przykładowa treść laboratorium
Proszę stworzyć oraz uruchomić aplikację zgodną ze specyfikacją podaną przez prowadzącego np. napisać
klasę realizującą funkcję prostego kalkulatora (+, -, *, /). Klasa powinna w zmiennej statycznej przechowywać
informacje o liczbie wykonanych operacji.
4