• Sonuç bulunamadı

Java Nitelemleri. Bölüm 1

N/A
N/A
Protected

Academic year: 2022

Share "Java Nitelemleri. Bölüm 1"

Copied!
22
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

Java Nitelemleri (Modifiers In Java)

Java dilinde nitelemler (modifiers), bildirimlerinde java öğele- rinin niteliğini belirlemek amacıyla öntakı olarak kullanılan anahtar sözcüklerdir. Şimdiye kadar bazılarını sık sık kullandık. Örneğin, Program 1.0.1.

1 p u b l i c c l a s s Toplama { . . .

}

p r i v a t e b o o l e a n bayrak ;

s t a t i c f i n a l d o u b l e oran = 7 . 8 6 ;

p r o t e c t e d s t a t i c f i n a l i n t KATSAYI = 1 2 ;

p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { . . .

}

bildirimlerindeki public, private, static ve protected anahtar sözcükleri birer nitelemdir (modifier).

Nitelemleri başlıca iki gruba ayırabiliriz:

(2)

• Erişim Belirtkeleri

• Öteki Belirtkeler

1.1 Erişim Belirtkeleri

Bir java deyimi, belirli bir iş yapan kod veya kodlardan oluşan blok- tur. Tek bir komuttan oluşabileceği gibi, birden çok komutu içerebilir.

Bir deyim bir değişkeni çağırabiliyorsa; yani değişkene değer atayabi- liyor ya da atanan değeri okuyabiliyorsa, o kod söz konusu değişkene erişebiliyor, denir. Örneğin, bir sınıf içindeki bir değişkene değer ata- yabilen ya da atanan değeri okuyabilen metot o değişkene erişebiliyor.

Benzer olarak, bir java kodu bir metodu çağırabiliyorsa; yani çalıştı- rabiliyorsa, o kod sözkonusu metoda erişebiliyor, diyoruz. Bir sınıfın içindeki kodlar, başka bir sınıfın içindeki değişkenlere ve metotlara eri- şebiliyorsa, o sınıf sözkonusu sınıfa erişebiliyor, diyoruz. Paketler için de benzer tanım geçerlidir.

Bir Java öğesinin (değişken, metot, sınıf, kurucu, arayüz, paket) bildirimi yapılırken, o öğeye kimlerin erişebileceğini belirtme olanağı vardır. Bu eylemi yapan anahtar sözcüklere Erişim Belirtkeleri (Ac- cess modifiers), (access levels) denir. Java terimleriyle söylersek, eri- şim belirtkeleri sistemin güvenliğini sağlar. Dört tane erişim belirtkesi vardır:

doğal (default, native) Java öğesinin bildiriminde hiç bir niteleme kullanılmaz; öğenin doğal durumudur. Doğal nitelemde, aynı sı- nıf ve aynı paket içindeki öğeler birbirlerine erişebilirler. Örne- ğin, aynı sınıf içinde bir metot bir değişkene erişebilir, başka bir metodu çağırabilir. Aynı paket içindeki öğeler için de bu özelik geçerlidir.

public Bu niteleme halka açık sözünün anlamına benzer bir işleve sahiptir. public belirtkesi olan öğelere her yerden erişilebilir.

protected Bu öğelere altsınıflar ve aynı pakettekiler erişebilir.

(3)

private Bu niteleme özel mülkiyet sözünün anlamına benzer bir iş- leve sahiptir. private belirtkesi olan öğelere ancak aynı sınıftan erişilebilir.

Uyarı: Java 1.0 sürümünden önce varolan private protected be- lirtkesi, sonraki sürümlerden kaldırılmıştır. Yeni programlarda kulla- nılmaması gerekir. Ancak Java 1.0 sürümünden önce yazılmış prog- ramlarda yer almıştır.

1.1.1 Doğal (default ) Belirtke

Bir öğenin önüne hiçbir erişim belirtkesinin konmadığı durumdur. Eri- şim belirtkesi konmamışsa doğal (default) belirtke etkin olur. Buna, bazı kaynaklarda dostça erişim (frendly access) denir.

Doğal erişimli (default) sınıf bildirimi

Sınıf bidiriminde, sınıfın önüne hiçbir erişim belirtkesi konmazsa, o sınıf içindeki değişken ve metotlara o sınıfı içeren paketteki bütün kodlar erişebilir. Bildirimi şöyledir:

