1. Константи
Много други езици за програмиране имат константи , тоест променливи, чиито стойности не могат да бъдат променяни . Обикновено те се използват за няHowво фундаментално нещо като броя Pi
or броя на дните в месеците от годината. Въпреки това, по принцип програмистът може да направи всяка променлива константа, ако той or тя реши, че това е необходимо.
И така, How да декларирате неизменна променлива (константа) в Java? Има специална ключова дума за това: final
. Създаването на неизменна променлива изглежда по същия начин като създаването на обикновена. Единствената разлика е, че преди типа на променливата трябва да напишете думата final
, така:
final Type name = value;
Ако се опитате да присвоите различна стойност на final
променлива, вашата програма просто няма да се компorра.
Променливата final
трябва да бъде инициализирана (трябва да й бъде присвоена стойност), когато се декларира. Има едно изключение от това правило: можете да преместите инициализацията на променлива на статичен клас в конструктор. Но ще научите за това в ниво 10 .
За да намалят броя на ключовите думи, Java разработчиците използват думата final
за повече от просто деклариране на константи. final
може също да се прилага към методи и дори класове. Методи, декларирани като, final
не могат да бъдат заменени, а клас, деклариран като, final
не може да бъде наследен.
Модификаторът final
може да се добави преди всяHowви променливи: локални променливи, параметри на метода, полета на клас и статични променливи на клас.
Обърнете внимание, че final
преди името на променлива е просто защита срещу всяHowви промени в тази променлива . Ако променлива съхранява препратка към обект, тогава обектът все още може да бъде променен.
Пример:
|
Създаваме масив. Това не е позволено: променливата data е декларирана като final . Но можете да направите това. А също и това. |
Глобални константи
Ако решите да декларирате глобални константи във вашата програма, тогава трябва да създадете статични класови променливи и да ги направите public
и final
. Има специален стил за имената на такива променливи: те се изписват изцяло с главни букви, с долна черта, използвана за разделяне на думите.
Примери:
class Solution
{
public static final String SOURCE_ROOT = "c:\\projects\\my\\";
public static final int DISPLAY_WIDTH = 1024;
public static final int DISPLAY_HEIGHT = 768;
}
2. Променливо засенчване
Както казахме преди, не можете да създадете няколко локални променливи с едно и също име в един и същи метод. С различни методи можете.
Но ето Howво вероятно не знаете: променливите на екземпляра и променливите на локалния метод могат да имат едно и също име.
Пример:
Код | Променлива видимост |
---|---|
|
|
В add
метода декларирахме локална променлива с име sum
. До края на метода той засенчва (or маскира ) sum
променливата на екземпляра.
Добре, ще кажете, това може да се очаква в известен смисъл. Но това не е краят на историята. Оказва се, че ако променлива на екземпляр е засенчена от локална променлива, все още има начин да се препрати към променливата на екземпляр в рамките на метода. Правим това, като напишем this
ключовата дума преди нейното име:
this.name
Ето пример, при който конфликтът с имена е разрешен успешно:
Код | Променлива видимост |
---|---|
|
|
Променливите count
и sum
са достъпни навсякъде със or без this
ключовата дума. На редове, където sum
локалната променлива засенчва sum
променливата на екземпляра, sum
променливата на екземпляра може да бъде достъпна само чрез this
ключовата дума.
Ако е засенчена променлива на статичен клас, а не променлива на екземпляр, тогава трябва да получите достъп до нея чрез името на класа, а не чрез ключовата this
дума:
ClassName.name
Пример:
Код | Променлива видимост |
---|---|
|
|
Можете да получите достъп до статичните променливи count
и sum
навсякъде със or без да използвате името на класа Solution
като префикс. В тези редове, където sum
локалната променлива засенчва sum
променливата на екземпляра, достъпът до sum
променливата на екземпляра е възможен само когато се използва Solution
като префикс.
3. Променливи в for
цикъл
И още един малък, но интересен факт.
Има и място, където променливата се декларира по специален начин — вътре в for
цикъл .
Може би си спомняте, че for
цикълът обикновено има променлива брояч в скоби. И Howва ще бъде видимостта на тази променлива? В крайна сметка не е в тялото на цикъла. Целият метод ли е? Или не?
Правилният отговор е: променлива, декларирана в заглавката на цикъл, for
се вижда само в тялото на цикъла и в заглавката на for
цикъла .
Пример:
Код | Променлива видимост |
---|---|
|
|
Така че винаги можете да пишете цикли един след друг в codeа си и да използвате променливи на брояча с едно и също име — това няма да създаде проблеми.
Пример:
Код | Променлива видимост |
---|---|
|
|
GO TO FULL VERSION