Sabitler
"Amigo, Java'da tüm değişkenlerin değiştirilemeyeceğini biliyor muydun?"
"Bu nasıl Kim? Gerçekten de 'değişken' kelimesinin kendisi değişimden bahsediyor."
"Buna hiç şüphe yok. Diğer birçok programlama dilinde olduğu gibi Java'da da sabitler , yani değerleri değiştirilemeyen değişkenler vardır . Ve 'sabit' kelimesinin kendisi sabitlikten söz eder."
"Peki onlar ne için?"
Pi
"Genellikle, yılın aylarındaki günlerin sayısı veya sayısı gibi bir tür temel şey için kullanılırlar . Bununla birlikte, ilke olarak, bir programcı, eğer bunu yapmaya karar verirse, herhangi bir değişkeni sabit yapabilir. yani gerekli."
"Bir arabanın adı, rengi veya haftanın bir gününün adı gibi mi demek istiyorsun?"
"Doğru fikre sahipsin. Değiştirilmemesi gereken her şey."
"Peki bu sabitler Java'da neye benziyor?"
"Java'nın onlar için özel bir anahtar kelimesi vardır: . Sabit bir değişken oluşturmak, sıradan bir değişken oluşturmakla aynı görünür. Tek fark, değişkenin türünden önce kelimeyi şu şekilde final
yazmanız gerekir:final
final Type name = value;
"Bir sabit oluşturup ona farklı bir değer atamaya çalışırsanız ne olur?"
"Sorulacak doğru soru bu! Ve doğru cevap şudur: Bir değişkene farklı bir değer atamaya çalışırsanız final
, programınız derlenmez."
"Ya bir değişken bildirirseniz final
ancak ona bir değer atamazsanız?"
"Bunu yapmanın bir anlamı yok, bu yüzden Java'da da buna izin verilmiyor. Bir final
değişken, bildirildiğinde başlatılmalıdır, yani ona bir değer atamalısınız. Bu kuralın bir istisnası vardır: başlatmayı hareket ettirebilirsiniz. bir yapıcıya statik bir sınıf değişkeni Ama bunu daha sonra öğreneceksiniz.
"Bununla birlikte, olan her şey final
bir sabit değildir. Java geliştiricileri, anahtar sözcüklerin sayısını azaltmak için sözcüğü final
yalnızca sabitler bildirmekten daha fazlası için kullanırlar. final
Yöntemlere ve hatta sınıflara da uygulanabilir. Olarak bildirilen yöntemler final
geçersiz kılınamaz ve bir sınıf final
miras alınamayacağı beyan edilmiştir ."
"Uh... Geçersiz kılındı mı? Miras mı kaldı? Şu anda hangi dili konuşuyorsun?"
"Nesne yönelimli programlama dili. Çok yakında öğreneceksiniz. O zamana kadar, güzel terminolojinin tadını çıkarın."
"Tamam. Yani, final
değişkenlerin, sınıfların ve yöntemlerin önüne konulabilir ve bu anahtar sözcük onları bir anlamda değişmez yapar?"
"Evet. Ayrıca final
değiştirici herhangi bir değişkenden önce eklenebilir: yerel değişkenler, yöntem parametreleri, sınıf alanları ve statik sınıf değişkenleri.
"Hatırlanması gereken önemli şey şu: final
Bir değişken adından önce, o değişkende yapılacak herhangi bir değişikliğe karşı koruma vardır . Bir değişken bir nesneye referans depoluyorsa, o zaman nesne yine de değiştirilebilir."
"Tam olarak anlamıyorum."
"Çok yakında anlayacaksın. İşte bir örnek:
|
Bir dizi oluşturuyoruz. Buna izin verilmez: değişken data olarak bildirilir final . Ama bunu yapabilirsin. Ve ayrıca bu. |
"Anladım. Bu çok zor."
genel sabitler
"Küresel sabitlerin ne olduğunu düşünüyorsun?"
"Sanırım global sabitler muhtemelen global değişkenler gibidir, sadece sabitlerdir?"
"Kesinlikle. Programınızda genel sabitleri bildirmeniz gerekiyorsa, statik sınıf değişkenleri oluşturun ve onları public
ve yapın final
. Bu tür değişkenlerin adları için özel bir stil vardır: bunlar, tümü büyük harflerle yazılır ve alt çizgi karakteri kullanılır. ayrı kelimeler.
Örnekler:
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;
}
Değişken gölgeleme
"Daha önce de söylediğim gibi, tek bir yöntemde aynı ada sahip birden çok yerel değişken oluşturamazsınız. Farklı yöntemlerde oluşturabilirsiniz."
"Biliyorum ki!"
"Ama muhtemelen bilmediğiniz şey, bir sınıftaki değişkenler ile bir yöntemdeki yerel değişkenlerin aynı ada sahip olabileceğidir.
Örnek:
kod | Değişken görünürlük |
---|---|
|
|
"Yöntemde add
, adlı yerel bir değişken bildirdik sum
. Yöntemin sonuna kadar, örnek değişkeni gölgeler (veya maskeler ) sum
.
"Hmm... Bir bakıma bunun beklenen davranış olduğunu söyleyebilirim."
"Ama hikaye bununla sınırlı değil. Görünüşe göre bir örnek değişken yerel bir değişken tarafından gölgeleniyorsa, yöntem içinde örnek değişkene atıfta bulunmanın bir yolu var. Bunu, anahtar kelimeyi adından önce yazarak yapıyoruz this
. :
this.name
"Ad çakışmasının başarıyla çözüldüğü bir örnek:
kod | Değişken görünürlük |
---|---|
|
|
count
ve değişkenleri , anahtar kelime sum
olsun ya da olmasın her yerde kullanılabilir this
. sum
Yerel değişkenin örnek değişkeni gölgelediği satırlarda sum
, sum
örnek değişkene yalnızca anahtar kelime kullanılarak erişilebilir this
.
"Elbette, bunu uygulamam gerekecek."
"Başaracaksın."
"Ya yalnızca (statik olmayan) bir örnek değişkeni yerine bir statik sınıf değişkeni gölgelenirse? Ona üzerinden erişemezsin this
?"
"Haklısın. this anahtar sözcüğü çalışmaz. Buna sınıf adıyla başvurman gerekir:
ClassName.name
Örnek:
kod | Değişken görünürlük |
---|---|
|
|
count
"Dikkat: ve sum
static değişkenlerine, sınıf adını önek olarak veya kullanmadan her yerden erişebilirsiniz . Yerel değişkenin örnek değişkeni gölgelediği Solution
satırlarda , sınıf değişkenine erişim yalnızca önek olarak kullanıldığında mümkündür .sum
sum
sum
Solution
for
Döngü içindeki değişkenler
for
"Ve bir küçük ama ilginç gerçek daha. Ayrıca bir değişkenin özel bir şekilde bildirildiği bir yer var - bir döngünün içinden bahsediyorum ." Tipik olarak, bir döngü parantez içinde for
bir değişkene sahiptir . counter
Ve bu değişkenin görünürlüğü ne olacak? Sonuçta, döngünün gövdesinde değil. Tüm yöntem bu mu? Ya da değil?"
" Bununla ilgili bir şeyler duymuştum. Anladığım kadarıyla, bir for
döngünün başlığında bildirilen bir değişken yalnızca döngünün gövdesinde ve döngünün başlığındafor
görünür . "
"Aferin Amigo. Ama yine de bu malzemeyi pekiştirmek için bir örneğe bak:
kod | Değişken görünürlük |
---|---|
|
|
"Yani, kodumda aynı ada sahip bir sayaç değişkeni ile arka arkaya birkaç döngü yazabileceğimi ve hiçbir sorun olmayacağını mı söylüyorsunuz?"
"Sorun olmazdı. İşte bak:
kod | Değişken görünürlük |
---|---|
|
|
GO TO FULL VERSION