Örnek 1.1.1.

c l a s s c l a s s _ a d ı {

2 C l a s s g ö v d e s i }

Doğal (default) erişimli metot bildirimi

Metot bildiriminde hiçbir erişim belirtkesi konulmazsa, doğal (default) belirke geçerlidir. Doğal erişim nitelemli öğelere sınıftan, altsınıflardan ve aynı paket içindeki diğer sınıflardan erişebilir.

Örnek 1.1.2.

(4)

i n t t o p l a (i n t m, i n t n ) {

2 r e t u r n m+n ;

}

Doğal (default) erişimli değişken bildirimi

Değişken bildiriminde hiçbir erişim belirtkesi konulmazsa, hiçbir eri- şim belirtkesi konulmazsa, metotlarda olduğu gibi, doğal (default) be- lirke geçerlidir. Doğal erişim nitelemli öğelere sınıftan, altsınıflardan ve aynı paket içindeki diğer sınıflardan erişebilir.

Örnek 1.1.3.

f l o a t k e s i r ;

Paket bildirimi

Paketler yalnızca doğal erişime sahiptir, başka erişim belirtkesi al- mazlar. Paket içindeki her sınıf pakette olan her değişken ve metoda erişebilir. Ama başka paketlerdeki sınıflar erişemez.

Örnek 1.1.4.

p a c k a g e paket_adı { Paket g ö v d e s i }

Aşağıdaki program, sınıfın doğal erişim nitelemli öğesine altsı- nıftan erişilebildiğini gösteriyor.

Program 1.1.1.

p u b l i c c l a s s DDemo {

2

S t r i n g t e x t = " Java i y i b i r d i l d i r . ";// d o ğ a l e r i ş i m b e l i r t k e s i

(5)

p u b l i c S t r i n g getText ( ) { r e t u r n t e x t ;

7 }

p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { altDDemo a l t d d = new altDDemo ( ) ;

// e r i ş i l e b i l i r

12 System . out . p r i n t l n (" p u b l i c a n l ı k d e ğ i ş k e n : " + a l t d d . t e x t ) ;

System . out . p r i n t l n (" p u b l i c metot : " + a l t d d . getText ( ) ) ;

} }

17 c l a s s altDDemo e x t e n d s DDemo { p u b l i c S t r i n g altGetText ( ) {

// e r i ş i l e b i l i r r e t u r n t e x t ; }

22 }

/∗∗p u b l i c a n l ı k d e ğ i ş k e n : Java i y i b i r d i l d i r .

3 p u b l i c metot : Java i y i b i r d i l d i r .

∗/

1.1.2 public

public damgası bir değişkeni, bir metodu ya da bir sınıfı niteleyebilir.

Nitelediği öğeler herhese açık olur. Başka pakette olsa bile, program içindeki, her kod onlara erişebilir. public nitelemli bir sınıfın değiş- kenlerine ve metotlarına kendi altsınıfları ve dışarıdaki başka sınıflar kısıtsız erişebilir. public nitelemli değişkenler ve metotlar için de kısıt- sız erişim vardır. Uygulama programlarında main() metodunun public nitelemli olmasının nedeni budur.

Örnek 1.1.5.

• public sınıf bildirimi

(6)

1 p u b l i c c l a s s class_Demo { . . .

}

• public değişken bildirimi

p u b l i c l o n g r ;

• public metot bildirimi

p u b l i c d o u b l e toplam (i n t m, d o u b l e d ) { r e t u r n m + d ;

}

Program 1.1.2.

p u b l i c c l a s s PublicDemo {

2

p u b l i c S t r i n g t e x t = " Cumhuriyet Bayramı";

p u b l i c S t r i n g getText ( ) { r e t u r n t e x t ;

7 }

p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { PublicDemo pd = new PublicDemo ( ) ;

System . out . p r i n t l n (" p u b l i c a n l ı k d e ğ i ş k e n : " + pd . t e x t ) ;

12 System . out . p r i n t l n (" p u b l i c metot : " + pd . getText ( ) ) ; }

}

1 /∗∗

p u b l i c a n l ı k d e ğ i ş k e n : Cumhuriyet Bayramı p u b l i c metot : Cumhuriyet Bayramı

∗/

1.1.3 protected

Bir sınıf içindeki değişkenlere ve metotlara altsınıfların erişebilmesini, ama paket içindeki ya da program içindeki başka kodların erişme- sini engellemek isteyebiliriz. Bunun için sözkonusu öğeyi, protected

(7)

belirtkesi ile nitelemek yetecektir. Bu demektir ki, altsınıf, üstsınıfın protected nitelemli öğelerine sanki public öğelermiş gibi erişir. Görül- düğü gibi, protected belirtkesi, doğal belirtke ile private belirtkesinin işlevleri arasında bir işleve sahiptir. Altsınıflara erişme yetkisi verdiği için, kalıtım (inheritance) olgusunda önemli rol oynar.

Örnek 1.1.6.

• protected sınıf bildirimi]

