Zajęcia laboratoryjne nr 1 z programowania w języku Java - dwa zajęcia 3h. |
1. Zmienne, typy danych, tablice
Zmienna jest symbolem w programie, oznaczającym obszar w pamięci komputera, w którym mogą być zapisywane różne dane:
-
zmienna ma nazwę (użyty w programie symbol nazywa się nazwą zmiennej),
-
przez tę nazwę odwołujemy się do konkretnego obszaru pamięci, w którym chcemy przechowywać wartości jakiejś danej,
-
zawartość tego obszaru (wartość zmiennej) możemy zmieniać w trakcie wykonania programu.
Definiowanie zmiennych:
typ danej zmienna [ = wartość][, zmienna [ = wartość] ...];
Typy proste:
- logiczne
-
-
boolean (true/false)
-
- znakowe
-
-
char (16 bitów)
-
- numeryczne całkowite
-
-
byte (8 bitów)
-
short (16 bitów)
-
int (32 bity)
-
long (64 bity)
-
- numeryczne zmiennoprzecinkowe
-
-
float (32 bity)
-
double (64 bity)
-
- puste
-
-
void (typ pusty)
-
Typy numeryczne są typami ze znakiem (signed). W języku Java konieczne jest zainicjowanie zmiennej przed użyciem |
Typy obiektowe (opakowujące typy proste):
-
Boolean (boolean)
-
Character (char)
-
Byte (byte)
-
Short (short)
-
Integer (int)
-
Long (long)
-
Float (float)
-
Double (double)
-
Void (void)
-
BigInteger - typ całkowity dowolnej precyzji
-
BigDecimal - typ stałoprzecinkowy dowolnej precyzji
-
String (char[]) - łańcuch tekstowy
Typy złożone (tablice):
Tablice są zestawami elementów (wartości) tego samego typu, ułożonych na określonych pozycjach. Do każdego z tych elementów mamy bezpośredni (swobodny - nie wymagający przeglądania innych elementów zestawu) dostęp poprzez nazwę tablicy i pozycję elementu w zestawie, określaną przez indeks lub indeksy tablicy.
Deklaracja tablicy składa się z:
-
nazwy typu elementów tablicy,
-
pewnej liczby par nawiasów kwadratowych (liczba par określa liczbę wymiarów tablicy),
-
nazwy zmiennej, która identyfikuje tablicę.
Tworzenie tablicy jednowymiarowej typu int
int[] tab = new int[10];
Tworzenie tablicy wielowymiarowej
int[][] tab = new int[10][4];
Tworzenie i inicjalizacja zawartości tablicy
int[] tab = { 5, 3, 8, 2, 7 };
Liczba elementów tablicy
tab.length
Odwołanie do i-tego elementu tablicy
tab[i] lub tab[i][j]
Tablica typów prostych jest zerowana. Tablica obiektów jest tablicą referencji pustych (null) |
2. Klasy, definicja klasy
Klasa jest szablonem, czy też projektem na podstawie którego tworzone są obiekty, które posiadają pewne cechy i funkcje. Klasę winniśmy traktować jako swoisty wzorzec, szablon opisujący powstawanie obiektów (konstruktory), ich cechy (pola) oraz sposób komunikowania się z obiektami (metody).
Definicja klasy określa:
-
zestaw cech (atrybutów) obiektów klasy,
-
zestaw operacji, które można wykonywać na obiektach klasy,
-
specjalne operacje, które pozwalają na inicjowanie obiektów przy ich tworzeniu.
W Javie do definiowania klas używa się słowa kluczowego class .
Samą definicję umieszcza się w następujących po nim nawiasach klamrowych.
Kod definicji (pomiędzy nawiasami klamrowymi) nazywa się ciałem klasy.
|
[ public ] class NazwaKlasy { // definicje pól // definicje konstruktorów // definicje metod }
Pola klasy określają (zazwyczaj) z jakich elementów będą składać się obiekty tej klasy.
[public] class NazwaKlasy { [ specyfikator_dostępu ] [static] nazwa_typu nazwa_zmiennej [ inicjator ]; //.... }
Metoda tak samo jak funkcja to wyodrębniony zestaw czynności, zapisywany jednorazowo w postaci fragmentu kodu, który może być wywoływany wielokrotnie z innych miejsc programu. Wodróżnieniu od funkcji metody zwykle wywoływane są na rzecz konkretnych obiektów.
[public] class NazwaKlasy { // ... [specyfikator_dostępu] [static] typ_wyniku nazwa_metody( lista_parametrów ) { // ... instrukcje wykonywane po wywołaniu metody } }
Konstruktor służy (głównie) do inicjowania pól obiektów. O konstruktorze można myśleć jako o specjalnej metodzie, która zawsze ma nazwę taką samą jak nazwa klasy, nie ma żadnego typu wyniku (nawet void!), ma listę parametrów (w szczególności może być pusta).
[public] class NazwaKlasy { // Definicja konstruktora [ specyfikator_dostępu ] nazwa_klasy(lista_parametrów) { // czynności wykonywane przez konstruktor } }
public class NazwaKlasy {
//pole (zmienna/stala/referencja)
public int i;
//konstruktor (domyslny/sparametryzowany)
public NazwaKlasy() {
}
//metoda
public void nazwaMetody() {
}
//metoda main - punkt wejscia programu
public static void main(String[] args) {
}
}
|
3. Obiekty, inicjalizacja, tworzenie, usuwanie obiektów
Klasa jest tylko definicją typu, a dopiero instancja klasy, tj. obiekt,
to konkretny byt w pamięci komputera. To dla instancji klasy (tj. dla obiektu)
możemy wywoływać metody, które pozwalają operować na polach (atrybutach)
składowych danego obiektu. Obiekty tworzymy przy pomocy operatora new
.
Argumentem tego operatora jest klasa.
Składnia instrukcji tworzenia obiektu ma następującą postać:
new [nazwa klasy]([argumenty inicjalizacji obiektu]);
Kolejność inicjalizacji obiektu:
-
pola statyczne
-
deklaracje
-
konstruktor
-
instrukcje
Pola są zerowane, zmienne lokalne nie są. |
Tworzenie obiektu:
Object o = new Object();
Każda klasa automatycznie dziedziczy po klasie Object (otrzymuje jej właściwości)
|
Klasa Object:
-
.clone()
- tworzy i zwraca kopię aktualnego obiektu -
.equals(Object)
- sprawdza, czy dany obiekt jest równy aktualnemu -
.finalize()
- metoda wywoływana przez Garbage Collector, gdy nie istnieje żadna referencja do aktualnego obiektu -
.toString()
- zwraca reprezentację tekstową obiektu
Usuwanie obiektu:
|
protected void finalize() throws Throwable {
//...
super.finalize();
}
System.gc()
System.runFinalization()
4. Referencje
Referencja to wartość, która oznacza lokalizację (adres) obiektu w pamięci. Wszystkie zmienne deklarowane z nazwą klasy w miejscu nazwy typu są zmiennymi typu referencyjnego. Zmienne te mogą zawierać referencje do obiektów lub nie zawierać żadnej referencji (nie wskazywać na żaden obiekt). Obiekty, na które w programie nie wskazuje już żadna referencja są automatycznie usuwane z pamięci. Nazywa się to automatycznym odśmiecaniem (garbage collecting).
|
5. Przykładowy program
class Samochod {
public String marka;
public int rok;
//konstruktor
public Samochod(String marka, int rok) {
this.marka = marka;
this.rok = rok;
}
//przeslonieta metoda
public String toString() {
return marka + " rocznik " + rok;
}
}
public class Test {
public static void main(String[] args) {
System.out.println(new Samochod("BMW", 2005));
//automatyczna konwersja typu - wywolanie metody toString
}
}
BMW rocznik 2005
Instrukcja return – natychmiastowy powrót z metody. |
6. Bibliografia
-
Bruce Eckels, "Thinking in Java. Edycja polska. Wydanie IV", wydawnictwo Helion.
-
Cay S. Horstmann, Gary Cornell, "Java. Podstawy. Wydanie IX", wydawnictwo Helion.
-
Cay S. Horstmann, Gary Cornell, "Java. Techniki zaawansowane. Wydanie IX", wydawnictwo Helion.
-
Krzysztof Barteczko, "Podstawy programowania w języku Java, PJWSTK", http://edu.pjwstk.edu.pl/wyklady/ppj/scb/
-
Konrad Kurczyna, ”Laboratorium Java”, Politechnika Świętokrzyska w Kielcach.
-
Mariusz Lipiński, "Nauka Javy", http://www.naukajavy.pl/