Definicja Klasy
Na początek przypomnę z czego się składa definicja klasa. Mianowice każda klasa składa się z pól, konstruktora, i metod. Pola i metody klasy nazywa się składowymi klasy.
Klasa: jest to opis takich cech grupy podobnych obiektów, które są dla nich nie zmienne.
Przykładowa definicja klasy:
- public class Osoba{
- // cialo klasy:
- // pola ( atrybuty )
- private String imie;
- private String nazwisko;
- private char plec;
- private int wiek;
- // konstruktor ( specjalna operacja inicjacji )
- public Osoba(String imie, String nazwisko, char plec, int wiek) {
- this.imie = imie;
- this.nazwisko = nazwisko;
- this.plec = plec;
- this.wiek = wiek;
- }
- // metody ( uslugi, polecenia )
- public void zmienWiek(){
- wiek++;
- }
- public char getPlec(){
- return plec;
- }
- public String przedstawSie(){
- return imie + " " + nazwisko;
- }
- public void zmienPlec(char plec){
- this.plec = plec;
- }
Teraz mając klasę musimy utworzyć obiekt dla naszej klasy. Obiekty tworzymy przy pomocy wyrażenia new
- Osoba osoba = new Osoba("Jacek","Placek",'M',25);
I w ten o to sposób mamy utworzony obiekt naszej klasy, aby wykonać jakieś polecenie do obiektu posługujemy się ".", a wygląda to np tak:
- osoba.przedstawSie();
- osoba.zmienPlec('K');
Pola i metody w klasie mogą być statyczne i niestatyczne. Co różni te pola ? Jak wiemy pola niestatycznych zawsze wiążą się z istnieniem jakiś obiektów. Czyli jeśli nie utworzymy obiektu danej klasy nie istnieją pola ani metody. Teraz tak składowe stałe charakteryzują się:
- nie dotyczą obiektów, ale całej klasy - są wspólne dla wszystkich obiektów tej klasy
- są deklarowane przy użyciu specyfikatora
static
- mogą być używane nawet wtedy gdy nie istnieje żaden obiekt klasy
Do statycznych składowych powinniśmy się odwoływać poprzez: NazwaKlasy.NazwaSkładowej
Obiekty i referencje
Postaram się opisać tu taj wszystko jak najszybciej i pokazać co różnicę między obiektem a referencją. Więc zaczynamy...
Jak wiemy obiekt jest reprezentacją jakiegoś szablonu czyli klasy. Na przykład mamy klasę Para, to będzie nasza jakaś instancja obiektu która będzie reprezentowana przez jakąś zmienną.
Para p
Jak pisałem wcześniej obiekt tworzymy przy pomocy słowa new
Para p = new Para(1,2)
Więc co to za zmienna 'p', w sumie deklaracja wygląda tak samo jak przy typach prostych. Więc czym się to różni. Deklarując zmienna typu prostego np. int i = 2
wydzielamy dla niej pamięć, aby mogła być ona przechowywana, więc nasza zmienna i jest synonimem dla naszej liczby całkowitej. Zmienna ta w tym przypadku przechowuje liczbę całkowitą 32 bitowa i w miejsce pamięci oznaczone przez 'i' wpisuje 2, wygląda to mniej więcej tak:
int i; ---> 0000 0000 0000 0000 0000 0000 0000 0000 i = 2; ---> 0000 0000 0000 0000 0000 0000 0000 0010
Przydzielamy pamięć dla zmiennej i, a następnie następuje wpisanie liczby do pamięci. Teraz w przypadku deklaracji zmiennej która będzie wskazywać na obiekt sytuacja wygląda całkiem inaczej. W przypadku obiektów zastosowanie słowa new przydziela dynamiczną pamięć, która ulega zmianie w czasie działania programu. Wynikiem tego słowa jest przydzielenie adresu w pamięci która została przydzielona obiektowi. Więc:
Referencja to wartość, która oznacza lokalizację obiektu w pamięci.
Otóż w Javie oprócz typów numerycznych i typu boolowskiego istnieje jeszcze tylko jeden typ - typ referencyjny.
- public class Roznica {
- public static void main(String[] args) {
- // Operacje na zmiennych typów prostych
- int x, y, z;
- x = 3;
- y = 4;
- x = y;
- y = 5;
- z = 5;
- System.out.println("x = " + x);
- System.out.println("y = " + y);
- System.out.println("z = " + z);
- if (x == y)
- System.out.println ("x i y równe.");
- else
- System.out.println ("x i y nierówne.");
- if (y == z)
- System.out.println ("y i z równe.");
- else
- System.out.println ("y i z nierówne.");
- // Podobne operacje na zmiennych typu referencyjnego
- Para px = new Para(), py = new Para(), pz = new Para();
- px.set( 3, 3 );
- py.set( 4, 4 );
- pz.set( 5, 5 );
- px = py;
- py.set( 5, 5 );
- System.out.print("Para px: "); px.show();
- System.out.print("Para py: "); py.show();
- System.out.print("Para pz: "); pz.show();
- if (px == py)
- System.out.println ("px i py równe.");
- else
- System.out.println ("px i py nierówne.");
- if (py == pz)
- System.out.println ("py i pz równe.");
- else
- System.out.println ("py i pz nierówne.");
- }
- }
To tyle na temat referencji, wszystko powiedziane w szybkim skrócie. Wyjątkiem są obiekty klasy String. Ze względu na to że operacje na łańcuchach znaków są dość częstymi operacjami kompilator zapewnia pewne ułatwienia.
String s = "Ala ma kota";
Zapis ten spowoduje stworzenie obiektu klasy String z zawartością "Ala ma kota" i przypisanie referencji do tego obiektu zmiennej s.
Zatem, wyjątkowo, tworząc obiekty klasy String nie musimy używac wyrażenia new
.
Brak komentarzy:
Prześlij komentarz