1 p r o t e c t e d c l a s s c l a s s _ a d ı { C l a s s g ö v d e s i }

• protected değişken bildirimi

p r o t e c t e d l o n g r ;

• protected metot bildirimi

p r o t e c t e d d o u b l e toplam (i n t m, d o u b l e d ) { r e t u r n m + d ;

}

Program 1.1.3 , bir sınıfın protected nitelemli değişkenine alt sınıftan erişilebildiğini gösteriyor.

Program 1.1.3.

p u b l i c c l a s s ProtectedDemo {

2

p r o t e c t e d S t r i n g s t r = " İ s t a n b u l büyük b i r k e n t t i r . ";

p u b l i c S t r i n g metinYaz ( ) { r e t u r n s t r ;

7 }

p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {

altProtectedDemo b e l i r t k e = new altProtectedDemo ( ) ; // h a t a s ı z ç a l ı ş ı r

(8)

12 System . out . p r i n t l n (" p u b l i c a n l ı k d e ğ i ş k e n : " + b e l i r t k e . s t r ) ;

System . out . p r i n t l n (" p u b l i c metot : " + b e l i r t k e . metinYaz ( ) ) ;

} }

17 c l a s s altProtectedDemo e x t e n d s ProtectedDemo {

p u b l i c S t r i n g altMetinYaz ( ) { // h a t a s ı z ç a l ı ş ı r

r e t u r n s t r ; }

22 } /∗∗

p u b l i c a n l ı k d e ğ i ş k e n : İ s t a n b u l büyük b i r k e n t t i r .

3 p u b l i c metot : İ s t a n b u l büyük b i r k e n t t i r .

∗/

1.1.4 private

Bazı değişken, metot ya da sınıflara başka sınıftaki kodların eriş- mesini engellemek isteyebiliriz. Bunun için private nitelemesini kul- lanırız. private erişim belirtkesi, public belirtkesinin karşıtı gibidir.

private nitelemli öğelere yalnız aynı sınıftaki kodlar erişebilir, başka sınıftaki kodlar erişemez. Kendi altsınıfları bile erişemez. Bir altsı- nıf, atasının public ve doğal nitelemli öğelerine erişebilir, ama pri- vate nitelemli öğelerine erişemez. Onlara erişebilmesi için, super class interface−fonksiyonu kullanılır.

Örnek 1.1.7.

• private sınıf bildirimi

1 p r i v a t e c l a s s c l a s s _ a d ı { C l a s s g ö v d e s i

}

• private değişken bildirimi

(9)

p r i v a t e l o n g r ;

• private metot bildirimi

p r i v a t e d o u b l e toplam (i n t m, d o u b l e d ) { r e t u r n m + d ;

}

Program 1.1.4.

p u b l i c c l a s s PrivateDemo {

2

p r i v a t e S t r i n g s t r = "Ankara b a ş k e n t t i r . ";

p u b l i c S t r i n g metinYaz ( ) { r e t u r n s t r ;

7 }

p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {

altPrivateDemo b e l i r t k e = new altPrivateDemo ( ) ; // p r i v a t e d e ğ i ş k e n e e r i ş e m e z

12 System . out . p r i n t l n (" p u b l i c a n l ı k d e ğ i ş k e n : " + b e l i r t k e . s t r ) ;

System . out . p r i n t l n (" p u b l i c metot : " + b e l i r t k e . metinYaz ( ) ) ;

} }

17 c l a s s altPrivateDemo e x t e n d s PrivateDemo {

p u b l i c S t r i n g altMetinYaz ( ) { // p r i v a t e d e ğ i ş k e n e e r i ş e m e z r e t u r n s t r ;

}

22 }

Derleyici şu hata iletisini atar:

