1. Обекти
Всичко в Java е обект.
По-точно, има много малко неща в Java, които не са обекти. Например примитивни типове. Но това е доста рядко изключение от правилото.
И така, Howво е обект?
Обектът е обект, който групира данни заедно с методи, които обработват данните . Когато казваме „данни“, имаме предвид променливи, разбира се.
Променливите на даден обект се наричат негови „данни“ or „състояние“.
Казват, че методите на даден обект са неговото "поведение". Обичайно е да се променя състоянието на обект (променливи) само с помощта на методите на този обект. Директната промяна на променливите на обект (без използване на неговите методи) се счита за лоша форма.
Всеки обект , Howто и всяка променлива, има тип . Този тип се определя веднъж при създаването на обекта и не може да бъде променян в бъдеще. Типът на обекта е неговият клас.
Всеки обект има собствено копие на променливи (полета). Ако в клас е декларирана нестатична int a променлива и вашата програма създаде 10 обекта от този клас, тогава всеки обект ще има своя собствена int a променлива.
Взаимодействие с обект
Най-удобният начин за работа с обект е да съхраните препратка към него в променлива и след това да извикате методи на тази променлива. Това ще ви изглежда познато:
variable.method()
Къде variable
е променлива, която съхранява препратка към обект и method
е метод от този клас.
Ако искате да се обърнете към поле (променлива) на обект, тогава трябва също да използвате оператора точка :
variable.field
Къде variable
е променлива, която съхранява препратка към обект и field
е променлива на екземпляр (поле).
2. new
оператор
За да създадете обект от определен клас, трябва да използвате new
оператора. Като цяло, ето How изглежда създаването на обект:
Class variable = new Class(arguments);
Къде Class
е името на класа на variable
променливата, Howто и името на класа на обекта, който ще бъде създаден. И variable
е променлива, която съхранява препратка към създадения обект. И arguments
е контейнер за разделен със запетаи списък с аргументи, предадени на конструктора.
Конкретният списък от аргументи, които могат да бъдат предадени, се решава от програмистите, които пишат класа.
Създавали сте обекти преди и дори сте използвали тази конкретна конструкция. Не си забравил, надявам се?
Scanner console = new Scanner(System.in);
int x = console.nextInt();
Scanner console
— това създава console
променлива, чийто тип е Scanner
. — това създава нов обект. И операторът за присвояване задава променливата равна на препратка към новосъздадения обект.new Scanner(System.in)
Scanner
console
Във втория ред извикваме nextInt()
метода на Scanner
обекта, като използваме console
променливата, която съхранява препратка към Scanner
обекта.
Примери за създаване на обект:
Код | Описание |
---|---|
|
Създайте String обект |
|
Създайте Scanner обект |
|
Създайте int[] : контейнер от 10 int елементи |
Създадените обекти се наричат обекти на класа or екземпляри на класа , докато класът се нарича клас на обекта . Например, s
променливата съхранява препратка към екземпляр на String
класа.
3. Представяне на часовете
Мисля, че вече видяхте колко удобно е да използвате класове, написани от други програмисти. Но Howво ще кажете за писането на вашите собствени класове?
Как да разберете кога и къде имате нужда от собствен клас и How да си направите такъв?
Програмистите обикновено създават свои собствени класове, когато искат да въведат нов обект в програмата. Звучи ли объркващо? Тогава ще се опитам да обясня, но ще започна отдалече.
Група от данни
Малко опростявайки, можем да кажем, че обектът в Java е блок от памет, който съдържа променливите, декларирани в клас (полета на екземпляр). Или, с други думи, променливи, комбинирани в група.
Да приемем, че вашата програма трябва да съхранява координатите на 100
точките и се нуждае от метод за показването им на екрана. Това може да стане с помощта на масиви. Например така:
class Solution
{
public static void printPoints(int[] x, int[] y, int[] color)
{
for (int i = 0; i < x.length; i++)
System.out.println("Color of (" + x[i] + ", " + 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);
}
}
Би било много по-удобно, ако имахме един тип за съхраняване на цялата информация за дадена точка: x
, y
, color
. Ако такъв тип не съществува в Java, можете да го създадете сами.
За да направим това, ще напишем code за Point
клас:
public class Point
{
public int x;
public int y;
public int color;
}
Сега codeът по-горе може да бъде пренаписан като:
class Solution
{
public static void printPoints(Point[] points)
{
for (int i = 0; i < points.length; i++)
System.out.println("Color of (" + points[i].x + ", " + point[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);
}
}
Сега нека добавим метод към Point
класа, който ще показва информация за обекта:
public class Point
{
public int x;
public int y;
public int color;
public void print()
{
System.out.println("Color of (" + x + ", " + y + ") = " + color);
}
}
Сега Solution
класът изглежда така:
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);
}
}
Ние умело скрихме координатите на точката и информацията за цвета в Point
класа заедно с метода, който показва състоянието на точката.
Класовете са начин за управление на сложността на програмата. Една голяма програма става по-малко сложна, когато е разделена на много малки класове.
4. Променливи срещу неизменни обекти
Имало едно време изучавахме константи в Java и стигнахме до заключение, което не е много утешително. Константите ви позволяват да защитите променливите от промяна, но те не могат да предотвратят промени в обектите, към които се отнасят.
За да реши този проблем, Java излезе с постоянни обекти. Или, Howто по-често се наричат, неизменни обекти.
Между другото, вече знаете такъв клас, чиито обекти не могат да бъдат променяни: String
. Един String
обект остава завинаги непроменен след създаването си. И How създателите на Java са постигнали това?
Първо, всички променливи на String
класа са скрити, т.е. декларирани private
.
Второ, не можете да наследите String
класа: неговата декларация за клас включва final
модификатора.
Трето, и най-интересното, всички методи на String
класа, от които на теория бихте очаквали да променят съществуващия обект, всъщност не го променят, а instead of това връщат нов.
Например, toUpperCase()
методът прави всички букви в низа главни. Но instead of да промени обекта, на който се извиква методът, той връща нов String
обект, състоящ се от главни букви:
String text = "This is a very important message";
String message = text.toUpperCase();
Ето Howво ще бъде в паметта след изпълнение на този code:
Така че не се колеbyteе да предадете своите низове на всеки метод: никой няма да ги промени.
GO TO FULL VERSION