Başka nitelemeler
Erişim
belirtkelerinden farklı olan üç önemli belirtke daha vardır. Bunlar static,
final ve abstract nitelemeleridir.
Bir sınıfa
ait anlık değişken tanımlandığında, o sınıfa ait her bir nesne içinde söz
konusu değişkenin bir kopyası oluşur. Dolayısıyla, farklı nesnelerde o
değişkene farklı değerler atanabilir. Aynı anda, o değişkenin yaratılan nesne
sayısı kadar farklı değeri olabilir.
Benzer
olarak, bir sınıf içinde tanımlanan bir metodun bir kopyası her nesne içinde
oluşur. Metotlar override edilerek, her nesnede onlara farklı işler
yaptırılabilir.
Ancak, bazı
durumlarda değişkenlerin veya metotların, onların sınıfına ait olarak
yaratılacak nesnelerden bağımsız ve biricik olmalarını, farklı nesnelerde
farklı işlevlere sahip kopyalarının yaratılmamasını isteriz. Bunun için static
belirtkesini kullanırız.
static damgalı
değişkenlere ana bellekte ancak birer tane yer ayrılır, her nesne için ayrı yer
ayrılmaz. Bunun yerine, onu kullanacak her nesne, ona ayrılan tek adrese
ulaşır. Böylece, o sınıfa ait bir çok nesne yaratılsa bile, static değişkenin
değerini ortak olarak kullanırlar. Tabii, program koşarken static değişkenin
değeri değişebilir. Ama, değişene dek, bütün nesneler aynı değeri kullanmak
durumundadır. Değeri değişse bile, o andan sonra gene bütün nesneler onun yeni
değerini kullanır.
Benzer olarak, static belirtkesi ile damgalanan metot ancak bir kez
tanımlanır. Alt-sınıflarda, aynı adlı başka metot tanımlanamaz. Overload veya
overridden edilemez. Örneğin, main() metodu böyledir.
Eğer birden çok main() metodu tanımlanabilseydi, işletim sistemi hangisini
(önce) çağıracağını bilemezdi.
·
static nitelemesi metotlara ve değişkenlere verilebilir;
sınıflara verilemez.
·
static damgalı metot ancak static damgalı verilere
(değişken, sabit) erişebilir.
·
static damgalı metot, ancak static damgalı metotları
çağırabilir.
·
this ve super anahtar
sözcüklerini kullanamazlar.
Örnek:
static int m=
5;
static double b ;
static void renkSec (Color color)
{
....
}
Alıştırmalar
1. Aşağıdaki
programı çözümleyiniz.
// static
değişkenler, metotlar, and bloklar.
class
DeneStatic {
static int a = 5;
static int b;
static void deneme(int x) {
System.out.println("x = " + x);
System.out.println("a = " + a);
System.out.println("b = " + b);
}
static {
System.out.println("Static blok
başlatıldı.");
b = a * 3;
}
public static void main(String args[]) {
deneme(37);
}
}
1.
Aşağıdaki programı çözümleyiniz.
class StaticDemo {
static int a = 26;
static int b = 64;
static void yaz() {
System.out.println("a = " + a);
}
}
class
StaticYaz {
public static void main(String args[]) {
StaticDemo.yaz();
System.out.println("b = " +
StaticDemo.b);
}
}
Bu belirtke
nitelediği öğenin sabit kılındığını ve değiştirilemeyeceğini belirtir. Eğer
final belirtkesi class öğeleri için kullanılırsa, o class’ın alt-sınıfları
yaratılamaz. Metoda uygulanan final belirtkesi o metodun overridden
yapılamayacağını söyler. Değişkene uygulandığında ise, o değişkeni bir sabit
(constant) yapar. Final damgalı değişkenleri büyük harflerle yazmak Java’nın
bir geleneğidir. Böylece, kaynak programa bakan kişi, onun bir sabit değer
olduğunu anlar.
Örnekler:
final
int ILK_DEGER = 1;
final
float KATSAYI = 9.8;
class DeneSin {
// bu değişkenin değeri değişemez
final int sayac = 21;
// bu metot
override edilemez
final int deneMetot(int
a, int b) {
}
}
absract belirtkesi
soyut class ve/veya soyut metot yaratır. Soyut metotların adı, değişkenleri ve
değer-tipi (return type) belirtilir, ama
metot gövdesi yazılamaz. Abstract class en az bir tane abstract metoda sahip
olmalıdır. Abstract class’tan nesne yaratılamaz (instantiate); çünkü içerdiği
abstract metod çalıştırılamaz. Bir abstract class’ta bir metot varsa, o metot
otomatik olarak abstract sayılır. Ama birden çok metot içerdiğinde, bazıları
abstract olmayabilir.
abstract void renk (Color color);
This defines a template for a
denemeod named isBlack. Notice that no body of isBlack is specified; that is left to subclasses of the class
in which the abstract denemeod is declared. The subclasses must implement a
body for denemeod is