The f i e l d PrivateDemo . s t r i s not v i s i b l e/∗∗

3 ∗/

(10)

1.1.5 Alıştırmalar

Aşağıdaki örnek public ve static erişim belirtkelerinin kullanılışını gös- teriyor.

Program 1.1.5.

i m p o r t j a v a . u t i l . Scanner ;

2

i m p o r t j a v a . l a n g . Math ; p u b l i c c l a s s Demo {

7 p u b l i c s t a t i c d o u b l e Kuvvet ( ) { Scanner s = new Scanner ( System . i n ) ;

System . out . p r i n t l n ("Taban s a y ı y ı g i r i n i z : ") ; d o u b l e a = s . nextDouble ( ) ;

System . out . p r i n t l n (" S a y ı n ı n üssü g i r i n i z : ") ;

12 d o u b l e b = s . nextDouble ( ) ;

d o u b l e t = Math . pow ( a , b ) ; r e t u r n ( t ) ;

}

17 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { // Demo mat = new Demo ( ) ;

System . out . p r i n t l n ( Kuvvet ( ) ) ; }

}

/∗∗ S a y ı y ı g i r i n i z : 25 ,0

4 S a y ı n ı n üssünü g i r i n i z : 2 ,0

6 2 5 . 0

∗/

Program 1.1.6 doğal, public ve private nitelemli öğelere sınıf içinden erişilebildiğini gösteriyor.

Program 1.1.6.

(11)

c l a s s Test {

i n t a ; // d e f a u l t e r i ş i m

3 p u b l i c i n t b ; // p u b l i c e r i ş i m p r i v a t e i n t c ; // p r i v a t e e r i ş i m

// c ye e r i ş e n metot

v o i d s e t c (i n t i ) { // c ye d e ğ e r a t a r

8 c = i ;

}

i n t g e t c ( ) { // c nin d e ğ e r i r e t u r n c ;

13 }

p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Test t = new Test ( ) ;

t . s e t c ( 2 5 ) ;

18 t . a = t . g e t c ( ) / 5 ; t . b = 2 ∗ t . a ;

System . out . p r i n t l n ( t . a ) ; System . out . p r i n t l n ( t . b ) ; System . out . p r i n t l n ( t . c ) ;

23 }

}

1 /∗∗

5 10 25

∗/

Program 1.1.7, doğal ve public öğelere paket içinden erişilebil- diğini; ama private nitelemli öğeye sınıf dışından erişilemediğini gös- teriyor.

Program 1.1.7.

c l a s s S a y ı l a r {

i n t a ; // d e f a u l t e r i ş i m p u b l i c i n t b ; // p u b l i c e r i ş i m p r i v a t e i n t c ; // p r i v a t e e r i ş i m

5

(12)

// c ye e r i ş e n metot

v o i d s e t c (i n t i ) { // c ye d e ğ e r a t a r c = i ;

}

10

i n t g e t c ( ) { // c nin d e ğ e r i r e t u r n c ;

} }

15

p u b l i c c l a s s Test {

p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { S a y ı l a r t = new S a y ı l a r ( ) ;

t . s e t c ( 2 5 ) ;

20 t . a = t . g e t c ( ) / 5 ; t . b = 2 ∗ t . a ;

System . out . p r i n t l n ( t . a ) ; System . out . p r i n t l n ( t . b ) ; System . out . p r i n t l n ( t . c ) ; //

25 }

}

Program 1.1.7 derlenemez. Derleyici şu hata iletisini atar:

/∗∗

The f i e l d S a y ı l a r . c i s not v i s i b l e

∗/

Program 1.1.7 ’de, doğal ve public öğelere paket içinden erişi- lebildiğini; ama private nitelemli öğeye sınıf dışından erişilemediğini görmüştük. Program 1.1.8, private öğeye erişmek için, sınıfa ait bir metodu kullanıyor.

Program 1.1.8.

c l a s s S a y ı l a r {

2 i n t a ; // d e f a u l t e r i ş i m p u b l i c i n t b ; // p u b l i c e r i ş i m p r i v a t e i n t c ; // p r i v a t e e r i ş i m // c ye e r i ş e n metot

v o i d s e t c (i n t i ) { // c ye d e ğ e r a t a r

7 c = i ;

}

(13)

i n t g e t c ( ) { // c nin d e ğ e r i r e t u r n c ;

}

12 }

