Java Nitelemleri. Bölüm 1

Benzer belgeler
Bölüm 10 Statik ve Anlık Öğeler

BMM3101 PROGRAMLAMA DİLLERİ

// hataları işaret eden referans

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

NESNEYE YÖNELİK PROGRAMLAMA

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

Java Programlamada Paket Yapısı Ve Import

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

7. HAFTA. Erişim Belirleyiciler

BİL-141 Bilgisayar Programlama I (Java)

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

public static int Toplam int x, int y

Sunum İçeriği. Programlamaya Giriş

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Erişim konusunda iki taraf vardır:

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Java da, tüm değişkenlerin kullanılmadan önce tanımlanması edilmesi gerekir. Bir değişken tanımlamanın temel gösterimi bu şekildedir:

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

Ders 8: Metotlar. barisgokce.com

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

HSancak Nesne Tabanlı Programlama I Ders Notları

BİL-142 Bilgisayar Programlama II

MOBIL UYGULAMA GELIŞTIRME

Mantıksal İşlemler. 7.1 true, false, nil

BTEP243 Ders 3. class Yazım Kuralı:

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Programlama Dillerinde Kullanılan Veri Tipleri

Nesne Yönelimli Programlama

BBS515 Nesneye Yönelik Programlama. Ders 2 Zümra Kavafoğlu

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

ELN1001 BİLGİSAYAR PROGRAMLAMA I

BMH-303 Nesneye Yönelik Programlama

