1. Przedmioty

Wszystko w Javie jest obiektem.

A raczej bardzo niewiele rzeczy w Javie nie jest obiektami. Na przykład typy pierwotne. Ale to raczej rzadki wyjątek niż reguła.

Co to jest obiekt?

Obiekt to dane i metody zgrupowane w celu przetworzenia tych danych . Kiedy mówimy o danych, mamy oczywiście na myśli zmienne.

Mówi się, że zmienne obiektowe to „dane opisowe” lub „stan obiektu”.

Mówią o metodach obiektu: to jest „zachowanie obiektu”. Zwyczajowo zmienia się stan obiektu (zmiennych obiektu) tylko za pomocą metod tego samego obiektu. Bezpośrednia zmiana zmiennych obiektowych (nie za pomocą metod obiektowych) jest uważana za złą formę.

Każdy obiekt , podobnie jak każda zmienna, ma typ . Ten typ jest definiowany raz podczas tworzenia obiektu i nie można go później zmienić. Typ obiektu to jego klasa .

Każdy obiekt ma swoją własną kopię zmiennych klasy (pola klas). Jeśli w klasie została zadeklarowana niestatyczna zmienna int a, a twój program utworzył 10 obiektów tej klasy w czasie wykonywania, każdy obiekt ma teraz własną zmienną int.

Interakcja z obiektem

Najwygodniejszym sposobem pracy z obiektem jest przechowywanie odwołania do obiektu w zmiennej, a następnie wywoływanie metod na tej zmiennej. To wygląda znajomo:

переменная.метод()

Gdzie переменнаяjest zmienną przechowującą referencję do obiektu, a metoda jest metodą klasy obiektu.

Jeśli chcesz odnieść się do pola (zmiennej) obiektu, musisz również użyć operatora kropki :

переменная.поле

Gdzie переменнаяjest zmienną, która przechowuje odniesienie do obiektu, a pole jest zmienną klasową (pole obiektu).


2. Operatornew

Aby utworzyć obiekt określonej klasy, musisz użyć metody new. Oto jak wygląda tworzenie obiektów w ogólnym przypadku:

Класс переменная = new Класс(параметры);

Gdzie Классto nazwa klasy do zadeklarowania переменнойi nazwa klasy tworzonego obiektu. Переменнаяjest zmienną przechowującą referencję do tworzonego obiektu. A параметрыto parametry metody tworzenia obiektu.

O tym, jakie parametry może mieć obiekt, decydują programiści, którzy piszą klasę obiektu.

Tworzyłeś już wcześniej obiekty, a nawet korzystałeś z tej konkretnej konstrukcji. Mam nadzieję, że nie zapomniałeś?

Scanner console = new Scanner(System.in);
int x = console.nextInt();

Scanner consolejest utworzeniem zmiennej consoletypu Scanner. jest utworzeniem obiektu typu . Cóż, operator przypisania umieszcza w zmiennej referencję do nowo utworzonego obiektu.new Scanner(System.in)Scannerconsole

W drugim wierszu wywołujemy metodę nextInt()na obiekcie , Scannerużywając zmiennej console, która przechowuje odwołanie do obiektu typu Scanner.

Przykłady tworzenia obiektów:

Kod Opis
String s = new String("Cześć");
Tworzy obiekt typuString
Scanner console = new Scanner("");
Tworzy obiekt typuScanner
int[] data = new int[10];
Tworzy obiekt typu int[]: kontener dla 10elementów typuint

Utworzone obiekty nazywane są obiektem klasy lub instancją klasy , a klasa nazywana jest klasą obiektu . Na przykład: zmienna sprzechowuje odwołanie do instancji klasy String.



3. Wprowadzenie do zajęć

Myślę, że już widziałeś, jak bardzo wygodnie jest korzystać z klas napisanych przez innych programistów. A co z pisaniem własnych zajęć?

Jak zrozumieć, kiedy i gdzie potrzebujesz własnej klasy i jak to zrobić?

Programiści zwykle tworzą własne klasy, gdy chcą wprowadzić nowy obiekt do programu. Nie brzmi to zbyt jasno? Potem postaram się wytłumaczyć, ale zacznę od z daleka.

Grupowanie danych