p u b l i c c l a s s Test {

p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { S a y ı l a r s = new S a y ı l a r ( ) ;

17 // a i l e b ye d i r e k t e r i ş i l e b i l i r s . a = 1 0 ;

s . b = 2 0 ;

// s . c = 1 0 0 ; // Hata !

22 // c ye e r i ş m e k i ç i n s ı n ı f ı n metodu k u l l a n ı l m a l ı s . s e t c ( 1 0 0 ) ; // g e ç e r l i

System . out . p r i n t l n ("a , b , and c : " + s . a + " " + s . b + " "

+ s . g e t c ( ) ) ;

27 }

}

Program 1.1.8’de 21.satır şu hata iletisini atar:

/∗∗

2 The f i e l d S a y ı l a r . c i s not v i s i b l e

∗/

Bu hatayı ayıklamak için, 21.satırı kapatıp 23.satırı yazalım.

Programın derlendiğini ve koştuğunu görebiliriz.

1.2 Öteki Belirtkeler

Bu belirtkeler, öğeye erişimi kısıtlama amacı gütmeyen, ama başka işlevleri olan nitelemlerdir. Şimdilik, programlarımızda sıkça kullan- dığımız belirtkeleri listelemekle yetineceğiz.

static Bir sınıfta değişken ve metotları niteler. Nitelediği öğe, nesne yaratılmaya gerek olmaksızın kullanılabilir. Örneğin, static ni- telemli bir değişkenin ana bellekte bir tek adresi, dolayısıyla bir

(14)

tek değeri vardır. Yaratılan bütün nesneler bu ortak değeri kul- lanır.

final Değişken, metot ve sınıfları sabitler. final nitelemli öğeler prog- ram boyunca değiştirilemezler.

abstract Soyut metot ve sınıfların bildirimi için kullanılır.

synchronized Thread’leri nitelemek için kullanılır.

volitile Thread’leri nitelemek için kullanılır.

Bu belirtkelerin kullanılışlarını hemen her örnekte göreceğiz. O nedenle, kısa açıklamalar yapmak yeterli olacaktır.

Erişim kısıtı koymayan belirtkelerinden anlık, static, final ve abstract nitelemeleriyle çok sık karşılarız.

1.2.1 anlık

Bir sınıfta bildirimi yapılan ve static olmayan (non-static, instantiate) değişken (veri alanı) ya da metot, anlık değişken ya da anlık metot olur. Anlık değişken ve anlık metotlar ancak sınıfa ait bir nesne yara- tılarak, o nesne içinde kullanılabilirler.

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 anlık metodun bir kopyası her nesne içinde oluşur. Metotlar override edilebildiğinden, bir metoda farklı nesnelerde aynı ya da farklı işler yaptırılabilir.

static

Bazı durumlarda değişkenlerin ya da metotların, onların sınıfına ait olarak yaratılacak nesnelerden bağımsız ve biricik olmalarını, farklı

(15)

nesnelerde farklı işlevlere sahip kopyalarının yaratılmamasını isteriz.

Bunun için static belirtkesini kullanırız.

static nitemli her değişkene ana bellekte ancak bir tane yer ayrı- lır; her nesne için ayrı yer ayrılmaz. Dolayısıyla, o değişkeni kullanacak her deyim, ona ayrılan tek adrese ulaşır. Böylece, o sınıfa ait bir çok nesne yaratılsa bile, static değişkenin ortak değerini 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 kul- lanır.

Benzer olarak, static belirtkesi ile nitelenen metoda ana bellekte ancak bir tane yer ayrılır; her nesne için ayrı yer ayrılmaz. Altsınıf- larda, aynı adlı başka metot tanımlanamaz. Overload veya overridden edilemez. Örneğin, main() metodu böyledir. Eğer birden çok main() metodu tanımlanırsa, sistem hangisini (önce) çağıracağını bilemez.

• static nitelemi metotlara ve değişkenlere verilebilir; sınıflara ve- rilemez.

• static nitelemli metot ancak static nitelemli verilere (değişken, sabit) erişebilir.

• static nitelemli metot, ancak static nitelemli metotları çağırabi- lir.

• static nitelemli öğeler this ve super anahtar sözcüklerini kul- lanamazlar.

Örnek 1.2.1.

Program 1.2.1.

s t a t i c i n t m= 5 ;