3. Bölüm Soyut Sınıflar (Abstract Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

C#(Sharp) Programlama Dili

Metotlar. d e f metot_adı [ ( [ arg [= d e f a u l t ] ]... [, arg [, &expr ] ] ) ] deyim ( l e r ) end

YZM 2105 Nesneye Yönelik Programlama

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

Nesne Yönelimli Programlama

Yazılım Kodlama ve İ simlendirme Standartları v1.0

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Java Programlamada Paket Yapısı Ve Import

Ders 8 Konu Özeti ve Problemler

5. Bölüm Alt Sınıflar (Nested Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 9

Karşılaştırma İşlemleri ve Koşullu İfadeler

Kalıtım (Inheritance)

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

Programlama Dilleri 1. Ders 12: Belirleyiciler ve Niteleyiciler

YZM 2105 Nesneye Yönelik Programlama

Bire-bir Sahiplik İlişkisi ile İlgili Sorular:

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Nesne Yönelimli Programlama

Nesneye Dayalı Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

Java dili, aşağıdakiler de dahil olmak üzere çok çeşitli denetleyici türlerine sahiptir.

Bu parçalar arasındaki ilişkiyi kullanıp büyük çaplı programlar geliştirme tekniğine de nesne yönelimli programlama denir.

Nesneye yönelik: Javada herşey bir nesnedir. Java nesne yönelimli olduğu için kolayca geliştirilebilir.

HSancak Nesne Tabanlı Programlama I Ders Notları

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Öğr. Gör. Musa AYDIN Fatih Sultan Mehmet Vakıf Üniversitesi

YZM 2105 Nesneye Yönelik Programlama

Java Dersi. Altuğ Bilgin Altıntaş

Bölüm 12. Nesne yönelimli programlama desteği

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Operator Aşırı Yükleme (Operator OverLoading)

C++ Dersi: Nesne Tabanlı Programlama

NESNEYE YÖNELİK PROGRAMLAMA

C++ Dersi: Nesne Tabanlı Programlama

Nesne Tabanlı Programlama

Lambda İfadeleri (Lambda Expressions)

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

Pointer Kavramı. Veri Yapıları

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 11: Metot Kavramı

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2

Klavyeden Basit Giriş/Çıkış İşlemleri

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Doç. Dr. Aybars UĞUR

YZM 2105 Nesneye Yönelik Programlama

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

Göstericiler (Pointers)

Transkript:

Bölüm 1 Java Nitelemleri (Modifiers In Java) Java dilinde nitelemler (modifiers), bildirimlerinde java öğelerinin 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 public c l a s s Toplama {... p r i v a t e boolean bayrak ; s t a t i c f i n a l double oran = 7.86; protected s t a t i c f i n a l i n t KATSAYI = 12; public s t a t i c void main( String [ ] args ) {... bildirimlerindeki public, private, static ve protected anahtar sözcükleri birer nitelemdir (modifier). Nitelemleri başlıca iki gruba ayırabiliriz: 1

2 1. java nitelemleri Erişim Belirtkeleri Öteki Belirtkeler 1.1 Erişim Belirtkeleri Bir java deyimi, belirli bir iş yapan kod veya kodlardan oluşan bloktur. 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 atayabiliyor 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 atayabilen 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 (Access 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. 2

1.1. Erişim Belirtkeleri 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 belirtkesi, sonraki sürümlerden kaldırılmıştır. Yeni programlarda kullanılmaması gerekir. Ancak Java 1.0 sürümünden önce yazılmış programlarda 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 class_adı { 2 Class gövdesi 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. 3

4 1. java nitelemleri i n t topla ( i n t m, i n t n) { 2 return 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) 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.3. f l o a t kesir ; Paket bildirimi Paketler yalnızca doğal erişime sahiptir, başka erişim belirtkesi almazlar. 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. package paket_adı { Paket gövdesi 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. 2 public c l a s s DDemo { String text = "Java i y i bir d i l d i r. " ; // doğal erişim b e l i r t k e s i 4

1.1. Erişim Belirtkeleri 5 public String gettext () { return text ; 7 public s t a t i c void main( String [ ] args ) { altddemo altdd = new altddemo () ; // e r i ş i l e b i l i r 12 System. out. println (" public anlık değişken : " + altdd. text ) ; System. out. println (" public metot : " + altdd. gettext () ) ; 17 c l a s s altddemo extends DDemo { public String altgettext () { // e r i ş i l e b i l i r return text ; 22 / public anlık değişken : Java i y i bir d i l d i r. 3 public metot : Java i y i bir 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ıtsı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 5

6 1. java nitelemleri 1 public c l a s s class_demo {... public değişken bildirimi public long r ; public metot bildirimi Program 1.1.2. public double toplam ( i n t m, double d){ return m + d ; 2 public c l a s s PublicDemo { public String text = "Cumhuriyet Bayramı" ; public String gettext () { return text ; 7 public s t a t i c void main( String [ ] args ) { PublicDemo pd = new PublicDemo () ; System. out. println (" public anlık değişken : " + pd. text ) ; 12 System. out. println (" public metot : " + pd. gettext () ) ; 1 / public anlık değişken : Cumhuriyet Bayramı public 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şmesini engellemek isteyebiliriz. Bunun için sözkonusu öğeyi, protected 6

1.1. Erişim Belirtkeleri 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üldüğü 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 protected c l a s s class_adı { Class gövdesi protected değişken bildirimi protected long r ; protected metot bildirimi protected double toplam ( i n t m, double d){ return 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. 2 public c l a s s ProtectedDemo { protected String str = " İstanbul büyük bir kenttir. " ; public String metinyaz () { return str ; 7 public s t a t i c void main( String [ ] args ) { altprotecteddemo belirtke = new altprotecteddemo () ; // hatasız ç a l ı ş ı r 7

8 1. java nitelemleri 12 System. out. println (" public anlık değişken : " + belirtke. str ) ; System. out. println (" public metot : " + belirtke. metinyaz () ) ; 17 c l a s s altprotecteddemo extends ProtectedDemo { public String altmetinyaz () { // hatasız ç a l ı ş ı r return str ; 22 / public anlık değişken : İstanbul büyük bir kenttir. 3 public metot : İstanbul büyük bir kenttir. / 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 kullanı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 private 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 class_adı { Class gövdesi private değişken bildirimi 8

1.1. Erişim Belirtkeleri 9 p r i v a t e long r ; private metot bildirimi p r i v a t e double toplam ( i n t m, double d){ return m + d ; Program 1.1.4. 2 public c l a s s PrivateDemo { p r i v a t e String str = "Ankara başkenttir. " ; public String metinyaz () { return str ; 7 public s t a t i c void main( String [ ] args ) { altprivatedemo belirtke = new altprivatedemo () ; // private değişkene erişemez 12 System. out. println (" public anlık değişken : " + belirtke. str ) ; System. out. println (" public metot : " + belirtke. metinyaz () ) ; 17 c l a s s altprivatedemo extends PrivateDemo { public String altmetinyaz () { // private değişkene erişemez return str ; 22 Derleyici şu hata iletisini atar: / The f i e l d PrivateDemo. str i s not v i s i b l e 3 / 9

10 1. java nitelemleri 1.1.5 Alıştırmalar Aşağıdaki örnek public ve static erişim belirtkelerinin kullanılışını gösteriyor. Program 1.1.5. 2 import java. u t i l. Scanner ; import java. lang. Math ; public c l a s s Demo { 7 public s t a t i c double Kuvvet () { Scanner s = new Scanner ( System. in ) ; System. out. println ("Taban sayıyı g i r i n i z : ") ; double a = s. nextdouble () ; System. out. println ("Sayının üssü g i r i n i z : ") ; 12 double b = s. nextdouble () ; double t = Math.pow(a, b) ; return ( t ) ; 17 public s t a t i c void main( String [ ] args ) { // Demo mat = new Demo() ; System. out. println (Kuvvet () ) ; / Sayıyı g i r i n i z : 25,0 4 Sayının üssünü g i r i n i z : 2,0 625.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. 10

1.1. Erişim Belirtkeleri 11 c l a s s Test { i n t a ; // default erişim 3 public i n t b ; // public erişim p r i v a t e i n t c ; // private erişim // c ye erişen metot void setc ( i n t i ) { // c ye değer atar 8 c = i ; i n t getc () { // c nin değeri return c ; 13 public s t a t i c void main( String [ ] args ) { Test t = new Test () ; t. setc (25) ; 18 t. a = t. getc () / 5; t. b = 2 t. a ; System. out. println ( t. a) ; System. out. println ( t. b) ; System. out. println ( t. c ) ; 23 1 / 5 10 25 / Program 1.1.7, doğal ve public öğelere paket içinden erişilebildiğini; ama private nitelemli öğeye sınıf dışından erişilemediğini gösteriyor. Program 1.1.7. 5 c l a s s Sayılar { i n t a ; // default erişim public i n t b ; // public erişim p r i v a t e i n t c ; // private erişim 11

12 1. java nitelemleri 10 15 // c ye erişen metot void setc ( i n t i ) { // c ye değer atar c = i ; i n t getc () { // c nin değeri return c ; public c l a s s Test { public s t a t i c void main( String [ ] args ) { Sayılar t = new Sayılar () ; t. setc (25) ; 20 t. a = t. getc () / 5; t. b = 2 t. a ; System. out. println ( t. a) ; System. out. println ( t. b) ; System. out. println ( t. c ) ; // 25 Program 1.1.7 derlenemez. Derleyici şu hata iletisini atar: / The f i e l d Sayılar. 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şilebildiğ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 Sayılar { 2 i n t a ; // default erişim public i n t b ; // public erişim p r i v a t e i n t c ; // private erişim // c ye erişen metot void setc ( i n t i ) { // c ye değer atar 7 c = i ; 12

1.2. Öteki Belirtkeler 13 12 i n t getc () { // c nin değeri return c ; public c l a s s Test { public s t a t i c void main( String [ ] args ) { Sayılar s = new Sayılar () ; 17 // a i l e b ye direkt e r i ş i l e b i l i r s. a = 10; s. b = 20; // s. c = 100; // Hata! 22 // c ye erişmek i ç i n s ı n ı f ı n metodu kullanılmalı s. setc (100) ; // g e ç e r l i System. out. println ("a, b, and c : " + s. a + " " + s. b + " " + s. getc () ) ; 27 Program 1.1.8 de 21.satır şu hata iletisini atar: / 2 The f i e l d Sayılar. 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 kullandığı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 nitelemli bir değişkenin ana bellekte bir tek adresi, dolayısıyla bir 13

14 1. java nitelemleri tek değeri vardır. Yaratılan bütün nesneler bu ortak değeri kullanır. final Değişken, metot ve sınıfları sabitler. final nitelemli öğeler program 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 yaratı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ı 14

1.2. Öteki Belirtkeler 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 kullanı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ı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ımlanırsa, sistem hangisini (önce) çağıracağını bilemez. static nitelemi metotlara ve değişkenlere verilebilir; sınıflara verilemez. static nitelemli metot ancak static nitelemli verilere (değişken, sabit) erişebilir. static nitelemli metot, ancak static nitelemli metotları çağırabilir. static nitelemli öğeler this ve super anahtar sözcüklerini kullanamazlar. Ö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 double b ; s t a t i c void renksec ( Color color ) {... 15

16 1. java nitelemleri 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() metodunu ç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 = 18; 4 s t a t i c double b ; s t a t i c void veriyaz ( i n t x) { System. out. println ("x = " + x) ; System. out. println ("a = " + a) ; 9 System. out. println ("b = " + b) ; public s t a t i c void main( String args [ ] ) { veriyaz (73) ; 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. 16

1.2. Öteki Belirtkeler 17 c l a s s Veriler { s t a t i c i n t a = 87; 5 s t a t i c f l o a t b = 35.8 f ; 10 s t a t i c void sayı sayıyaz () { System. out. printf ("a = %d %nb = %f %n ", a, b) ; c l a s s StaticDemo { public s t a t i c void main( String args [ ] ) { Veriler. 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 Veriler i s public, should be declared in a f i l e named Veriler. java 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 yalnı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 Veriler { 17

18 1. java nitelemleri 4 s t a t i c i n t a = 87; s t a t i c f l o a t b = 35.8 f ; s t a t i c void sayı sayıyaz () { System. out. printf ("a = %d %nb = %f %n ", a, b) ; 9 c l a s s StaticDemo { public s t a t i c void main( String args [ ] ) { 14 Veriler. sayıyaz () ; Bu programı derlemek istediğimizde, derleyici şu hata iletisini atacaktır: non s t a t i c method sayıyaz () cannot be referenced from a s t a t i c context 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 uygulayabiliriz. sayıyaz() metodunu tekrar static yapabiliriz, ki bu önceki programda 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 veri. sayıyaz () ; deyimi sayıyaz() metodunu çağırabilir. Bu metot, veri nesnesi içinden 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. 18

1.2. Öteki Belirtkeler 19 Program 1.2.5. c l a s s Veriler { s t a t i c i n t a = 87; 4 s t a t i c f l o a t b = 35.8 f ; 9 public void sayıyaz () { System. out. printf ("a = %d %nb = %f %n ", a, b) ; public c l a s s StaticDemo { public s t a t i c void main( String args [ ] ) { 14 Veriler veri = new Veriler () ; veri. sayıyaz () ; \begin{ 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 uygulandığı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 ; 19

20 1. java nitelemleri 2 final metot bildirimi: c l a s s DeneSin { // bu değişkenin değeri değişemez f i n a l i n t sayac = 21; // bu metot override edilemez 7 f i n a l i n t denemetot ( i n t a, i n t b) { 1.2.4 abstract absract belirtkesi 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ö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. 1 abstract void renk ( Color color ) ; 20

Kaynakça 21

Dizin ö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 22