Променливи за тип клас в Java, портал за знания, портал за знания, дистанционно обучение
2.1.10.1. Създаване на променливи тип клас
където тип-име за променливи тип клас е идентификаторът на класа, например:
декларира две променливи на класа MyClass с имена obj 1 и obj 2.
Подобно на променливите на примитивните типове, на променливите на референтните типове също трябва да бъдат присвоени определени стойности, преди да могат да бъдат използвани. За декларираната променлива от типа клас създайте конкретен обект, екземпляр (екземпляр) на описания клас.
Когато се създава обект, обикновено е необходимо да се инициализират неговите променливи. За целта в класа се дефинират специален метод или претоварени методи, чиито имена съвпадат с името на класа. Тези методи се наричат конструктори. Конструкторът се различава от обикновените методи по следните основни характеристики (други характеристики на конструкторите ще бъдат обсъдени по-късно):
- конструкторът не трябва да връща никаква стойност;
- връщаният тип за конструктора не е посочен (но можете да посочите модификатора за публичен или частен достъп).
Обект се създава с помощта на израз, който има следния формат:
променлива-идентификатор = нов конструктор-идентификатор (параметри);
където variable-id е името на създавания обект, constructor-id е името на извикания конструктор на класа, parameters е списъкът с параметри, предадени на конструктора на класа.
Примери за създаване на обекти:
obj 1 = нов MyClass();
obj 2 = нов MyClass(12, 5);
За създаване на обект obj 1 се извиква конструкторът на класа MyClass без параметри, а за създаване на обект obj 2 се извиква друг конструктор от същия клас, на който се подават две цели числа като аргумент.
MyClass обект 3= newMyClass(8, 4);
2.1.10.2. Обектни променливи и методи
Както вече споменахме, описанието на класа дефинира променливите и методите, използвани в този клас. Когато създавате обект, променливите в различни обекти от класа имат едно и също име, но могат да имат различни стойности и промяната на променлива в един екземпляр не засяга стойността на същата променлива в друг екземпляр, тъй като всеки обект има своя собствена област на паметта за тези променливи. Въпреки че паметта се разпределя само веднъж за методите на класа, всеки обект на клас има достъп до методите на класа независимо от други обекти. Следователно такива променливи и методи се наричат променливи и методи на екземпляр или обектни променливи и методи. Достъпът до променливи и извикването на обектни методи в Java има следния формат:
където име на обект е идентификаторът на променливата на обекта на класа, име на променлива е идентификаторът на променливата на класа, име на метод е идентификаторът на метода на класа, а аргументите са стойностите, посочени при извикването на метода. Например, ако променливата var 1 от тип int е дефинирана в класа, тогава дефинирането на нейната стойност в обекта obj 1 и obj 2 може да се извърши с помощта на следния оператор:
int var 1 InObj 1 = obj 1. var 1;
Промяната на стойността на var 1 за obj 2 може да се извърши със следния оператор:
obj 2. var 1 = 12;
Методът setVar 1, дефиниран в класа MyClass и задаващ стойността на променливата var 1 за обектите obj 1 и obj 2, се извиква с помощта на следните изрази:
obj1.setVar1(2);
obj2.setVar1(2);
Ако името на обекта не е зададено, тогава променливата или методът не е зададен, тогава Java компилаторът счита, че дадената променлива или методопределени в този клас. В този случай вместо името на обекта можете да посочите ключовата дума this. Обикновено такава индикация се използва в случаите, когато името на променливата на класа и аргументът на метода в класа са еднакви, например:
void setVar1(int var1)
това. var1= var1;
Този пример задава променливата на класа var 1 на стойността на параметъра var 1, дефиниран в метода setVar 1(). Ако параметърът в метода имаше различно име, като var, ключовата дума this може да бъде пропусната и операторът за присвояване може да бъде написан като:
2.1.10.3. Променливи и методи на класове
Статичният модификатор указва променлива, която е обща за всички обекти от дадения клас. Обикновено за всяко поколение на обект на променливите на класа се разпределя нова памет, но когато тези членове на класа се декларират със статичния модификатор, те получават място само веднъж, без значение колко обекта са създадени. Така променливата, декларирана в класа MyClass
static int objectCount;
може да се използва за преброяване на генерираните обекти от клас MyClass.
За работа със статични променливи обикновено се създават статични методи, маркирани със статичен модификатор.
Статичните методи и променливи се наричат още променливи и методи на класа, защото могат да бъдат достъпни чрез указване на името на класа, а не на името на обекта. Например, нека променливата var 2 и методът setVar 2 да бъдат дефинирани в класа MyClass като статични:
статичен int var2 = 0;
static void setVar2(int var)
Тогава извикването на тази променлива и метод ще има следната форма в програмата:
int val2Value = MyClass.var2;
Статичните променливи се инициализират още преди конструкторът да стартира, но по време на инициализацията можетеизползвайте само постоянни изрази, както е направено по-горе за var 2. Ако инициализирането изисква сложни изчисления, например цикли за задаване на стойности на елементи от статични масиви или извиквания на методи, тогава тези изчисления са затворени в блок, маркиран с думата static, който също ще бъде изпълнен преди стартирането на конструктора, например:
статичен int var2;
Основната характеристика на статичните променливи и методи е, че те са достъпни дори ако не е създаден екземпляр на класа. В допълнение към статичните методи се прилагат следните основни ограничения:
- не можете да използвате тези препратки в статичен метод;
- в статичен метод не можете да получите достъп до нестатични променливи (т.е. всички променливи, декларирани извън статичния метод и използвани вътре в него, трябва да бъдат декларирани със статичния модификатор);
- не можете директно да извиквате нестатични методи в статичен метод (т.е. всички методи, извикани от статичен метод, трябва да бъдат декларирани със статичния модификатор).
Последните две условия могат да бъдат заобиколени чрез достъп до променливите и методите на обекта. Така че, ако вътре в статичния метод setVar 2 има директен достъп до нестатичната променлива var 1, тогава това ще доведе до съобщение за грешка, но достъпът до var 1 като променлива на обекта obj 1 - obj 1. var 1 няма да причини грешка.
2.1.10.4. Операции върху обекти
Обектите на езика Java могат да се комбинират с помощта на следните операторни знаци:
- присвояване " = " – присвояване на указател към обект към референтна променлива (в този случай не се създава ново копие на обекта);
- проверка за равенство " == " и за неравенство " != " - резултатът от тези операции ще бъде истина или невярно, в зависимост от това дали сравняваните променливи сочат къмсъщият обект в паметта.
Освен това се дефинира операция за обекти
име на обект екземпляр на име на клас
Резултатът от тази операция е верен, ако обектът с идентификатор име на обект е реализация на класа с идентификатор име на клас, в противен случай е фалшив.
Примери за операции върху обекти:
MyClass obj 4 = нов MyClass(15, 7);
boolean isEqual1, isEqual2, isInstance;
// isEqual1 - true (препратки към obj4 и obj6
// сочи към същия обект)
isEqual = obj6 == obj4;
// isEqual2 - false (obj4 и obj5 имат същото
// характеристики, но сочат към различни обекти)
isEqual2 = obj4 == obj5;
// isInstance - true (obj4 е обект