2 s t a t i c d o u b l e b ;

s t a t i c v o i d renkSec ( Color c o l o r ) { . . .

}

(16)

1.2.2 Alıştırmalar

Program 1.2.2’deki StaticDemo sınıfına ait a,b değişkenleri ile veri- Yaz() ve main() metotları static nitelemlidirler. StaticDemo sınıfına ait bir nesne yaratılmaksızın, main() metodu static veriYaz() meto- dunu çağırıyor. O da static a,b değişkenlerine erişiyor ve değerlerini yazıyor. b değişkenine değer atanmadığı için, öndeğerinin 0.0 olduğunu anımsayınız.

Program 1.2.2.

c l a s s StaticDemo {

s t a t i c i n t a = 1 8 ;

4 s t a t i c d o u b l e b ;

s t a t i c v o i d veriYaz (i n t x ) {

System . out . p r i n t l n ("x = " + x ) ; System . out . p r i n t l n ("a = " + a ) ;

9 System . out . p r i n t l n ("b = " + b ) ; }

p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { veriYaz ( 7 3 ) ;

14 }

}

/∗∗x = 73 a = 18 b = 0 . 0

5 ∗/

Program 1.2.3’de Veriler sınıfındaki a, b değişkenleri ile sayı- Yaz() metodu static nitelemlidir. StaticDemo sınıfındaki static main() metodu Veriler sınıfındaki static sayıYaz() metodunu çağırıyor.

Çağrılan metot static a, b değişkenlerine erişip, onların değerlerini yazıyor.

Program 1.2.3.

(17)

c l a s s V e r i l e r {

s t a t i c i n t a = 8 7 ;

5 s t a t i c f l o a t b = 3 5 . 8 f ;

s t a t i c v o i d s a y ı sayıYaz ( ) {

System . out . p r i n t f ("a = %d %nb = %f %n ", a , b ) ; }

10 }

c l a s s StaticDemo {

p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { V e r i l e r . yaz ( ) ;

15 }

} /∗∗

a = 87

b = 35 ,799999

4 ∗/

Uyarı 1. 1.2.3’de Veriler sınıfını public yapmayı deneyiniz. Derleyici şu hata iletisi atacaktır:

1 c l a s s V e r i l e r i s p u b l i c , should be d e c l a r e d i n a f i l e named V e r i l e r . j a v a

Bunun nedeni, programın adının main() metodunu içeren sınıfın adıyla aynı olmasıdır; yani StaticDemo.java. Dolayısıyla, public nitelemi yal- nızca StaticDemo sınıfına verilebilir.

Şimdi Program 1.2.3’de bazı değişiklikler yapalım. Veriler sı- nıfındaki sayıYaz() metodunun static nitelemini kaldıralım ve public yapalım. StaticDemo sınıfındaki static main() metodu Veriler sını- fındaki public sayıYaz() metodunu çağıramayacaktır.

Program 1.2.4.

c l a s s V e r i l e r {

(18)

4 s t a t i c i n t a = 8 7 ; s t a t i c f l o a t b = 3 5 . 8 f ;

s t a t i c v o i d s a y ı sayıYaz ( ) {

System . out . p r i n t f ("a = %d %nb = %f %n ", a , b ) ;

9 }

}

c l a s s StaticDemo {

p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {

14 V e r i l e r . sayıYaz ( ) ; }

}

Bu programı derlemek istediğimizde, derleyici şu hata iletisini atacak- tır:

non−s t a t i c method sayıYaz ( ) cannot be r e f e r e n c e d from a s t a t i c c o n t e x t

Bunun nedeni, static metotların ancak statik öğelere erişebilir olması- dır. static main() metodu anlık sayıYaz() metodunu çağıramaz. Bu hatayı ayıklamak (debug) için, şu iki yöntemden birisini uygulayabi- liriz.

• sayıYaz() metodunu tekrar static yapabiliriz, ki bu önceki prog- ramda yapıldı.

• Veriler sınıfına ait bir nesne yaratabilir, ve o nesne içinden sayıYaz()metodunu çağırabiliriz.

İkinci yöntemi deneyelim. Veriler sınıfının veri adlı bir nesnesini yaratalım. veri adlı referans (pointer) yardımıyla, 16.satırdaki

v e r i . sayıYaz ( ) ;

