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 console
jest utworzeniem zmiennej console
typu Scanner
. jest utworzeniem obiektu typu . Cóż, operator przypisania umieszcza w zmiennej referencję do nowo utworzonego obiektu.new Scanner(System.in)
Scanner
console
W drugim wierszu wywołujemy metodę nextInt()
na obiekcie , Scanner
używając zmiennej console
, która przechowuje odwołanie do obiektu typu Scanner
.
Przykłady tworzenia obiektów:
Kod | Opis |
---|---|
|
Tworzy obiekt typuString |
|
Tworzy obiekt typuScanner |
|
Tworzy obiekt typu int[] : kontener dla 10 elementów typuint |
Utworzone obiekty nazywane są obiektem klasy lub instancją klasy , a klasa nazywana jest klasą obiektu . Na przykład: zmienna s
przechowuje 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 100
punktó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 Point
do 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 Solution
bę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 String
pozostaje niezmieniony przez cały czas po utworzeniu. I jak osiągnęli to programiści Javy?
Po pierwsze, wszystkie zmienne klasy String
są ukryte - zadeklarowane private
.
Po drugie, String
nie możesz dziedziczyć po klasie: ma ona modyfikator final
w 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:
Więc nie krępuj się przekazywać swoje ciągi do dowolnych metod: nikt ich nie zmieni.