Jeśli trochę uprościmy, możemy powiedzieć, że obiekt w Javie to obszar pamięci zawierający zmienne zadeklarowane w klasie (pola klas). Lub w inny sposób - zmienne połączone w grupy.

Powiedzmy, że w swoim programie musisz przechowywać współrzędne 100punktów i metodę wyświetlania ich na ekranie. Można to zrobić za pomocą tablic. Na przykład tak:

class Solution
{
   public static void printPoints(int[] x, int[] y, int[] color)
   {
     for (int i = 0; i < x.length; i++)
       System.out.println("Цвет точки x=" + x[i] + ", y=" + y[i] + " " + color[i]);
   }

   public static void main(String[] args)
   {
     int[] x = new int[100];
     int[] y = new int[100];
     int[] color = new int[100];
     printPoints(x, y, color);
   }
}

Byłoby znacznie wygodniej, gdybyśmy od razu mieli typ do przechowywania wszystkich informacji o punktach: x, y, цвет. Cóż, jeśli w Javie nie ma takiego typu, możesz go stworzyć samodzielnie.

W tym celu napisz kod tworzenia klasy Point:

public class Point
{
   public int x;
   public int y;
   public int color;
}

Następnie powyższy kod można przepisać jako:

class Solution
{
   public static void printPoints(Point[] points)
   {
     for (int i = 0; i < points.length; i++)
       System.out.println("Цвет точки x=" + points[i].x + ", y=" + points[i].y + " " + points[i].color);
   }

   public static void main(String[] args)
   {
     Point[] data = new Point[100];
     for (int i = 0; i < data.length; i++)
       data[i] = new Point();
     printPoints(data);
   }
}

A teraz dodajmy Pointdo klasy metodę, która wyświetli informacje o obiekcie:

public class Point
{
   public int x;
   public int y;
   public int color;
   public void print()
   {
     System.out.println("Цвет точки x=" + x + ", y=" + y + " " + color);
   }
}

Wtedy klasa Solutionbędzie wyglądać następująco:

class Solution
{
   public static void printPoints(Point[] points)
   {
     for (int i = 0; i < points.length; i++)
       points[i].print();
   }

   public static void main(String[] args)
   {
     Point[] data = new Point[100];
     for (int i = 0; i < data.length; i++)
       data[i] = new Point();
     printPoints(data);
   }
}

Pięknie ukryliśmy wewnątrz punktu (klasy Point) informację o jego współrzędnych oraz metodę wyświetlającą stan obiektu punktu na ekranie.

Klasy są odpowiedzią na zarządzanie złożonością programu. Duży program staje się prostszy, gdy jest podzielony na wiele małych klas.


4. Obiekty zmienne i niezmienne

Dawno, dawno temu studiowaliśmy stałe w Javie i doszliśmy do niezbyt pocieszającego wniosku. Stałe pozwalają chronić zmienne przed zmianami, ale nie są w stanie ochronić przed zmianami obiektów, do których te zmienne się odnoszą.

W odpowiedzi na ten problem Java wymyśliła obiekty stałe. Lub, jak się je również nazywa, niezmienne obiekty są niezmiennymi obiektami.

Nawiasem mówiąc, znasz nawet jedną taką klasę, której obiektów nie można zmienić - String. Obiekt klasy Stringpozostaje niezmieniony przez cały czas po utworzeniu. I jak osiągnęli to programiści Javy?

Po pierwsze, wszystkie zmienne klasy Stringsą ukryte - zadeklarowane private.

Po drugie, Stringnie możesz dziedziczyć po klasie: ma ona modyfikator finalw deklaracji klasy.

Po trzecie, co najciekawsze, wszystkie metody klasowe String, które miały zmienić istniejący obiekt, nie zmieniają go, lecz zwracają nowy.

Na przykład metoda toUpperCase()powoduje, że wszystkie litery ciągu są pisane wielkimi literami. Ale zamiast zmieniać obiekt, na którym jest wywoływana, ta metoda zwraca nowy obiekt typu String, składający się z wielkich liter:

String text = "Это очень важное сообщение";
String message = text.toUpperCase();

Oto, co będzie w pamięci po wykonaniu tego kodu:

Zmienne kontra niezmienne obiekty

Więc nie krępuj się przekazywać swoje ciągi do dowolnych metod: nikt ich nie zmieni.