deyimi sayıYaz() metodunu çağırabilir. Bu metot, veri nesnesi için- den static a, b değişkenlerine erişebilir ve değerlerini yazar. Çünkü, static öğelere sınıf adı referans verilerek doğrudan erişilebildiği gibi, nesne içinden de öğe adlarıyla erişilebilir.

(19)

Program 1.2.5.

c l a s s V e r i l e r {

s t a t i c i n t a = 8 7 ;

4 s t a t i c f l o a t b = 3 5 . 8 f ;

p u b l i c v o i d sayıYaz ( ) {

System . out . p r i n t f ("a = %d %nb = %f %n ", a , b ) ; }

9 }

p u b l i c c l a s s StaticDemo {

p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {

14 V e r i l e r v e r i = new V e r i l e r ( ) ; v e r i . sayıYaz ( ) ;

} }

\ b e g i n { l s t l i s t i n g }

19 /∗∗

a = 87

b = 35 ,799999

∗/

1.2.3 final

Bu belirtke nitelediği öğenin sabit kılındığını ve değiştirilemeyeceğini belirtir. Eğer final belirtkesi sınıf (class) öğeleri için kullanılırsa, o sınıfın altsınıfları yaratılamaz. Metoda uygulanan final belirtkesi o metodun baskılanamayacağını (overridden) söyler. Değişkene uygu- landığında ise, o değişkeni bir sabit (constant) yapar. final nitelemli değişkenleri büyük harflerle yazmak Java’nın bir geleneğidir. Böylece, kaynak programa bakan kişi, onun bir sabit olduğunu anlar.

final değişken bildirimi :

f i n a l i n t ILK_DEGER = 1 ;

3 f i n a l f l o a t KATSAYI = 9 . 8 ;

(20)

final metot bildirimi :

c l a s s DeneSin {

2

// bu d e ğ i ş k e n i n d e ğ e r i değişemez f i n a l i n t sayac = 2 1 ;

// bu metot o v e r r i d e e d i l e m e z

7 f i n a l i n t deneMetot (i n t a , i n t b ) {

} }

1.2.4 abstract

absractbelirtkesi soyut sınıf ve soyut metot yaratır. Soyut metotların adı, değişkenleri ve değer-tipi (return type) belirtilir, ama metot göv- desi 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.

1 a b s t r a c t v o i d renk ( Color c o l o r ) ;

(21)
(22)

öteki belirtkeler, 13 abstract, 20 access modifiers, 2 anlık, 14

belirtkeler, 13 default access, 3 doğal, 4 doğal erişim, 3

doğal erişim belirtkesi, 3, 4 erişebilme, 2

erişim belirtkesi, 2 final, 19

instantiate, 14 modifier, 1 niteleme, 1 package, 4 paket, 4 private, 8 protected, 6 public, 5

Referanslar

Benzer Belgeler

her nesne için aynı işi yapan static bir metot tanımlanır ve bütün nesneler için ayrı ayrı oluşturulmaz.. Bellekten

Aşağıdaki cümlelerin noktalı yerlerini “benzer olarak, farklı olarak, aynısı, …den daha, kadar, gibi ” ifadelerinden uygun olanlarıyla tamamlayınız.. • Bu

Aşağıdaki cümlelerin noktalı yerlerini “benzer olarak, farklı olarak, aynısı, …den daha, kadar, gibi ” ifadelerinden uygun olanlarıyla tamamlayınız.. bende

Öğrenci Ders Çemberi (Öğretmene koçluk çalışmasında yardımcı olacak bir formdur. Koç öğretmen istediği zaman öğrenciye uygulayabilir, ders kutuları boş

Durum böyle olunca günümüzdeki bazı modern Hint-Avrupa dil ailesine ait dillerdeki örneğin İngilizcedeki başta bulunan KN sessizlerinden K’nin okunmamasına

Helvius Cinna, Ticida, Bibaculus onun eşsiz bir öğretmen, üstün yorumcu, usta bir ozan olduğunu söylemişler ve ona övgüler dizmişlerdir.. Latince gramer

Parazit kopepotların bazıları, yapı bakımından serbest kopepotlardan çok farklı değildir: Bunlarda yalnız ağız üyeleri delme aygıtına değişmiş bazı üyeler de

inci elemanına ulaşmak için dizinin adından sonra köşeli parantez içinde dizi elemanının indis numarası yazılır.. Eğer indis numarası yazılmazsa ilk eleman olan