0% found this document useful (0 votes)
46 views93 pages

EBT 547 - Java Programlama PDF

Uploaded by

ahmet sezer
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
46 views93 pages

EBT 547 - Java Programlama PDF

Uploaded by

ahmet sezer
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

SAKARYA ÜNİVERSİTESİ

Java Programlama 
Hafta 1 
 
Prof. Dr. Ümit KOCABIÇAK 
 
 

Bu ders içeriğinin basım, yayım ve satış hakları Sakarya Üniversitesi’ne aittir. "Uzaktan Öğretim" tekniğine uygun olarak hazırlanan 
bu ders içeriğinin bütün hakları saklıdır.  İlgili kuruluştan izin almadan ders içeriğinin tümü ya da bölümleri mekanik, elektronik, 
fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz.  
Her hakkı saklıdır © 2009 Sakarya Üniversitesi 
 
 
 

 1. Java 
Java SUN bilgisayar şirketince orijinal olarak elektrikli ev araçlarının (mikrodalga fırınları, buzdolapları, 
televizyonlar, uzaktan kumanda cihazları vs.) birbiriyle haberleşmesini sağlamayı amaçlayan bir proje 
içerisinde 1991 yılında geliştirilmeye başlandı.  

OAK olarak konulan programlama dili daha sonra bu isimde başka bir programlama dili olduğu 
keşfedilince, o anda kahve içen programlama grubu tarafından kahve markasından esinlenerek Java olarak 
değiştirildi.  

1993 Yılında internet büyük bir atılım göstererek bütün dünyaya yayılmaya başladı. Java’nın Dinamik Web 
sayfaları hazırlamadaki büyük potansiyelini gören SUN şirketi projeyi bu tarafa yönlendirdi ve bu Java’ya 
yeni bir canlılık ve yaşama umudu sağladı. 

Mayıs 1995 de SUN Java’yı büyük bir konferansta tanıttı. Java büyük bir ilgiyle karşılandı. Java modern 
bilgisayar dünyasının ses, grafik işlem, haberleşme gibi ihtiyaçlarına cevap verebilen ve ticari gayeler için 
hazırlanan bir Program dili olarak daha önceki bilgisayar dillerinin hiç birinin kapsayamadığı özellikleri 
içermekteydi.  

1.1. Java Programlama Dilinin Özellikleri 

Her ortamda çalışabilir 

Java  teknolojisinin  en  önemli  özelliği  her  ortamda,  en  küçük  bilgisayarlardan  süper  bilgisayarlara  kadar, 
çalışabilmesidir.  Java  teknolojisi  bileşenleri  nasıl  bir  bilgisayar,  telefon,  televizyon,  veya  işletim  sistemi 
olduğuna bakmaksızın Java platformunu destekleyen her türlü ortamda çalışır 

Basit  

Java ile program hazırlamak oldukça kolay ve zevklidir. Daha önce bir programlama dili ile çalışmış veya en 
az bir nesneye programlama dili ile çalışmak yeterlidir.  

Nesneye dayalı 

İleri ki bölümlerde anlatılacağı gibi sınıf ve nesne yapılarıyla daha kolay, defalarca kullanılabilen modüller 
yaratılabilir. 

Güvenli 

Java programlama dili hazırlanan programlar bugün güveliğin çok önemli üst düzey devlet kuruluşlarında 
ve NASA da kullanılmaktadır.  

Yüksek Performans 

Java  ile  hazırlanan  programlar  hızlı  çalışmaları  ve  bilgisayara  az  yük  getirmeleri  nedeniyle  İnternet  ve 
intranet uygulamalarında tercih edilmektedir. 

Server Üzerine Az Yük 

Java diğer Web tabanlı programlama dillerine göre sunuculara daha az yük getirmektedir. 


 
 

1.2. Java Teknolojisinin Farklı Versiyonları 

Her  şeyi  her  cihazda  uygulamaya  çalışmaya  yönelik  “her  şeye  uyan  tek  bir  şey”  problemini  ortadan 
kaldırmak için, Java 2 Platformu üç versiyona bölünmüştür:  

Java 2 Enterprise Edition (J2EE) : karmaşık sunucu çözümlerini yaygınlaştırmak için tasarlanmıştır;  

Java 2 Standard Edition (J2SE) : masaüstü bilgisayarlarda kullanılır;  

Java  2  Micro  Edition  (J2ME)  :  Cep  telefonları  gibi  küçük  tüketici  elektroniği  cihazları  için  özel  olarak 
tasarlanmıştır.  

Bu yaklaşım, farklı tipte cihazlar için uygun fonksiyonellik bulunmasını garanti eder.  

Biz derslerimizde Java 2 Standart Edition kullanacağız. 

1.3. Java Geliştirme Seti 

Her programda oldugu gibi java programlarinda da ilk evre programi yazmaktir. Java programları editör 
programiyla yazilabilirler. Örnegin Unix sistemlerinde vi veya emacs, Windows’da Notepad veya WordPad 
programlari kullanilabilir. Programı direkt içinde yazılıp çalıştırılabilen Netbeans, JCreator, Eclipse gibi Java 
gelistirme paketleri de mevcuttur. Biz dersimizde SUN firmasının bir ürünü olan Netbeans editörünü tercih 
edeceğiz.  

Netbeans editörlü Java gelistirme seti (Java Developers kit ‐ JDK) SUN bilgisayar sirketinin  

[Link]

internet adresinden ücretsiz indirilebilir. Lisans anlaşmasına göre program dilini bedava olarak 
kullanabilirsiniz, ancak satacağınız profesyonel bir program geliştirdiğinizde Sun şirketine kazancınız 
üzerinden belirli bir yüzde ödemeniz gerekecektir. 


 
1.4. Java Programını Yazma ve Çalıştırma 

2. Java Bileşenleri 
Java programları komutlar, anahtar sözcükler, tanıtıcılar, hazır bilgiler, işletmenler, ayırıcılar ve boşluğun 
bileşeninden oluşmaktadır. 

 Boşluk : Java bağımsız bir dildir. Düzgün çalışmasını sağlamak amacıyla herhangi bir şeyi içerden yazmak 
zorunda değilsiniz. İfadeler arasında istenildiği kadar boşluk bırakılabilir.   

Açıklamalar  : Açıklamalar bir programın yürütme zamanına katkıda bulunmasalar bile, uygun bir şekilde 
kullanıldığında kaynak kodun en değerli kısmını oluşturmaktadır. Geniş programların anlaşılması da 
oldukça zordur. Ancak bir sınıfın ya da bir yöntemin ne ve niçin sorularına yanıt verebilen açıklamaları  
kullanıcılar için oldukça yararlıdır. Bir kod satırını basit bir şekilde yineleyen komutlar, çok fazla değer 
eklemez, ancak algoritmayı gösteren ya da açıklayan komutlar programcılar için işaretçidir. 

Açıklamalar tek satırlı veya çok satırlı olabilir. 

Tek satırlı komutlar, // ile başlar ve satır sonunda biter. Bu komut türü. tek satırlı bir kodun kısa 
açıklamalarında kullanışlıdır. 

c = b*d;   //  c  alanı göstermektedir 

  

Daha uzun komutlar için, /* ile başlayıp */ ile biten uzun çok satırlı komutlar hazırlayabilirsiniz. /* ile */ 
arasında yer alan herhangi bir şey bir komut olarak ele, alınır ve derleyici tarafından göz ardı edilir. 

/*    * burada 2. derece denklemin 

    * kökleri bulunmaktadır. 

   */ 


 
2.1. Özel Amaçlı Anahtar Sözcükler 

Özel amaçlı anahtar sözcükler özel tanıtıcılardır ve programın tanımlanmasını kontrol etmek için Java dili 
tarafından kullanılmaktadır. Yerleşik türleri, değiştiricileri ve akış kontrolü için mekanizmayı tanıtmak için 
kullanır. Bunlar toplam 59 tane özel amaç için ayrılmış sözcüktür. İşletmen ve ayırıcıların sözdiziminin 
birleştirilmesi ile oluşturulmuş olan bu anahtar sözcükler, Java dilinin tanımlanmasını biçimlendirir. Bu 
anahtar sözcükler yalnızca istenen amaca hizmet ederler ve bir değişken, bir sınıf ya da bir yöntem adı için 
tanıtıcı olarak kullanılamazlar. 

2.2. Tanıtıcılar 

Tanıtıcılar sınıf, yöntem ve değişken adları için kullanılır. Bir tanıtıcı büyük ve küçük harf, sayılar, altçizgi ve 
dolar işareti ($) karakterinden oluşan bir tanımlayıcı dizidir. Bir sayı ile başlamamalıdır. 

Java’nın  küçük‐büyük  harfe  duyarlıdır.  OKUL  ile  Okul  birbirinden  farklı  tanıtıcılardır.  Geçerli  tanıtıcılar 
içerisinde tadSoyad, tx3 söyleyebiliriz. 3x,  #cisim ve @2 geçerli olmayan değişken adlarıdır. 

Sabitleri gösteren sonuç (final) değişkenler için tümüyle büyük harf kullanılır, PI_SAYISI gibi. 


 
2.3. Ayırıcılar 

 
2.4. Değişkenler 

Bir Java programında temel bellek birimi değişkenlerdir. Bir tanıtıcı, tür ve kapsam birleşerek bir değişkeni 
tanımlayabilir.  Değişkenlerinizi  bildirdiğiniz  yere  bağlı  olarak,  geçici  bir  kapsam  için  yerel  olabilir  ya  da 
sınıftaki  tüm  yöntemlere  erişebilen  örnek  değişkenler  olabilir.  Yerel  kapsamlar  küme  parantezi  ile 
gösterilir.  

Bir değişken aşağıdaki şekilde ifade edilebilir: 

tür tanıtıcı [ = değer] [, tanıtıcı [= değer] ...] ; 

Tür  bir  bayt,  short,  int,  long,  char,  float,  double  ve  boolean  değer  ya  da  bir  sınıf  veya  arabirimin  adı 
olabilir. 

 
 

2.5. Türler (Değer Tipleri) 

Java’da sekiz basit tür yer almaktadır: byte, short, int, long char, float, double ve boolean. Bunlar 
dört ana grupta toplanmaktadır: 

 Tamsayılar: byte, short, int ve long tam değerli sayılardır.  


 
 
Virgüllü sayılar: float ve double virgüllü sayıları gösterir. 

 
Karakterler : Java bir dizilimdeki karakterleri göstermek için Unicode kullandığı için, char türü işaretsiz 16 
bitten oluşur ve uluslararası Unhicoed karakter setinin binlerce karakterinden on tanesini depolamak için 
kullanılır.  Bir  char’ın  aralığı  0  ile  65536  arasıdır.  Negatif  karakter  yoktur.  ASCII  olarak  bilinen  standart 
karakter setinin aralığı 0 ile 127 arasıdır. 

char bildirimlerine örnekler aşağıda verilmektedir: 

 char c; 
char c2 = 0xf132;  
char c3 ='a';  
char c4 ='\n';  
  

Karakterleri  tamsayı  olarak  kullanamasanız  da  tamsayı  olarak  işletebilirsiniz.  İki  karakteri  birlikte 
toplayabilirsiniz ya da bir karakter değişkenin değerini artırabilirsiniz. 

 Aşağıda  verdiğimiz  örnekte  taban  karakterden  başladık  ve  istediğimiz  sayıyı  gösteren  bir  tamsayıyı 
ekledik: 

 int iki = 2;  
char bir ='1'; 
char üç = (char) (iki + bir); 
 

Boolean değerler : Java’da mantıksal değerler için adı boolean olan bir tür vardır. Olası olan iki değerden 
yalnızca birine sahip olabilir: Doğru (true) ve yanlış (false). Bunlar özel bir amaç için ayrılmış sözcüklerdir. 
Boolean, if, while ve do gibi koşullu akış kontrol işletmenleri tarafından gereksinim duyulan bir türdür. 

 Bir boolean aşağıdaki gibi bildirilir: 

 boolean done = false; 


 
2.6. Diziler 

Aynı özelliğe sahip elemanların bir araya getirdiği gruba dizi denir. Diziler tek boyutlu, iki veya üç boyutlu 
olabilir. Dizideki herhangi  bir elemanı  tanımlayabilmek için  bir değer vermek yeterli oluyorsa bu dizilere 
tek  boyutlu  diziler  denir.  Matematikteki  sayı  dizileri  tek  boyutlu  diziler  için  iyi  bir  örnek  olabilir.  Eğer 
dizideki bir elemanı tanımlamak için en az iki değer vermek gerekiyorsa bu dizilere de iki boyutlu diziler 
denir. Bunlara en güzel örnek matematikteki matrislerdir. 

 Diziler  belirli  kurallara  uymak  suretiyle  tanımlanabilir.  Dizilerin  ilk  elemanı  0.  eleman  olmaktadır.  11 
elemanlı bir sayilar dizisi aşağıdaki şekilde tanımlanır:  

     int [ ] sayilar=new int [11];  

 İki veya üç boyutlu diziler ise boyutlar arasına virgül konularak tanımlanır. Örneğin 4 satır 7 sütünlu bir c 
matrisi aşağıdaki şekilde tanımlanır :  

     int [ , ] c = new int [4,7];  

2.7. Dizilere Değer Atanması 

2.8. 2 Boyutlu Dizilere Değer Atanması 

 
 


 
3. İfadeler 
Her  türlü  sabit,  değişken  ve  fonksiyonlardan  meydana  gelen  ve  program  satırında  eşitliğin  sağ  tarafında 
yer alan kısma ifade adı verilir. İfadelerin sol tarafında bir değişken ve onu izleyen atama (=) operatörü yer 
alır. Sağ taraftaki ifadede elde edilen değer, sol taraftaki değişkene (veya özelliğe) aktarılır. 

 İfadelere örnekler :  

   hiz = yol / zaman; 

  x = y * z + 3; 

 Java’da satırlar (;) ile sonlandırılır. İfade bir satıra sığmazsa, alt satıra devam edilebilir. (;) işaretine kadar 
satır devam edecektir. 

3.1. Sayısal İfadeler 

Çarpma, bölme, toplama gibi aritmetik işlemlerin olduğu ifadelerdir. Bu işlemler aşağıdaki gibi sıralanabilir  

X = X + 3 ifadesini istersek X + = 3 şeklinde yazabiliriz. 

 Örnekler :  

A * = C   Î A = A * C 

X / = 2  Î X = X / 2 

 Ayrıca a++; ifadesi a=a+1; ifadesiyle aynıdır. Benzer şekilde a‐‐; ifadesi de a=a‐1; ile aynıdır. 

3.2. İlişki İfadeleri 

İki  değeri  karşılaştırmak  amacıyla  kullanılan  ifadelerdir.  Karşılaştırılan  değerler  sayısal  veya  karakter 
şeklinde olabilir. Aşağıdaki tabloda bu ifadeler örnekleriyle gösterilmiştir. 


 
3.3. Mantıksal İfadeler 

Bu ifadeler iki veya daha fazla ifade arasında kullanılırlar. Mantıksal operatörlerle iki veya daha fazla ilişkiyi 
birbirine bağlarlar, sonunda True(Doğru) ya da False(Yanlış) değerini hesaplarlar.   

4. Kontrol Deyimleri 
 
4.1. If Deyimi 

Komutların  yerine  getirilmesi,  belli  ifadelerin  doğru  ya  da  yanlış  olmasına  bağlı  olduğu  durumlarda  
kullanılan bir deyimdir.  

if (Koşul) 
  { 

      deyim(ler)      // koşulun doğru olması durumunda 

   } 

else 

   { 

       deyim(ler)    // koşulun yanlış olması durumunda 

  } 

if ve else deyimi dışında bir de else if deyimi vardır. Tek koşula bağlı kalmak yerine farklı koşulları 
kontrol etmek için, else if deyimi kullanılır. 

if (kosul_1) 
  { 
      deyim(ler)      // kosul_1’in doğru olması durumunda 
   } 
else if (kosul_2) 
   { 
       deyim(ler)    // kosul_2’nin doğru olması durumunda 

  } 

10 
 
……… 

……….. 

……….. 

else 
   { 
       deyim(ler)    // koşulların yanlış olması durumunda 

   } 

4.2. Koşullu If Deyimi 

Koşul  ?   İfade 1  : İfade2 

Koşul doğru ise İfade1 , değilse İfade2 icra edilecek. 

 
4.3. Switch Deyimi 

Switch  deyimi,  if  deyimine  benzer  işi  yapar.  Belli  değerlere  göre  programın  nasıl  davranacağına  karar 
veren bir akış kontrol mekanizmasıdır.  
 

 switch(ifade) 

    case sabit_1: 
       deyim1; 
       break; 
    case sabit_2: 
       deyim2; 
       break; 
    default: 
       deyim3; 
       break; 

İlk önce switch deyimindeki ifadenin değeri case ifadelerindeki sabitlerle karşılaştırılır. Eğer herhangi bir 
sabit ile uyuşursa o case bloğu işleme sokulur. Program tüm case ifadelerini inceler, eğer hiç birinde bir 
uyum bulamazsa default anahtar sözcüğünün bulunduğu yere gelir ve buradan devam eder. 

5. Döngü Deyimleri 
 
Program  yazılırken  bazen  programın  belirli  kısımlarının  defalarca  tekrar  edilmesi  gerekebilir.  Bu  tekrarlı 
işlemleri sağlayan deyimlere Döngü Deyimleri adı verilir. 

11 
 
5.1. for Döngüsü 

Belirli işlemleri tekrar etmek amacıyla kullanılır. Genel formu aşağıdaki şekildedir : 

for (ifade1;ifade2;ifade3) 

    { 

        deyim(ler); 

     } 

 
5.2. while Döngüsü 

Bu döngüde, belirli bir koşulun sağlandığı sürece döngü içindeki deyimler icra edilir. 

while (koşul) 

    { 

        deyim(ler); 

     } 

5.3. do …. while Döngüsü 

Döngü içindeki deyimler, döngünün sonundaki <Koşul> geçerli olduğu sürece işlem görecektir. 

do  

    { 

        deyim(ler); 

     } while (koşul)     

12 
 
SAKARYA ÜNİVERSİTESİ

Java Programlama 
Hafta 2 
 
Prof. Dr. Ümit KOCABIÇAK 
 
 

Bu ders içeriğinin basım, yayım ve satış hakları Sakarya Üniversitesi’ne aittir. "Uzaktan Öğretim" tekniğine uygun olarak hazırlanan 
bu ders içeriğinin bütün hakları saklıdır.  İlgili kuruluştan izin almadan ders içeriğinin tümü ya da bölümleri mekanik, elektronik, 
fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz.  
Her hakkı saklıdır © 2009 Sakarya Üniversitesi 
 
 
 

 Uygulama 1 : if uygulaması 
import [Link].*;

public class IfDemo


{
public static void main(String [] args)
{
String x1=[Link](null,"dogru cevap sayısı");
int dogru = [Link](x1);

int puan = dogru * 5;


char notu = 'F';

if(puan >= 85)


{
notu = 'A';
}

if(puan >= 70 && puan < 85)


notu = 'C';

[Link]("puan = " + puan + " ve notu = " + notu);


}
}

 

 
 

Uygulama 2  : if‐else uygulaması 
import [Link].*;

public class OgrenciNotu


{
public static void main(String [] args)
{
String x1=[Link](null,"puanı giriniz");
int puan = [Link](x1);

char notu;
if(puan >= 90)
{
notu = 'A';
[Link]("Harikasınız");
}
else if(puan >= 80)
{
notu = 'B';
[Link]("İyi sayılırsınız");
}
else if(puan >= 70 && puan < 80)
{
notu = 'C';
}
else if(puan >= 60)
{
notu = 'D';
}
else
{
notu = 'F';
[Link]("Seneye tekrar görüşelim");
}

[Link]("Sizin notunuz " + notu);


}
}


 
 

Uygulama 3 : Switch‐case  
import [Link].*;

public class OgrenciNotu {


public static void main(String [] args) {
String aylar[] = {"Ocak",
"Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ek
im","Kasım","Aralık" };
String ay1=[Link](null,"kacıncı ay");
int ay = [Link](ay1);
String mevsim;
switch (ay) {
case 3:
case 4:
case 5:
mevsim = "İlkbahar";
break;
case 6:
case 7:
case 8:
mevsim = "Yaz";
break;
case 9:
case 10:
case 11:
mevsim = "Sonbahar";
break;
default:
mevsim = "Kış";
break;
}
[Link](null, "Ay:\t"+aylar[ay-
1]+"\nMevsim:\t"+mevsim);
}
}


 
Uygulama 4 : While örneği (10’dan 1’e doğru yazdırma) 
class While {
public static void main(String args[]) {
int n = 10;

while(n > 0) {
[Link](n);
n--;
}
}
}


 
Uygulama 5 : Do‐While örneği (10’dan 1’e doğru yazdırma) 

class DoWhile {
public static void main(String args[]) {
int n = 10;

do {
[Link]("tick " + n);
n--;
} while(n > 0);
}
}


 
Uygulama 6 : Powerball Amerika’da oynanan bir şans oyunudur. 1 kırmızı top (1‐42 
arasında numarası olan), 5 beyaz top (1‐49 arasında numarası olan) 6 top çekilir. 
Beyaz topların numaraları birbirinden farklı olmak zorundadır. 
public class Powerball
{
public static void main(String [] args)
{
int beyaz1, beyaz2, beyaz3, beyaz4, beyaz5, kirmizi;

kirmizi = (int) ([Link]() * 42 + 1);

beyaz1 = (int) ([Link]() * 49 + 1);


do
{
beyaz2 = (int) ([Link]() * 49 + 1);
}while(beyaz1 == beyaz2);

do
{
beyaz3 = (int) ([Link]() * 49 + 1);
}while(beyaz1 == beyaz3 || beyaz2 == beyaz3);

do
{
beyaz4 = (int) ([Link]() * 49 + 1);
}while(beyaz1 == beyaz4 || beyaz2 == beyaz4 || beyaz3 ==
beyaz4);

do
{
beyaz5 = (int) ([Link]() * 49 + 1);
}while(beyaz1 == beyaz5 || beyaz2 == beyaz5 || beyaz3 ==
beyaz5 || beyaz4 == beyaz5);

[Link]("Beyaz toplar: " + beyaz1 + " " + beyaz2 +


" " + beyaz3 + " " + beyaz4 + " " + beyaz5);
[Link]("Kırmızı top : " + kirmizi);
}
}


 
Uygulama 7 : for döngüsü 
class Ortalama {
public static void main(String args[]) {
double sayilar[] = {10.1, 11.2, 12.3, 13.4, 14.5};
double toplam = 0;
int i;

for(i=0; i<5; i++)


toplam = toplam + sayilar[i];

[Link]("Ortalama = " + toplam / 5);


}
}


 
Uygulama 8 : İç içe for döngüsü 
// iki boyutlu dizi - matris
class Matris {
public static void main(String args[]) {
int A[][]= new int[4][5];
int i, j, k = 0;

for(i=0; i<4; i++)


for(j=0; j<5; j++) {
A[i][j] = k;
k++;
}

for(i=0; i<4; i++) {


for(j=0; j<5; j++)
[Link](A[i][j] + " ");
[Link]();
}
}
}


 
SAKARYA ÜNİVERSİTESİ

Java Programlama 
Hafta 3 
 
Prof. Dr. Ümit KOCABIÇAK 
 
 

Bu ders içeriğinin basım, yayım ve satış hakları Sakarya Üniversitesi’ne aittir. "Uzaktan Öğretim" tekniğine uygun olarak hazırlanan 
bu ders içeriğinin bütün hakları saklıdır.  İlgili kuruluştan izin almadan ders içeriğinin tümü ya da bölümleri mekanik, elektronik, 
fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz.  
Her hakkı saklıdır © 2009 Sakarya Üniversitesi 
 
 
 

1. SINIFLAR 
Nesneler  çevremizde  bulunan  herşeydir.  Araba,  uçak,  kitap,  personel,  müdür,  fatura,  öğrenci  gibi. 
Programcılar her zaman gerçek yaşamdaki durumlara yakın senaryolar oluşturmaya çalışırlar. Bu yöndeki 
ilk adım bilgisayarın yaşadığımız dünyadan nesnelerle ilişki kurmasını sağlamaktır.  Hepimizin bildiği gibi, 
bilgisayar  sadece  bir  elektronik  makinedir.    Bilgisayarın  bizim  bildiğimiz  nesneleri  tanımasını  sağlayacak 
bilgiyi  vermek,  bizim  sorumluluğumuzdadır.  İşte  bu  noktada  nesneye  dayalı  modelleme  tekniği  devreye 
girer.  Bu  modelde    gerçek  problemlerde  karşılaştığımız  nesneleri,  bilgisayarda  benzer  nesneler  olarak 
modelleyebiliriz. 

Nesneye dayalı programlamanın esasını sınıf (class) oluşturur.  Sınıf aynı cins nesnelerin genel tanımıdır. 
Örneğin  kullandığımız  araba  bir  nesnedir  (Ford  gibi).  Aynı  şekilde  başkalarının  da  kullandığı  Opel,  BMW, 
Mercedes,  Renault  arabalarının  herbiri  ayrı  birer  nesnedir.  Bu  nesnelerin  hepsi  araba  sınıfı  ile 
tanımlanabilir. Aynı sınıfa ait nesneler ortak özelliklere sahiptir. 

Nesneye dayalı programlama, 

1. Nesnelerin ortak özelliklerinin sınıf  (class) yapıları kullanılarak tanımlanması, 

2. Bu sınıfları kullanarak nesnelerin oluşturulması, 

3. Bu nesnelerle uygulamaların gerçekleştirilmesi 

aşamalarından oluşur. 

Sınıf yeni bir tip veri tanımlar. Bu yeni tip, bu tipte yeni nesneler oluşturmada kullanılır. Bu yüzden sınıf 
nesne için bir şablondur. Ve bir nesne sınıfın bir örneğidir. 

Sınıfın Genel Biçimi : Bir sınıf, class anahtar sözcüğü ile tanımlanır. Sınıf içinde değişkenler ve metotlar yer 
alır.   


 
class sinif_ismi { 

  tip degisken1; 

  tip degisken2; 

  …… 

  …. 

  tip metot_ismi1 (parametreler) { 

    metodun gövdesi 

    ….. 

    } 

  tip metot_ismi2 (parametreler) { 

    metodun gövdesi 

    ….. 

    } 

…. 

}  

1.1. Basit Bir Sınıf Uygulaması :  

Yamuk geometrik elemanının alanını hesaplayacak bir program geliştireceğiz.  

Alan = (taban+tavan)/2*yukseklik 

 
 
  Tavan 
 

 
  Yükseklik 
 

 
Taban 
 


 
 

/* Yamuk sınıfı */ 
 
class Yamuk { 
  double taban; 
  double tavan; 
  double yukseklik; 

 
// Yamuk sınıfından nesne oluşturacaktır 
class YamukTest { 
  public static void main(String args[]) { 
    Yamuk ym1 = new Yamuk(); 
    double alan; 
 
    // ym1 yamuk nesnesine değerler atama 
    [Link] = 20; 
    [Link] = 10; 
    [Link] = 15; 
 
    // yamuğun alanı hesaplanır 
    alan = ([Link] * [Link]) / 2 * [Link]; 
 
    [Link]("Yamuğun alanı = " + alan); 
  } 

 

1.2 İki tane nesne deklare eden pogram örneği 

/* Yamuk sınıfı */ 
 
class Yamuk { 
  double taban; 
  double tavan; 
  double yukseklik; 

 
// Yamuk sınıfından nesne oluşturacaktır 
class YamukTest { 
  public static void main(String args[]) { 
    Yamuk ym1 = new Yamuk(); 
    Yamuk ym2 = new Yamuk(); 
 
    double alan; 
 
// ym1 yamuk nesnesine değerler atama 
    [Link] = 20; 
    [Link] = 10; 
    [Link] = 15; 
 
// ym2 yamuk nesnesine değerler atama 
    [Link] = 8 
    [Link] = 5; 
    [Link] = 7; 
 


 
// ym1 yamuğunun alanı hesaplanır 
alan = ([Link] * [Link]) / 2 * [Link]; 
 
[Link]("1. Yamuğun alanı = " + alan); 
 
 
// ym2 yamuğunun alanı hesaplanır 
alan = ([Link] * [Link]) / 2 * [Link]; 
 
[Link]("2. Yamuğun alanı = " + alan); 
 
  } 

 

1.3.Sınıfa Bir Metot Eklemek 

/* Yamuk sınıfı */ 
 
class Yamuk { 
  double taban; 
  double tavan; 
  double yukseklik; 
 
// yamuğun alanını görüntüle 
Void alan(){ 
  [Link](“alan=” + (taban*tavan)/2 * yukseklik); 


 
// Yamuk sınıfından nesne oluşturacaktır 
class YamukTest { 
  public static void main(String args[]) { 
    Yamuk ym1 = new Yamuk(); 
    Yamuk ym2 = new Yamuk(); 
 
 
// ym1 yamuk nesnesine değerler atama 
    [Link] = 20; 
    [Link] = 10; 
    [Link] = 15; 
 
// ym2 yamuk nesnesine değerler atama 
    [Link] = 8 
    [Link] = 5; 
    [Link] = 7; 
 
// ym1 yamuğunun alanı yazdırılıyor 
[Link](); 
 
// ym2 yamuğunun alanı yazdırılıyor 
[Link](); 
 
  } 

 


 
 

1.4 Metotdan Değer Döndürmek 

/* Yamuk sınıfı */ 
 
class Yamuk { 
  double taban; 
  double tavan; 
  double yukseklik; 
 
// yamuğun alanını hesapla ve sonucu gönder 
double alan(){ 
  return (taban*tavan)/2 * yukseklik; 


 
// Yamuk sınıfından nesne oluşturacaktır 
class YamukTest { 
  public static void main(String args[]) { 
    Yamuk ym1 = new Yamuk(); 
    Yamuk ym2 = new Yamuk(); 
 
    double alan; 
 
// ym1 yamuk nesnesine değerler atama 
    [Link] = 20; 
    [Link] = 10; 
    [Link] = 15; 
 
// ym2 yamuk nesnesine değerler atama 
    [Link] = 8 
    [Link] = 5; 
    [Link] = 7; 
 
// ym1 yamuğunun alanı yazdırılır 
 
[Link]("1. Yamuğun alanı = " + [Link]()); 
 
 
// ym2 yamuğunun alanı yazdırılır 
 
[Link]("2. Yamuğun alanı = " + [Link]()); 
 
  } 

 


 
1.5. Kurucular (Constructors) : 

Bir  nesnenin  oluşturulduğu  anda  otomatik  olarak  çalıştırılan  metotlardır.  Bir  sınıf  içinde  birden  fazla 
kurucu olabilir. Nesne oluşturulurken hangi kurucu çağrılacağı parametrelerle belirlenir. 
 

/* Yamuk sınıfı */ 
 
class Yamuk { 
  double taban; 
  double tavan; 
  double yukseklik; 
 
// Yamuk constructor 
Yamuk() { 
  taban=6; 
  tavan=4; 
  yukseklik=7; 

// yamuğun alanını hesapla ve sonucu gönder 
double alan(){ 
  return (taban*tavan)/2 * yukseklik; 


 
// Yamuk sınıfından nesne oluşturacaktır 
class YamukTest { 
  public static void main(String args[]) { 
    Yamuk ym1 = new Yamuk(); 
 
    double alan; 
 
// ym1 yamuğunun alanı yazdırılır 
 
[Link]("1. Yamuğun alanı = " + [Link]()); 
 
 
  } 

 


 
1.6. Parametreli Kurucular (Constructors) : 

Parametresiz  kurucular,  her  nesne  oluşturulduğunda  aynı  değerleri  verdiği  için  pek  kullanışlı  değildir. 
Değişik değerlerdeki nesneleri oluşturmak için parametreli kurucular programı daha kullanışlı yapar. 

/* Yamuk sınıfı */ 
 
class Yamuk { 
  double taban; 
  double tavan; 
  double yukseklik; 
 
// Yamuk constructor 
Yamuk() { 
  taban=6; 
  tavan=4; 
  yukseklik=7; 

// parametreli constructor 
Yamuk(double tab, double tav, double yuk) { 
  taban=tab; 
  tavan=tav; 
  yukseklik=yuk; 

 
// yamuğun alanını hesapla ve sonucu gönder 
double alan(){ 
  return (taban*tavan)/2 * yukseklik; 


 
// Yamuk sınıfından nesne oluşturacaktır 
class YamukTest { 
  public static void main(String args[]) { 
    Yamuk ym1 = new Yamuk(); 
    Yamuk ym2 = new Yamuk(8,3,6); 
 
    double alan; 
 
// ym1 yamuğunun alanı yazdırılır 
 
[Link]("1. Yamuğun alanı = " + [Link]()); 
 
 
 
// ym2 yamuğunun alanı yazdırılır 
 
[Link]("2. Yamuğun alanı = " + [Link]()); 
 
  } 

 

 
 
 
 

 
1.7. Metotların Aşırı Yüklenmesi 
 
Aynı  metod  ismi  ile  birden  fazla  metod  yazılabilmesidir.  Tek  kural,  aynı  tipte  parametreleri  olan  birden 
fazla metod olamaz. 
 

// Aşırı yüklenem (overloading) 
class AsiriYuklemeTest { 
  
 
  // tamsayı toplama 
  void topla(int a, int b) { 
    [Link]("toplam: " + a+b ); 
  } 
 
  // reel sayı toplama 
  void topla(double a, double b) { 
    [Link]("toplam: " + a+b ); 
  } 
 
  // string toplama 
  void topla(string a, string b) { 
    [Link]("toplam: " + a+b ); 
  } 

   
class AsiriYukleme { 
  public static void main(String args[]) { 
    AsiriYuklemeTest t = new AsiriYuklemeTest(); 
    [Link](3,5);  
    [Link](23.45,56.71);  
    [Link](“bilgisayar”, “programlama”);  
  } 


 
SAKARYA ÜNİVERSİTESİ 

Java Programlama 
Hafta 4 
Prof. Dr. Ümit KOCABIÇAK 

Bu ders içeriğinin basım, yayım ve satış hakları Sakarya Üniversitesi’ne aittir. "Uzaktan Öğretim" tekniğine uygun olarak hazırlanan 
bu ders içeriğinin bütün hakları saklıdır.  İlgili kuruluştan izin almadan ders içeriğinin tümü ya da bölümleri mekanik, elektronik, 
fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz. 
Her hakkı saklıdır © 2009 Sakarya Üniversitesi
[Link]ıtım 

Bir  class'ın  başka  bir  class'daki  özellik  ve  metot'lara  sahip  olmasına  kalıtım  denir..  Belli  bir  class,  daha 
genel bir kavramı ifade eden class'ın üyelerine sahip olarak, onları tekrar tanımlamak zorunda kalmaz. Bir 
class'ın diğerindeki özellikleri miras olarak alması için kullanılan anahtar sözcük Java‘da extends ‘dir. 

class TüremisSinif extends AnaSinif 

// ... 

Örnek : 
// ana sınıfı oluşturalım 
class A { 
int i=0, j=2; 

void goster1() { 
[Link]("i ve j: " + i + " " + j); 

// B sınıfını A sınıfından türetelim 
class B extends A { 
int k=5; 

void goster2() { 
[Link]("k: " + k); 

void toplam() { 
[Link]("i+j+k: " + (i+j+k)); 

class KalitimOrnek1 { 
public static void main(String args[]) { 
A A1 = new A(); 
B B1 = new B(); 

// A1 değişkenlerine değer atayalım. 
A1.i = 10; 
A1.j = 20; 
[Link]("A1 değerleri: "); 
A1.goster1(); 
[Link](); 

/* B1 değişkenlerine değer atayalım */ 
B1.i = 17; 
B1.j = 22; 
B1.k = 19; 
[Link]("B1 değerleri: "); 
B1.goster1(); 
B1.goster2(); 
[Link](); 

[Link]("B1 değişkenleri toplamı:"); 
[Link]();  }  }


2. Erişim Tipleri 
Pratikte  yaygın  olarak  kullanılan  anlayış,  bir  programcı  bir  sınıfı  (class)  oluşturur  ve  daha  sonra  diğer 
programcılar  bu  class’ı  kendi  kodlarında  kullanırlar.  Nesneye  dayalı  programlamanın  önemli 
özelliklerinden bir tanesi olan encapsulation, sınıf değişkenlerine erişimi kısıtlayarak sınıfı oluşturan kişinin 
sınıfını  korumasını  sağlamaktadır.  Bu  durumda  sınıfı  kullanan  kişiler,  yalnızca  public  metotlara 
erişebilmektedir. Aşağıdaki anahtar sözcükler, metot veya değişkenlere erişimi kısıtlamak veya izin vermek 
için kullanılırlar. 

Public  Bu şekilde tanımlanmış bir metot veya değişkene herhangi bir 
yerden ulaşmak mümkündür. 
Private  Bu şekilde tanımlanmış bir metot veya değişkene sadece sınıf içinden 
ulaşmak mümkündür. 
Protected  Bu şekilde tanımlanmış bir metot veya değişkene tanımlandıkları 
sınıftan veya bu sınıftan türetilmiş sınıflardan ulaşılabilir. 

Örnek : 

// ana sınıf 
class A { 
int i; // i değişkeni varsayılan olarak public 
private int j; 

void baslangic(int x, int y) { 
i = x; 
j = y; 

// B sınıfı 
class B extends A { 
int top; 

void toplam() { 
top = i + j; // HATA, j burada erişilemez 

class ErisimOrnek { 
public static void main(String args[]) { 
B B1 = new B(); 

[Link](5, 8); 

[Link](); 
[Link]("Toplam= " + [Link]); 

3. super Kullanımı


Bir alt sınıfın, üst sınıfa göndermede bulunması gerektiği durumlarda super anahtar sözcüğü kullanılır. 2 
kullanım şekli vardır : 

[Link]ım : Üst sınıf kurucusunu çağırır. 

Örnek : 

// Prizma ana sınıfı. 
class Prizma { 
private double en; 
private double boy; 
private double genislik; 

// 3 parametreli kurucu 
Prizma(double e, double b, double g) { 
en = e; 
boy = b; 
yukseklik = y; 

// parametresiz kurucu 
Prizma() { 
en = 0; 
boy = 0; 
genislik = 0; 

// küp için kurucu 
Prizma(double l) { 
en = boy = genislik = l; 

// hacim 
double hacim() { 
return e * b * y; 

// Prizma sınıfına ağırlık ekleyerek yeni sınıf oluşturma 
class PrizmaAgirlik extends Prizma { 
double agirlik; 

// 4 parametreli kurucu 
PrizmaAgirlik(double e, double b, double g, double a) { 
super(e, b, g); // super sınıf kurucusu çağrılır 
agirlik = a; 

// Parametresiz kurucu 
PrizmaAgirlik () { 
super(); 
agirlik = 0; 

// küp için kurucu 
PrizmaAgirlik (double l, double a) {


super(l); 
agirlik = a; 

class PrizmaTest { 
public static void main(String args[]) { 
PrizmaAgirlik p1 = new PrizmaAgirlik (10, 20, 15, 34.3); 
PrizmaAgirlik p2 = new PrizmaAgirlik (); 
PrizmaAgirlik kup1 = new PrizmaAgirlik (3, 2); 
double h; //hacim 

h = [Link](); 
[Link]("p1 prizması hacmi= " + h); 
[Link]("p1 prizması ağırlığı = " + [Link]); 
[Link](); 

h = [Link](); 
[Link]("p2 prizması hacmi=" + h); 
[Link]("p2 prizması ağırlığı = " + [Link]); 
[Link](); 

h = [Link](); 
[Link]("Küpün hacmi= " + h); 
[Link]("Küpün ağırlığı = " + [Link]); 
[Link](); 

[Link]ım : Bir üst sınıfın, bir alt sınıfın üyesi tarafından gizlenen bir üyesine erişmek için kullanılır. 
[Link] şeklinde ifade edilir. 

Örnek : 

// super kullanarak gizlenen elemana ulaşmak 
class A { 
int i; 

class B extends A { 
int i; // bu A’daki i ‘yi gizliyor 

B(int a, int b) { 
super.i = a; // A daki i 
i = b; // B deki i 

void goster() { 
[Link]("Üst sınıftaki i: " + super.i); 
[Link]("Alt sınıftaki i: " + i); 

class SuperTest2 { 
public static void main(String args[]) {


B B1 = new B(2, 7); 

[Link](); 

4. Bir metodun devre dışı bırakılması veya ezdirilmesi 

Alt sınıfa ait bir metot üst sınıftaki metotla aynı ad ve tipe  sahipse, üst sınıftaki metot devre dışı kalmış 
olur, diğer deyişle ezdirilmiş olur. 

Örnek : 

// Metodun ezdirilmesi 
class A { 
int i, j; 

A(int a, int b) { 
i = a; 
j = b; 

// i ve j yi göster 
void goster() { 
[Link]("i ve j: " + i + " " + j); 

class B extends A { 
int k; 

B(int a, int b, int c) { 
super(a, b); 
k = c; 

// k yı göster 
void goster() { 
[Link]("k: " + k); 

class OverrideTest { 
public static void main(String args[]) { 
B B1 = new B(2, 7, 4); 

[Link](); // B deki goster() metodu çağırılır 

5. Ezdirmeyi Önlemek için final kullanımı


Bazen metotların ezdirilmesi engellenmek istenebilir. Bu durumda metodun başına final sözcüğü 
eklenirse, bu metod alt sınıf tarafından ezdirilemez. 

class A { 
final void goster() { 
[Link]("Bu metot devre dışı bırakılamaz"); 

class B extends A { 
void goster() { // HATA! 
…. 

6. Kalıtımı Önlemek için final kullanımı 
Bazen bir sınıfın türetilmesini istemeyebilirisiniz. Bunu yapmak için sınıf deklarasyonunun başına final 
sözcüğü eklenir. 

final class A { 
// ... 

// 
class B extends A { // HATA! B A’dan türetilemez 
// ... 

7. Abstract  (Soyut) Sınıflar 
Abstract  (Soyut)  sınıflar,  tüm  alt  sınıfları  tarafından paylaşılacak  metodların tanımlarını  içeren sınıflardır. 
Soyut  sınıflar  içeriği  belirlenmemiş  sadece  etiketi  belli  bir  ya  da  daha  fazla  soyut  metod  içerirler.  Bu 
metodların  içeriklerine  alt  sınıflarda  ezdirme  (override)  yapılarak  içerik  kazandırılır.  Bir  soyut  sınıftan 
türeyen  tüm  alt  sınıflarda  bu  soyut  metodlara  ezdirme    yapılmalıdır.  Bir  soyut  sınıf  tamamlanmamış 
olduğu  için nesne  haline getirilemez.  Mutlaka extends  anahtar sözcüğü  ile  yeni  sınıflara miras bırakarak 
kullanılmalıdır. Kısaca bir sınıf isminden önce “abstract” kelimesi varsa o sınıf soyuttur ve ve en az bir adet 
abstract tanımlı metod içermelidir. 

Örnek : 2 kenarı olan abstract bir Sekil sınıfı tanımlayalım. Bu şeklin bir alanı olsun ve bunu abstract metot 
olarak  belirleyelim.  Bundan  kalıtım  yoluyla  Dikdortgen  ve  Ucgen  sınıfları  oluşturulsun.  Bunların  alanları 
mutlaka ezdirilecek (çünki alan metodu abstract olarak tanımlanmış). 

// Abstract metot ve sınıfları kullanmak 
abstract class Sekil { 
double kenar1; 
double kenar2; 

Sekil(double a, double b) { 
kenar1 = a; 
kenar2 = b; 
}


// alan() abstract metot 
abstract double alan(); 

class Dikdortgen extends Sekil { 
Dikdortgen(double a, double b) { 
super(a, b); 

// alanın dikdörtgen için ezdirilmesi 
double alan() { 
return kenar1 * kenar2; 

class Ucgen extends Sekil { 
Ucgen(double a, double b) { 
super(a, b); 

// alanın üçgen için ezdirilmesi 
double alan() { 
return kenar1 * kenar2 / 2; 

class AbstractAlan { 
public static void main(String args[]) { 
// Sekil s = new Sekil(6, 9); // gecersiz. Abstract sınıftan nesne olmaz 
Didortgen d = new Dikdortgen(6, 8); 
Ucgen u = new Ucgen(6, 4); 

Sekil sekil1; // bu gecerli 

sekil1 = d; 
[Link]("Dikdörtgenin alanı = " + [Link]()); 

sekil1 = u; 
[Link]("Üçgenin alanı = " + [Link]()); 

8. Interface (Arayüz) Sınıfları


Soyut sınıflarda ve miras konusunda görüldüğü gibi tek bir sınıftan kalıtım mümkün oluyordu. Fazla sayıda 
sınıftan  farklı  özellikleri  aynı  anda  almak  için  interface  (arayüz)  sınıfları  mevcuttur.  Arayüz  sınıflarında 
hiçbir  metodun  içeriği  yazılmaz,  içerikler  altsınıflarda  oluşturulur.  Altsınıflar  arabirim  sınıflarını 
implements  sözcüğü  ile  çağırırlar.  Kısaca  arayüz  sınıfları  interface  kelimesi  ile  tanımlanır  (class  sözcüğü 
geçmez),  ve  bu  arabirimi  kullanacak  altsınıflarda  sınıf  adından  sonra  implements  kelimesi  ve  ardından 
arabirim sınıfının adı gelir. Kalıtım ve arayüzler birarada kullanılabilirler. 

Örnek : 

// A arayüzü 
interface A { 
void metot1(); 
void metot2(); 

// B arayüzü A arayüzünden kalıtım alıyor 
interface B extends A { 
void metot3(); 

// C sınıfı B arayüzünden türetiliyor 
class C implements B { 
public void metot1() { 
[Link]("metot 1 yazdırılıyor"); 

public void metot2() { 
[Link]("metot 2 yazdırılıyor "); 

public void metot3() { 
[Link]("metot 3 yazdırılıyor "); 

}


SAKARYA ÜNİVERSİTESİ

Java Programlama 
Hafta 5 
 
Prof. Dr. Ümit KOCABIÇAK 
 
 

Bu  ders  içeriğinin  basım,  yayım  ve  satış  hakları  Sakarya  Üniversitesi’ne  aittir.  "Uzaktan  Öğretim"  tekniğine  uygun  olarak 
hazırlanan  bu  ders  içeriğinin  bütün  hakları  saklıdır.    İlgili  kuruluştan  izin  almadan  ders  içeriğinin  tümü  ya  da  bölümleri 
mekanik, elektronik, fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz.  
Her hakkı saklıdır © 2009 Sakarya Üniversitesi 
1. AWT 
 
AWT  Abstract  Windowing  Toolkit  (Soyut  Pencereleme  Araçtakımı)  anlamına  gelir.  Grafik  kullanıcı 
arayüzü  oluşturmamızı,  klavye  ve  fare  aracılığıyla  kullanıcıdan  girdi  almamızı  sağlayan  Java  sınıfları 
kümesidir.   
 
AWT ve Swing 
 
Öncelikle  AWT'nin  başarılması  çok  güç  bir  iş  başardığını  belirtmek  gerekir.  Çünkü  Java,  her  işletim 
sisteminde çalışmak gibi bir iddiayla ortaya çıkan bir dil ama görsel bileşenler her işletim sisteminde 
çok farklı. Farklı görünmeleri önemli değil, bazı bileşenler bir işletim sisteminde bulunurken diğerinde 
olmayabiliyor. Bu yüzde AWT, en büyük ortak çarpanı buluyor. Yani bütün işletim sitemlerinde olan 
bileşenleri kullanıyor. Düğme hepsinde var ama tablo veya toolbar yok. Dahası her işletim sistemind 
olan bileşenler de birbirlerinden farklı özellikler içeriyor. Java bunlardan sadece ortak olanları alıyor. 
O yüzden AWT ile yapılan arayüzler çok zengin ve çok güzel değil.  
 
Java'da  daha  zengin  bir  arayüz  sağlayan  Swing  kütüphanesi  var.  O  da  her  işletim  sisteminde  aynı 
şekilde  çalışmasına  rağmen  zengin  bileşenler  içeriyor.  Ancak  Swing,  bunu  işletim  sisteminin 
bileşenlerini  kullanmadan,  her  şeyi  baştan  kendisi  yaparak  başarabiliyor.  Yani  Swing'in  düğme 
bileşeni, işletim sistemindeki düğme bileşeni değil. Ona benzetilen, ama baştan yaratılan bir bileşen. 
Swing, kendi bileşenlerini kendi yapıyor, sadece her işletim sistemine uygun bir şekilde gürünmelerini 
sağlıyor. Hatta istenirse bir işletim sisteminde  başka bir işletim sisteminin gürünümü sağlanabiliyor. 
Yada hiç bir işletim sisteminde olmayan bir görünüm ortaya çıkabiliyor.  
 
Swing,  AWT'den  farklı  bir  arayüz  sağlıyor  ama  yine  de  kendisi  AWT  üzerine  kurulu.  Yani  Swing, 
AWT'nin  temel  bileşenlerini  kullanıyor.  Zaten  işletim  sisteminin  arayüzünün  üzerine  kurulan  AWT. 
Swing, AWT'deki temel özellikleri kullanarak kendi bileşenini kendi yapmış oluyor. O yüzden AWT'de 
öğrenilen  konulanrın  %90'ı  aynen  Swing'de  de  geçerli.  AWT'yi  basit  arayüzü  nedeniyle  tercih 
etmeyenler de Swing kullanabilmek için AWT'yi bilmek zorunda. 
 
AWT'nin Çalışma Mantığı 
AWT'nin çalışma mantığı diğer arayüz sistemlerinden biraz farklı. Nedenlerin bir tanesi AWT'nin başka 
işletim  sistemlerinin  üzerinde  çalışmak  zorunda  olan  bir  kütüphane  olması  elbette.  Ancak  başa  bir 
neden de, Java'nın Internet dili olarak, her türlü makinede çalışmak gibi bir ilkesi olması. Örneğin çok 
büyük  ekranlı  çok  yüksek  çözünürlüklü  makinelerde  de  küçük  ekran  ve  düşük  çözünürlüklü 
makinelerde  de  çalışmalı.  Bir  browser  içerisinde  de  çalışmalı  bağımsız  bir  application  olarak  da 
çalışmalı.  Bu  gibi  nedenlerden  dolayı  farklı  bir  arayüz  sistemlerinde  çalışanlar  için  biraz  garip 
gelebilecek bir yapıya sahip. Örneğin, 'şu düğmeyi şu X ve şu Y noktasına koy' demiyorsunuz AWT'de. 
Onun  yerine  şunu  ortaya  şunu  sola  şunu  yukarıya  koy  diyebiliyorsunuz.  Belki  bir  anlamda  sınırlayıcı 
olabilen  bu  özellik,  pencerenin  büyümesi  veya  küçülmesi  durumunda  da  bileşenlerin  görünmesini 
sağladığı için çok avantajlı olabiliyor.  
 
Bir  başka  özelliği  de  arayüzün  sadece  kod  yazarak  kolaylıkla  oluşturulabilmesi.  Basit  bir  pencerenin 
içerisine bir tane düğme ve bir tekst alanı koymak için sadece bir kaç satır kod yeterli. Hiç bir görsel 
editör kullanmaya gerek yok. Elbette isteyen kullanabilir ama editör kullanmadan da çok iyi arayüzler 
üretilebilir.  
2. AWT’de Pencereler 
Pencereler bileşenlerin yerleştirildiği bölgelerdir. Pencereler bir form gibi düşünülebilir.   

2.1.  Frame  (Çerçeve)  :  Çerçeveler  ayrı  pencerelerdir.    Frame  bir  pencere  veya  bileşen  olarak 
çalışabilir.  

Örnek: 
 
import [Link].*; 
 
public class frame1 extends Frame{ 
    public frame1(String baslik) 
    { 
        super(baslik); 
    } 
 
public static void main (String args[]){ 
    frame1 f = new frame1("deneme cerceve"); 
    [Link](300,200); 
    [Link](true); 
   } 

 
Programın Çıktısı :  
 

 
 
 
2.2.  Panel  (Pano)  :  Panolar  çeşitli  bileşenleri  gruplamak  için  kullanılır.  Panel  doğrudan  görünmez. 
Aşağıdaki örnekte gösterildiği gibi onu bir Frame (Çerceve’ye) ekleyebiliriz.  

import [Link].*; 
 
public class Panel1 extends Panel{ 
    public Panel1() 
    { 
    } 
 
public static void main (String args[]){ 
    Panel1 p = new Panel1(); 
  Frame f=new Frame(“Panel Ornegi”); 
    [Link](300,300); 
    [Link](true); 
   } 

 

Programın Çıktısı :  
 

3. Bileşenler 
Bileşenler, Frame ve Panel gibi pencereler üzerine yerleştirilirler.   

3.1. Label (Etiket) : Pencereler üzerine etiket yerleştirmek için kullanılır. 

Label (String etiket) : Pencere üzerinde belirtilen etiket oluşturulur. 

Label (String  etiket, hizalama) : Verilen hizalama ile ([Link], [Link] ve [Link]) etiket 
yerleştirilir.  

3.2. TextField (Metin kutusu) : Metin girmek veya göstermek için kullanılan bileşendir. 

TextField () : Metin alanı oluşturur. 

TextField (int sütun) : Verilen sayıda sütunu olan bir metin alanı oluşturur. 

TextField (String  metin) : Verilen metine sahip bir metin alanı oluşturulur.  

 
3.3.  TextArea  (Metin  bölgesi)  :  Metinin  iki  veya  daha  fazla  satır  olarak  alınacağı  durumlarda 
kullanılır. 

TextArea () : Yeni bir metin bölgesi oluşturur. 

TextArea (int satir, int sütun) : Verilen sayıda satır veya sütunu olan bir metin bölgesi  oluşturur. 

TextArea (String  metin) : Verilen metine sahip bir metin bölgesi oluşturulur.  

3.4. Button (Buton) : Pencereler üzerine buton yerleştirmeyi sağlar. 

Button () : Yeni bir boton oluşturur. 

Button (String metin) : Verilen metin buton üzerinde gösterilir. 

3.5. Checkbox (Seçim kutuları ve Radyo Butonlar) : Seçim kutuları çok seçenekli kullanıcı girişi 
için  kullanılır.  Birden  fazla  seçim  yapılabilir.  Radyo  buton  grubundan  ise  yalnızca  bir  tane  buton 
seçilebilir. 

Seçim kutuları oluşturmak için Checkbox’dan yararlanılır. Radyo butonlar oluşturmak için ise ilk önce 
CheckboxGroup nesnesi oluşturulur ve radyo butonlar Checkbox ile bu gruba eklenir. 

Örnek :  

import [Link].*; 
 
public class Kontrol extends Frame{ 
 
    Label baslik1=new Label("Seçim Kutuları"); 
    Checkbox k1=new Checkbox("C#", true); 
    Checkbox k2=new Checkbox("Java", false); 
    Checkbox k3=new Checkbox("Python", false); 
 
    Label baslik2=new Label("Radyo butonlar"); 
    CheckboxGroup rb=new CheckboxGroup(); 
    Checkbox rb1=new Checkbox("Evli", rb, true); 
    Checkbox rb2=new Checkbox("Bekar", rb, false); 
    Checkbox rb3=new Checkbox("Dul", rb, false); 
 
    public Kontrol(String baslik) { 
        super(baslik); 
        setLayout (new GridLayout(8,1)); 
        add(baslik1); 
        add(k1); 
        add(k2); 
        add(k3); 
        add(baslik2); 
        add(rb1); 
        add(rb2); 
        add(rb3); 
 
    } 
    public static void main(String[] args) { 
       Kontrol kk=new Kontrol ("Seçim kutuları ve Radyo Butonlar"); 
       [Link](300,200); 
       [Link](true); 
    } 
 

 
 

 
 
 
 
 
3.6. Choice  (Seçim Listeleri) : Kullanıcının bir listeden seçim yapmak için kullanılan bileşendir. 

Örnek :  
 
 
import [Link].*; 
 
public class secim extends Frame{ 
 Label baslik1=new Label("Hangi takımı tutuyorsunuz*"); 
 Choice takim=new Choice(); 
  
 public secim(String baslik) { 
     super(baslik); 
     setLayout(new FlowLayout()); 
     add(baslik1); 
     [Link]("Fenerbahce"); 
     [Link]("Galatasaray"); 
     [Link]("Besiktas"); 
     [Link]("Trabzon"); 
     [Link]("Sivas"); 
      
     add(takim); 
           } 
 
    public static void main(String[] args) { 
        secim t1=new secim("Hangi Takım"); 
        [Link](300,250); 
        [Link](); 
    } 
 

 
 
 

 
 
 
 
 
4. Yerleşim Düzenleri 
 
Pencereler üzerine bileşenlerin nasıl yerleştirileceği Yerleşim Düzenleri ile belirlenir. 5 farklı yerleşim 
düzeni vardır. 
 
4.1.  FlowLayout  Yerleşim  Düzeni  :.  Bileşenler  pencere  üzerine  soldan  sağa  ve  satır  satır 
yerleştirilir.  Bileşenler  sola,  sağa  veya  merkezi  olarak  yerleştirilebilirler.  Örneğin  bileşenleri 
penecereyi ortalayacak şekilde yerleştirmek için : 
  setLayout (new FlowLayout([Link])); 
 
Örnek : 
import [Link].*; 
public class Yerlesim extends Frame { 
 
    Button b1=new Button("Matris Çarpımı"); 
    Button b2=new Button("Matris Toplamı"); 
    Button b3=new Button("Determinant Hesabı"); 
 
    public Yerlesim (String baslik){ 
        super(baslik); 
        setLayout(new FlowLayout([Link])); 
        add(b1); 
        add(b2); 
        add(b3); 
    } 
    public static void main(String[] args) { 
        Yerlesim y=new Yerlesim("FlowLayout Yerleşim düzeni"); 
        [Link](150,150); 
        [Link](); 
    } 
 

 
 

 
 
4.2.  BorderLayout  Yerleşim  Düzeni  :.  Bu    yerleşim  düzenine  gore,  pencere  5  bölgeye  ayrılır  ve 
bileşenler bu 5 bölgeye yerleştirilirler. Bu bölgeler : 
NORTH (Kuzey) : Pencerenin üst kısmıdır. 
EAST (Doğu) : Pencerenin sağ kısmıdır. 
SOUTH (Güney) : Pencerenin alt kısmıdır. 
WEST (Batı) : Pencerenin sol kısmıdır. 
CENTER (Merkez) : Pencerenin merkezidir. 
 
Örnek : 
import [Link].*; 
public class Yerlesim extends Frame { 
 
    Button b1=new Button("NORTH"); 
    Button b2=new Button("EAST"); 
    Button b3=new Button("CENTER"); 
    Button b4=new Button("WEST"); 
    Button b5=new Button("SOUTH"); 
 
    public Yerlesim (String baslik){ 
        super(baslik); 
        setLayout(new BorderLayout()); 
        add(b1, [Link]); 
        add(b2, [Link]); 
        add(b3, [Link]); 
        add(b4, [Link]); 
        add(b5, [Link]); 
 
    } 
    public static void main(String[] args) { 
        Yerlesim y=new Yerlesim("BorderLayout"); 
        [Link](300,200); 
        [Link](); 
    } 

 

 
 
4.3.  CardLayout  Yerleşim  Düzeni  :.  Bu  yerleşim  düzeni  üst  üste  dizilmiş  kartları  andırı[Link]  3‐4 
arayüz bileşeni(Buton,text,label….) bir kartta diğer bileşenler bir kartta olabilir. Kart çoğunlukla Panel 
nesnesidir. Buton gibi ayrı bir bileşen, en üstte gösterilecek kartı kontrol eder. 
 
4.4.  GridLayout  Yerleşim  Düzeni  :.  Bu  yerleşim  düzeni  pencereyi  ızgaralara  bölmeyi  sağlar. 
Bileşenler satır ve sütunlara yerleştirilir. Bu yerleşim düzeni, tüm bileşenler aynı boyutta ise kullanılır. 
 
setLayout(new GridLayout(4,3,2,1)); 
 
Buradaki paramereler şu anlama geliyor. Birincisi program arayüzünün kaç satıra ikincisi kaç sütuna 
bölüneceğini gösteriyor. Bu durumda satır sayısı arttıkça bileşenlerin “eni” o kadar kısa olur. 3 ve 4. 
parametreler de bileşenler arasındaki mesafenin ne kadar olacağını “en” ve “boy” olarak belirliyor. 
 
4.5.  GridBagLayout  Yerleşim  Düzeni  :.  Bu  yerleşim  düzeni,  tüm  yerleşim  düzenlerinden  daha 
esnek  ve  karmaşıktır.  Bileşenler  tam  olarak  yerleştirilebilir.  Bileşenler  aynı  boyutta  olmak  zorunda 
değildir.  Bileşenler  satır  ve  sütunlara  yerleştirildiği  için  GridLayout  yerleşim  düzenine  benzer.  Farklı 
olarak yerleşim soldan‐sağa değildir. Bileşenler istenilen satır, sütuna yerleştirilir. 
SAKARYA ÜNİVERSİTESİ

Java Programlama 
Hafta 6 
 
Prof. Dr. Ümit KOCABIÇAK 
 
 

Bu  ders  içeriğinin  basım,  yayım  ve  satış  hakları  Sakarya  Üniversitesi’ne  aittir.  "Uzaktan  Öğretim"  tekniğine  uygun  olarak 
hazırlanan  bu  ders  içeriğinin  bütün  hakları  saklıdır.    İlgili  kuruluştan  izin  almadan  ders  içeriğinin  tümü  ya  da  bölümleri 
mekanik, elektronik, fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz.  
Her hakkı saklıdır © 2009 Sakarya Üniversitesi 
 
1. Appletler  
 
Applet web tarayıcılarında çalışan küçük uygulamalardır. Bir applet başlarken sunucudan  kullanıcının 
bilgisayarına yüklenir ve kullanıcı bilgisayarında çalışmaya başlar.  
 
Appletlerin  normal  java  programlarından  farkı  çalıştığı  bilgisayarda  kısıtlı  haklara  sahip  olmasıdır.  
Çalıştıkları  bilgisayardan  dosya  kopyalayamazlar.  Dosya  silemezler.  Dosya  açamazlar  veya 
oluşturamazlar.  İndirildikleri  sunucudan  başka  bir  sunucu  ile  herhangi  bir  ağ  bağlantısı  kuramazlar. 
İndirildikleri  bilgisayarda  başka  programları  çalıştıramazlar.  Dosya  sistemine  erişemezler  veya 
okuyamazlar. 
 
Appletin bir diğer farkı ise main methodun gerekli olmamasıdır. Appletler [Link].* ve [Link].* 
sınıflarını programa dahil etmek zorundadır ve applet çalışırken bazı metodlar otomatik çağırılır. Biz 
bu methodları override ederek applete istediğimiz işlemleri yaptırabiliriz.  
 
Bu methodlar : 
 
init() : Applet ilk çalıştığı zaman cağırılır. 
start() :Bu method applet başladığında çağırılan ikinci methoddur. Ayrıca applet restart edildiğinde de 
çağırılır. 
stop() : Applet kapanırken çağırılır. 
destroy() :En son çağırılan [Link] tamamen hafızadan silinir. 
 
 
public class MyApplet extends Applet 
{   
  public void init() { 
  
  } 
  
  public void start() { 
  
  } 
  
  public void stop() { 
  
  } 
  
  public void destroy() { 
  
  } 

 
 
Bir  applet  çalışmasına  baştan  başlamak  zorunda  değildir.  Önceki  çalışmasında  kaldığı  yerden 
başlayabilir. 
 
Bu  4  temel  metoda  ek  olarak  paint(  ),  repaint(  )  metotları  bulunmaktadır.  paint(  )  metodu  ekran 
üzerinde metin veya resim gösterir. paint( ) için graphics sınıfı kullanılır ve bu sınıf [Link] paketinin 
bir parçasıdır. repaint( ) metodu bir pencere güncellendiği zaman kullanılır. 
 
Appletler, showStatus( ) metodunu kullanarak durum çubuğunda bilgi gösterir. 
 
Bir applet başladığında AWT aşağıdaki metotları sırasıyla çağırır : 
 
1. init( ) 
2. start( ) 
3. paint( ) 
 
Bu applet sonlandırıldığında ise aşağıdaki metotlar sırasıyla çağırılır.  
 
1. stop( ) 
2. destroy( ) 
 
 
Örnek : Basit bir applet oluşturalım. Zemin rengi kırmızı, yazı rengi beyaz olsun. Applet sırasıyla hangi 
metotları çağırdığını mesaj değişkeninde saklayalım ve drawString ile yazdıralım. 
 
Applet 1 
 
import [Link].*; 
import [Link].*; 
/* 
<applet code="Sample" width=300 height=50> 
</applet> 
*/ 
 
public class Applet1 extends Applet{ 
  String mesaj; 
 
 
  public void init() { 
    setBackground([Link]); 
    setForeground([Link]); 
    mesaj = "init() metodu ***"; 
  } 
 
 
  public void start() { 
    mesaj += "start metodu() ***"; 
  } 
 
 
  public void paint(Graphics g) { 
    mesaj += "paint() metodu"; 
    [Link](mesaj, 10, 30); 
  } 

 
 
 
Applet 2 
 
//Durum penceresinin kullanımı 
import [Link].*; 
import [Link].*; 
 
public class Applet1 extends Applet{ 
  String mesaj; 
 
 
  public void init() { 
    setBackground([Link]); 
    setForeground([Link]); 
 
  } 
 
  public void paint(Graphics g) { 
    [Link]("Bu bir applet penceresidir", 10, 30); 
    showStatus("Bu mesaj durum satırında gösteriliyor."); 
  } 

 
 
 
 
 
 
2. Olay Yönetimi 
 
Grafik kullanıcı arayüzleri, tüm kullanıcı etkileşimlerini olaya dayalı bir model yardımı ile yönetir. Bir 
tuşa basma, fareyi hareket ettirme, bir butona tıklama gibi işlemler bir olay oluşturur. Olaylar direkt 
olarak  kullanıcı  arayüzü  ile  etkileşimden  doğmayabilir.  Bazen  bir  olay,  zamanlayıcının  süresi 
dolduğunda, sayaç belli bir değeri aştığında da oluşabilir. 
 
2.1.  Olay  Sınıfları  :  Olayları  temsil  eden  sınıflar,  Java’nın  olay  yönetim  mekanizmasının  temelinde 
yer alır. [Link] paketi, kullanıcı arayüzleri tarafından üretilen, olay tipleri tanımlar. 
 
Olay Sınıfı  Açıklama 
ActionEvent  Bir düğmeye basıldığında, bir liste öğesi çift tıklandığında veya bir menü 
öğesi seçildiğinde üretilir 
AdjustmentEvent  Kaydırma çubuğu hareket ettirildiğinde üretilir. 
ComponentEvent  Bir  bileşen  gizlendiğinde,  taşındığında,  boyutu  değiştirildiğinde  veya 
görünür hale getirildiğinde üretilir. 
ContainerEvent  Bir bileşen pencereye eklendiğinde veya çıkarıldığında üretilir. 
FocusEvent  Bir bieşen klavye odağı kazandığında veya onu kaybettiğinde üretilir. 
InputEvent  Tüm bileşen girişleri için abstract sınıf 
ItemEvent  Bir onay kutusu veya liste öğesi tıklandığında üretilir. 
KeyEvent  Klavyeden bir giriş yapıldığında üretilir. 
MouseEvent  Fare  sürüklendiğinde,  taşındığında,  tıklandığında  veya  bırakıldığında 
üretilir. 
MouseWheelEvent  Fara tekerleği hareket ettirildiğinde üretilir. 
TextEvent  Bir metin alanının ya da metin kutusunun değeri değiştiğinde üretilir. 
WindowEvent  Pencere  etkinleştirildiğinde,  kapandığında,  simge  durumuna 
getirildiğinde…. Üretilir. 
 
 
 
 
2.2. Olay Dinleyicisi Arabirimleri : Dinleyici  (Listener) bir olay meydana geldiğinde bilgilendirilen 
bir  nesnedir.  Dinleyici  arabirimleri,  her  olayı  yönetmek  için  çeşitli  metotlar  sunar.  Bu  arayüzleri 
gerçekleştiren sınıflarda bu metotların üzerine yazılmalıdır. 
 
 
Arayüz 
ActionListener 
AdjustmentListener 
ComponentListener 
ContainerListener 
FocusListener 
ItemListener 
KeyListener 
MouseListener 
MouseMotionListener 
MouseWheelListener 
TextListener 
WindowFocusListener 
WindowListener 
 
Örnek  :  Fare  Olaylarını  Yönetmek  :  Farenin  applet  üzerine  tıklanması  ve  farenin  appletin  dışına 
çıkması olaylarını yönetmek için basit bir uygulama yapalım. 
 
MouseListener  (Fare  dinleyici  arabirimi  applete  uygulanır.  init()  metodunda  addMouseListener 
applete  eklenir.  Bu  dinleyici  arayüzün  5  metodu  vardır.  Biz  yalnızca  2  metodu  kullanıyoruz.  Diğer  3 
metodu aynen bırakıyoruz. 
 
import [Link].*; 
import [Link].*; 
import [Link].*; 
 
public class Applet1 extends Applet implements MouseListener { 
 
  String mesaj = ""; 
  int fareX = 0, fareY = 0; // fare koordinatları 
 
  public void init() { 
     addMouseListener(this);  
       } 
 
  // fare tıklaması 
  public void mouseClicked(MouseEvent me) { 
    fareX = 0; 
    fareY = 10; 
    mesaj = "Fare tıklandı"; 
    repaint(); 
  } 
    // farenin çıkması 
 public void mouseExited(MouseEvent me) { 
    fareX = 0; 
    fareY = 10; 
    mesaj = "Fare appletin dışına çıktı"; 
    repaint(); 
  } 
public void mousePressed(MouseEvent e) { 
          } 
 
    public void mouseReleased(MouseEvent e) { 
 
    } 
 
    public void mouseEntered(MouseEvent e) { 
      
    } 
 
   public void paint(Graphics g) { 
    [Link](mesaj, fareX, fareY); 
  } 
 

 
 
 

 
 
 
 
Örnek : Klavye Olaylarını Yönetmek : Fare olayına benzer. Fark olarak KeyListener dinleyicisi kullanılır. 
Bir  tuşa  basıldığında  keyPressed(),  tuş  bırakıldığında  keyReleased(),  bilgi  girişi  için  keyTyped() 
metotları çalıştırılır. 
 
 
import [Link].*; 
import [Link].*; 
import [Link].*; 
 
public class Applet1 extends Applet 
  implements KeyListener { 
 
  String mesaj = ""; 
  int X = 10, Y = 20; // çıkış koordinatları 
 
  public void init() { 
    addKeyListener(this); 
  } 
 
  public void keyPressed(KeyEvent ke) { 
    showStatus("Tuşa basıldı"); 
  } 
 
  public void keyReleased(KeyEvent ke) { 
    showStatus("Tuş bırakıldı"); 
  } 
//karakter girişi 
  public void keyTyped(KeyEvent ke) { 
    mesaj += [Link](); 
    repaint(); 
  } 
 
  // Display keystrokes. 
  public void paint(Graphics g) { 
    [Link](mesaj, X, Y); 
  } 

 
 

 
 
 
 
SAKARYA ÜNİVERSİTESİ

Java Programlama 
Hafta 7 
 
Prof. Dr. Ümit KOCABIÇAK 
 
 

Bu  ders  içeriğinin  basım,  yayım  ve  satış  hakları  Sakarya  Üniversitesi’ne  aittir.  "Uzaktan  Öğretim"  tekniğine  uygun  olarak 
hazırlanan  bu  ders  içeriğinin  bütün  hakları  saklıdır.    İlgili  kuruluştan  izin  almadan  ders  içeriğinin  tümü  ya  da  bölümleri 
mekanik, elektronik, fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz.  
Her hakkı saklıdır © 2009 Sakarya Üniversitesi 
1. GRAFİKLER 

1.1. Giriş  

AWT  paketinin  sağladığı  Graphics  sınıfı,  zengin  bir  metod  koleksiyonu  sunar.  Bu  metotlar,  oval, 
dikdörtgen, kare, daire, çizgi ve farklı fontlarda metin çizmek için kullanılır. 

Bu şekiller farklı renklerde çizilebilir. Grafikler pencerelerde veya  appletlerde oluşturulabilir. 

Bir şekil çizmek için grafiksel bir zemin gereklidir. Grafiksel bir zemin elde etmek için, getGraphics() 
metodu veya aşağıdaki 3 metotdan biri çağrılmalıdır : 

repaint( ) : Yeniden çizim ihtiyaci olduğu zaman çağırılır. 

update (Graphics g) : repaint( ) metodu tarafından otomatik olarak çağırılır. 

paint(Graphics g) : update ( ) metodu tarafından çağırılır. 

1.2. drawString (Metin çizme ) 

drawString (String metin, int X, int Y); 

X: Metnin çizdirilmeye başlayacağı noktanın X koordinatı (Not : X koordinatı sol üst köşede 0’dır ve 
sağa doğru pozitiftir.). 

Y:  Metnin çizdirilmeye başlayacağı noktanın Y koordinatı  (Not : Y  koordinatı sol üst  köşede  0’dır ve 


aşağıya doğru pozitiftir.). 

Örnek : 

import [Link].*;
import [Link].*;

public class MetinCizmek extends Applet{

public void paint(Graphics g) {


[Link]("Metin Çizdirme Örneği", 50,40);
}
}
 1.3. drawLine (Çizgi çizme ) 

drawLine (X1, Y1, X2, Y2); 

X1,Y1: Çizimin başlayacağı koordinatlar 

X2,Y2: Çizimin biteceği koordinatlar 

Örnek : 

import [Link].*;
import [Link].*;

public class CizgiCizmek extends Applet{

public void paint(Graphics g) {


[Link](0,0,60,80); }
}

1.4. drawRect ve fillRect (İçi boş ve dolu Dikdörtgen çizmek) 

drawRect (ust, sol, genislik, yukseklik); 

fillRect (ust, sol, genislik, yukseklik); 

Köşeleri  yuvarlatılmış  dikdörtgen  çizmek  için,  drawRoundRect(  )  ve  fillRoundRect(  )  metotları 


kullanılır. 

Örnek : 

import [Link].*;
import [Link].*;

public class Dikdortgen extends Applet{

public void paint(Graphics g) {


[Link](20, 15, 50, 40);
[Link](120, 20, 50, 40);
[Link](200, 30, 50, 40, 10, 10);
[Link](70, 90, 140, 100, 20, 30);
}
1.5. drawOval ve fillOval (İçi boş ve dolu Elips veya Çember çizmek) 

drawOval (ust, sol, genislik, yukseklik); 

fillOval (ust, sol, genislik, yukseklik); 

Elips,  belirtilen  dikdörtgen  içine  çizilir.Çember  çizmek  için  ise  belirtilen  dikdörtgeni  kare  olarak 
tanımlamak gerekiyor. 

Örnek : 

import [Link].*;
import [Link].*;

public class Oval extends Applet{

public void paint(Graphics g) {


[Link](10, 10, 50, 50);
[Link](100, 10, 75, 50);
[Link](190, 10, 90, 30);
[Link](70, 90, 140, 100);
}

1.6. drawArc ve fillArc (İçi boş ve dolu Yay çizmek) 

drawArc (ust, sol, genislik, yukseklik, ilkAci, YayACisi); 

fillArc (ust, sol, genislik, yukseklik, ilkAci, YayACisi); 

Yay ilkAci’dan başlayarak YayAcisi miktarı kadar açı yapacak şekilde çizilir. 

Örnek : 

import [Link].*;
import [Link].*;

public class Yay extends Applet{

public void paint(Graphics g) {


[Link](20, 50, 80, 80, 0, 90);
[Link](100, 40, 80, 80, 0, 90);
}
1.7. drawPolygon ve fillPolygon (İçi boş ve dolu Çokgen çizmek) 

drawPolygon (x[ ], y[ ], noktaSayisi); 

fillPolygon (x[ ], y[ ], noktaSayisi; 

Örnek : 

import [Link].*;
import [Link].*;

public class Cokgen extends Applet{

public void paint(Graphics g) {

int x[] = {30, 100, 130, 80, 30};


int y[] = {30, 30, 100, 160, 30};
int n = 5;

[Link](x, y, n);
}

1.8. Renklerle ve Fontlarla Çalışmak 

Grafiklerde rengi ayarlamak için setColor(renk) metodundan yararlanılır.   

Örnek :  

setColor ([Link]) :Renk maviye ayarlanır. 

Font oluşturmak için ilk önce Font sınıfından font nesnesi örneklenir. 

  Font f=new Font(“Arial”, [Link], 14) 

Daha sonra setFont(f) ile kullanılacak font saptanmış olur. 

 
SAKARYA ÜNİVERSİTESİ 

Java Programlama 
Hafta 8 
Prof. Dr. Ümit KOCABIÇAK 

Bu  ders  içeriğinin  basım,  yayım  ve  satış  hakları  Sakarya  Üniversitesi’ne  aittir.  "Uzaktan  Öğretim"  tekniğine  uygun  olarak 
hazırlanan  bu  ders  içeriğinin  bütün  hakları  saklıdır.    İlgili  kuruluştan  izin  almadan  ders  içeriğinin  tümü  ya  da  bölümleri 
mekanik, elektronik, fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz. 
Her hakkı saklıdır © 2009 Sakarya Üniversitesi
1. SWING 

1.1. Giriş 

Java  ilk  çıktığı  zaman  tek  grafik  kullanıcı  arayüzü  AWT  idi.  Fakat  daha  önceden  de  bahsettiğimiz 
AWT'nin  yetersizliklerini  gidermek  için  1997  yılında  Swing  kullanılmaya  başlanmıştır.  Swing  ilk  defa 
Java  1.1  için  ayrı  bir  kütüphane  halinde  sunulmuştur,  daha  sonra  Java  1.2  ile  birlikte  Java'nın  bir 
parçası haline gelmiştir. 

Swing,  AWT’ye  özgü  birçok  sorunu  gidermesine  rağmen  AWT’nin  yerine  geçmez.  Aksine  Swing, 
AWT’nin temelleri üzerine kurulmuştur. Bunun dışında Swing, AWT’nin olay yönetimini kullanır. 

Bir Swing kullanıcı arayüzü pencereler ve bileşenler olmak üzere 2 temel öğeden oluşur. 

Pencereler,  JFrame,  JApplet,  JWindow  ve  JDialog  ‘tur.  Uygulamalarda  çoğunlukla  kullanılan 
JFrame’dir. Applet’ler için ise JApplet’dir. 

Bütün  Swing  bileşenleri  [Link]  paketi  içindeki  sınıflarca  tanımlanmıştır.  JButton,  JLabel, 
JComboBox bileşen sınıflarından bazılarıdır. 

1.2. Basit bir Swing Uygulaması 

import [Link].*;//Swing kütüphanesi 
public class swing1 { 
public swing1(){ 
JFrame jf1 = new JFrame("Swing Dünyası"); 
[Link](250,200); //pencere boyutları 
[Link](JFrame.EXIT_ON_CLOSE); 
[Link](true); 

public static void main(String[] args) { 
swing1 sw1 = new swing1(); 

}
1.3. JOptionPane 

Ekrandan bilgi girişi ve ekrana bilgi yazdrlmas amacyla kullanlan bir komuttur. 

JOptionPane snfnn showInputDialog isimli metodu yardmyla meydana gelen bir pencere 
araclğyla bilgiler kullancdan istenmekte ve JOptionPane snfnn showMessageDialog isimli 
metoduyla  bilgiler ekranda gösterilmektedir. 

1.3.1. Örnek : Diyalog kutusu aracılıgıyla girilen 2 tamsayının toplamını bulup, sonucu diyalog 
kutusunda gösteren uygulama 

import [Link]; 

public class Toplama 

public static void main( String args[] ) 

String sayi1 = 
[Link]( "1. Tamsayıyı giriniz" ); 
String sayi2 = 
[Link]( "2. Tamsayıyı giriniz" ); 

int number1 = [Link]( sayi1 ); 


int number2 = [Link]( sayi2 ); 

int toplam = number1 + number2; 

[Link]( null, "Toplam " + toplam, 
"2 tamsayının toplamı", JOptionPane.PLAIN_MESSAGE ); 
}
}
1.4. Swing Bileşenleri 

JLabel : Bir etiket oluşturan bileşendir. Metin veya simge görüntülemek için kullanılır. 

JTextField : Bir satırlık metin girişi yapabilmeyi ve düzenlemeyi sağlayan bileşendir. 

JButton : Buton bileşeninin oluşturulmasını sağlar. 

JToggleButton : Görüntüsü JButton gibidir. Fakat farklı davranır. Basılmış ve bırakılmış 2 hali vardır. 

JCheckBox : Seçim kutuları oluşturmak için kullanılan bileşendir. 

JRadioButton : Herhangi bir anda yalnızca bir düğmenin seçilebileceği bileşenleri oluşturur. 

JTabbedPane : Sekmeli paneller oluşturur. 

JScrollPane : Bir diğer bileşenin kaydırılmasını yöneten bileşendir. 

JList : Bir listeden bir yada daha çok öğenin seçilmesini sağlayan bileşendir. 

JComboBox : Açılır seçme listesi oluşturur. 

JTree :  Bilginin görünümünü hiyerarşik olarak gösteren bir bileşendir. 

JTable : Verileri satırlar ve sütunlar halinde görüntüleyen bir bileşendir.
1.4. 1. Örnek   : Fahrenheit’ı Celsius’a çeviren program 

[Link] 

import [Link]; 
public class Convert 

public static void main( String args[] ) 

ConvertFrame convertFrame = new ConvertFrame(); 
[Link]( JFrame.EXIT_ON_CLOSE ); 
[Link]( 225, 90 ); 
[Link]( true ); 
}

[Link] 

import [Link]; 
import [Link]; 
import [Link]; 
import [Link]; 
import [Link]; 
import [Link]; 

public class ConvertFrame extends JFrame 

private JLabel label1; 
private JLabel label2; 
private JTextField temperatureF; // 

public ConvertFrame() 

super( "Sıcaklık Dönüştürücü" ); 

label1 = new JLabel( "Fahrenheit sıcaklığını giriniz:" ); 
temperatureF = new JTextField( 10 ); 

[Link]( 

new ActionListener() 

public void actionPerformed(ActionEvent e) 

int temp = [Link]( [Link]() ); 
int celcius = ( int ) ( 5.0f / 9.0f * ( temp ‐ 32 ) ); 
[Link]( "Sıcaklık (Celsius olarak): " + celcius ); 
}
}
);
label2 = new JLabel( "Sıcaklık (Celsius):" ); 

setLayout( new BorderLayout() ); 
add( label1, [Link] ); 
add( temperatureF, [Link] ); 
add( label2, [Link] ); 
}
}
SAKARYA ÜNİVERSİTESİ 

Java Programlama 
Hafta 9 
Prof. Dr. Ümit KOCABIÇAK 

Bu  ders  içeriğinin  basım,  yayım  ve  satış  hakları  Sakarya  Üniversitesi’ne  aittir.  "Uzaktan  Öğretim"  tekniğine  uygun  olarak 
hazırlanan  bu  ders  içeriğinin  bütün  hakları  saklıdır.    İlgili  kuruluştan  izin  almadan  ders  içeriğinin  tümü  ya  da  bölümleri 
mekanik, elektronik, fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz. 
Her hakkı saklıdır © 2009 Sakarya Üniversitesi
1. İSTİSNA YÖNETİMİ 
İstisnalar,  programımızın  çalışma  zamanında  yani  program  çalışırken  ortaya  çıkan  olağan  dışı 
durumlardır. Programcılık dilinde "programın kırılması" ile adlandırılan olaylarda aslında bir istisnanın 
meydana  geldiğini  göstermektedir.  Örneğin  bir  sayının  sıfıra  bölünmesi  "Sıfıra  Bölme"  istisnasının 
ortaya  çıkmasına  sebep  olmaktadır.  Başka  bir  istisna  örneği  ise  uyumsuz  tipler  arasında  değer 
aktarımı  gerçekleştirmeye  çalışmaktır.  Java  istisna  yönetim  sistemi  kullanılarak,  çalışma  zamanı 
hatalrı kontrollü bir şekilde yönetilebilir. Java’da istisna yönetimi try, catch, throw ve finally anahtar 
sözcükleriyle gerçekleştirilir. 

İstisnalar iki şekilde ortaya çıkar : 

1. Yazılımcı "throw" ifadesini kullanarak kendi istisnası ortaya çıkartabilir. 
2. Programımızın normal olarak devamını sürdürmesini engelleyecek hatalardır. 

İstisnaları ortaya çıkartmak ve bu istisnaları yakalayıp yönetmek ayrı işlerdir. Bir istisnayı yakalamak 
için  öncelikle  istisnanın  ortaya  çıkabileceği kod  aralığını  tespit  etmek  gerekir.  Bu  işlem 
gerçekleştirildikten  sonra  aşağıdaki  ifadelerden  birini  kullanarak  istisna  yakalama  işlemi 
gerçekleştirilir. 

[Link] …. catch 

Try  ….Catch  ifadelerinde,  istisnanın  ortaya  çıkması  muhtemel  olan  kod  alanı  try{......}  catch 
parantezleri  arasına  alınmıştır.  Bu  kod  artık  izlenmektedir.  Parantez  içerisinde  bir  hata  meydana 
geldiğinde;  hatanın  ortaya  çıktığı noktadan  sonraki  kodlar  işleme  konulmaz  ve  parantezden  sonraki 
kod  işleme  alınır.  Kod  satırı  işleme  konulmadan  catch  ifadesine  atlanır.  catch  ifadesi  adındanda 
anlaşılacağı  gibi  istisnaların  yakalanıp  seviyelendirildiği  alandır.  Bütün  hatalar  Exception  nesnesi 
tarafından  yakalanabilmektedir.  IOException  sınıfı  bünyesinde  çeşitli  özellik  ve  metotlar 
barındırmaktadır. 

class HataTakibi 

static void Main() 

int a = 5; 
int b = 0; 
int bolum; 
try 

bolum = a / b; 
a = a + 3; 
[Link] ([Link]()); 

catch (IOException e) 

[Link] (“Sıfıra Bölme Hatası”); 


}
1.2. try ……finally 

İstisna  takibinde  try  finally  bloğunun  özelliği;  hata  ortaya  çıksa  da  çıkmasa  da  bu  finally  bloğunun 
çalışıyor  olmasıdır.  Try{}  bloğu  içerisinde  bir  istisna  ortaya  çıktığında  kodumuz  aynen  try  catch 
ifadesinde  olduğu  gibi  hatanın  ortaya  çıkmış  olduğu  noktadan  sonraki  kodlar  çalışmadan  finally 
bloğuna  geçilir.  Catch  ifadesinden  farklı  olarak  hatanın  çeşidinin  tespiti  mümkün  değildir.  Finally 
bloğu  programlarımızda  kullanım  sebebi  try  {}  içerisinde  yaratmış  olduğumuz  nesnelerin 
sonlandırılması veya değişkenlerin son değerlerinin belirlenmesi gereken durumlarda kullanılır. 

1.3. try ….catch …. finally 

try catch  ve  try finally  ifadelerinin ve  kullanım  yeteneklerinin birleşerek  ortak  bir ifade halini  aldığı 


kullanıma try catch finally diyoruz. Bu yöntem kullanılarak hatalar izlenip ayıklanabilmekte; bununla 
birlikte finally bloğunu yetenekleri kullanılarak kaynak kullanımı denetim altında alınabilmektedir. 

1.4. Throw  ifadesini kullanma 

Throw  ifadesi  istisnaları  istediğimiz  anda  ortaya  çıkartmamıza  imkan  vermektedir.  Throw  ifadesi 
IOException sınıf veya bu sınıftan türetilmiş herhangi bir istisna sınıfı için kullanılır. Throw ifadesinin 
kullanıldığı noktada program durarak; istenilen istisnayı üretir. 

2. JENERİKLER 
Jenerikler  parametrelendirilmiş  tip  anlamına  geliyor.  Oluşturduğumuz  nesneleri  tiplerden  bağımsız 
hale  getirmemizi  sağlıyor.  Böylece  kodlarımızı  yeniden  kullanma  yeteneğimiz  arttırıyor.  Bu  işlemi 
yaparken  tip  güvenliğini  de  elden  bırakmıyor.  Jenerikleri  kullanarak  farklı  veri  tipleriyle  otomatik 
olarak çalışan bir tek sınıf oluşturmak mümkündür. 

Jenerikleri daha iyi anlatabilmek için, Jenerik kullanmadan ve kullanarak iki örnek yapalım : 

2.1. Jenerik kullanmadan farklı tipteki dizileri yazdırma 

// Aşırı yükleme metotları kullanarak farklı tipteki dizileri yazdırma 

public class NoJenerik 

// Tamsayı dizi yazdırma için metot 
public static void printArray( Integer[] inputArray ) 

for ( Integer element : inputArray ) 
[Link]( "%s ", element ); 

[Link](); 

// Double dizi yazdırma için metot 
public static void printArray( Double[] inputArray ) 
{
for ( Double element : inputArray ) 
[Link]( "%s ", element ); 

[Link](); 

//  Karakter dizi yazdırma için metot 
public static void printArray( Character[] inputArray ) 

for ( Character element : inputArray ) 
[Link]( "%s ", element ); 

[Link](); 

public static void main( String args[] ) 

// Tamsayı, Double ve Karakter dizilerini oluşturma 
Integer[] integerArray = { 1, 2, 3, 4, 5, 6 }; 
Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 }; 
Character[] characterArray = { 'H', 'E', 'L', 'L', 'O' }; 

[Link]( "Tamsayı dizi elemanları:" ); 
printArray( integerArray ); 
[Link]( "\nDouble dizi elemanları:" ); 
printArray( doubleArray ); 
[Link]( "\nKarakter dizi elemanları:" ); 
printArray( characterArray ); 

2.2. Jenerik kullanarak farklı tipteki dizileri yazdırma 

// Jenerik metotları kullanarak farklı tipteki dizileri yazdırma 

public class Jenerik 

// Jenerik metot 
public static < E > void printArray( E[] inputArray ) 

for ( E element : inputArray ) 
[Link]( "%s ", element ); 

[Link](); 

public static void main( String args[] ) 
{
// Tamsayı, Double ve Karakter dizilerini oluşturma 
Integer[] integerArray = { 1, 2, 3, 4, 5, 6 }; 
Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 }; 
Character[] characterArray = { 'H', 'E', 'L', 'L', 'O' }; 

[Link]( "Tamsayı dizi elemanları:" ); 
printArray( integerArray ); 
[Link]( "\nDouble dizi elemanları:" ); 
printArray( doubleArray ); 
[Link]( "\nKarakter dizi elemanları:" ); 
printArray( characterArray ); 
}
}
SAKARYA ÜNİVERSİTESİ 

Java Programlama 
Hafta 10 
Prof. Dr. Ümit KOCABIÇAK 

Bu  ders  içeriğinin  basım,  yayım  ve  satış  hakları  Sakarya  Üniversitesi’ne  aittir.  "Uzaktan  Öğretim"  tekniğine  uygun  olarak 
hazırlanan  bu  ders  içeriğinin  bütün  hakları  saklıdır.    İlgili  kuruluştan  izin  almadan  ders  içeriğinin  tümü  ya  da  bölümleri 
mekanik, elektronik, fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz. 
Her hakkı saklıdır © 2009 Sakarya Üniversitesi
1. ÇOK KANALLILIK 

1.1. Çok Kanallılık, Thread ve Runnable 

Çok Kanallı Programlama (Multi‐Threaded Programming), bir programda aynı anda birden fazla işin 
yapılabilmesidir. Yani bir kod parçası bir işlemi gerçekleştirirken aynı anda ona paralelel olarak bir 
başka kod parçasının çalışması demektir. Bir birine paralel çalışan çalışanlardan her birine kanal 
(thread) denir. 

Java çok kanallı porgramlamayı temelden desteklemektedir. Yani çok kanallılık dile bir takım 
kütüphanelerle eklenmemiştir. Aslında her Java programı bir kanalda (thread'te) çalışır. 

Çok kanallı programlama'da Thread class'ı ve Runnable interface'i kullanılır. Runnable' interface'i 


sadece run() şeklinde bir method'dan oluşur. Java'da kanal (thread) oluşturmak için öncelikle paralel 
çalışacak olan program parçamızı 'Thread' türü bir sınıf olarak tanımlamamız gerekir. Bu sınıf içinde 
çağrılmadan çalışacak bir metod olması gerekir. Bu da 'Thread' sınıfında tanımlanmış olan 'run' 
metodudur. Yapmamız gereken sadece bu metodu değiştirerek (override) istediğimiz kodu bunu içine 
yerleştirmektir. 

public class kanal1 extends Thread { 


... 
... <kendi kanal sınıfımızın diğer metod ve özellikleri> 
... 
public void run() { 
... 
... <kanalın yapacağı işler> 
... 

Daha sonra programın bu kanalı gören herhangi bir noktasından 'Thread' sınıfının 'start' metodu 
çalıştırılarak. Thread çalışmaya başlatılabilir. Bu metod kendi içinde, 'run' metodunu çağıracak ve 
dolayısıyla kanala yaptırmak istediğimiz işler yapılmaya başlıyacaktır. 

Kanalın 'run' metodu içinde genellikle gecikmeler içeren döngüler kullanılır: 

public class kanal1 extends Thread { 
... 
... <kendi kanal sınıfımızın diğer metod ve özellikleri> 
... 
public void run() { 
while(true) { 
... 
... <belirli aralıklarla yaptırılacak işler> 
sleep(1000); // Örneğin her seferinde 1 saniye beklenecek 
... <belirli aralıklarla yaptırılacak işler> 
... 


}
Burada 'Thread' sınıfının 'sleep' metodu ile kanal belli bir süre sonra çağrılmak üzere bekleme 
kuyruğuna alınır. Bu sayede diğer kanallar da çalışma fırsatı bulurlar. Aynı şekilde 'sleep' yerine aynı 
sınıfın 'yield' metodu kullanılarak işletimi diğer kanallara geçirmek de mümkündür. 

Bazen kanalları yaratırken 'Thread' sınıfını devralmak (inheritance) uygun olmayabilir. Bu durumda 
'Runnable' arabirimi (interface) kullanılarak da çalıştırılabilir (runnable) bir sınıf yaratılabilir: 

public class myThread implements Runnable { 
... 
... 
... 
public void run() { 
... 
... 
... 
try { 
[Link](1000); 


catch(InterruptedException e) { } 
... 
... 

1.2. Dijital Saat Örneği 

import [Link]; 
import [Link]; 
import [Link]; 
import [Link]; 
public class analog extends Applet implements Runnable{ 
Font theFont=new Font("TimesRoman",[Link],24); 
Date theDate; 

Thread runner; 
public void start() 

if(runner==null) 

runner=new Thread(this); 
[Link](); 


public void stop() 

if(runner!=null) 

[Link](); 
runner=null; 

}
public void run() 

while(true) 

theDate=new Date(); 
repaint(); 
try {[Link](1000);} 
catch(InterruptedException e) {} 


public void paint(Graphics g) 

[Link](theFont); 
try 

[Link]([Link](),10,50); 

catch(NullPointerException e){} 

}
SAKARYA ÜNİVERSİTESİ

Java Programlama 
Hafta 11 
 
Prof. Dr. Ümit KOCABIÇAK 
 
 

Bu  ders  içeriğinin  basım,  yayım  ve  satış  hakları  Sakarya  Üniversitesi’ne  aittir.  "Uzaktan  Öğretim"  tekniğine  uygun  olarak 
hazırlanan  bu  ders  içeriğinin  bütün  hakları  saklıdır.    İlgili  kuruluştan  izin  almadan  ders  içeriğinin  tümü  ya  da  bölümleri 
mekanik, elektronik, fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz.  
Her hakkı saklıdır © 2009 Sakarya Üniversitesi 
AĞ PROGRAMLAMA 
Java’nın  en  önemli  özelliklerinden  birisi  İnternet  uyumluluğudur.  Java  programları,  ağ  üzerinde 
iletişim kurmak için [Link] paketi kullanır. Bu paket, ağ programlamayı destekleyen bir grup sınıftan 
oluşur. 

İnternet üzerinde, pek çok bilgisayar birbiri ile iletişim kurmak için protokol kullanır. 

1.1. Protokoller 

Protokoller  bir  bilgisayardan  diğerine  bilgi  aktarmak  için  kullanılır.  Bilgisayarlar,  İnternet  Protokolu 
(IP) ismi verilen veri paketleri değiş‐tokuşu ile iletişim kurarlar. IP, internet üzerinde bir bilgisayardan 
diğerine veri aktarmak için kullanılan ağ protokolüdür. 

IP, kaynak ve hedef bilgisayarları belirlemek zorundadır. Bunu yapmak için IP adreslerini kullanır. Her 
internet  adresi, ağdaki her bilgisayarı benzersiz şekilde tanımlayan bir numaradır. Orijinal olarak tüm 
internet adresleri, dört tane 8 bit’lik değer halinde organize edilmiş 32 bit’lik bir değerden meydana 
gelir.  Bu adres tipi IPv4 (Internet Protocol, sürüm 4) tarafından tanımlanmıştır. Ancak IPv6 (Internet 
Protocol,  sürüm  6)  olarak  adlandırılan  yeni  bir  adresleme  şeması  geliştirilmiştir.  IPv6,  bir  adresi 
göstermek için 8 tane 16 bit’lik değer halinde organize edilmiş 128 bit’lik değer kullanır. IPv6 , IPv4’ün 
desteklediğinden daha geniş bir adres uzayını desteklemektedir. 

IP, kaynak bilgisayardan veriyi hedef bilgisayara yönlendirir. Bir bilgisayardaki belli programlara veri 
göndermek için Bağlantı Noktaları (port) kullanılır. 

Portlar programlar arasındaki iletişim sağlar. Port adresleri çoğunlukla belli bir uygulama protokolü ile 
ilişkilendirilmiş 16‐bit sayılardır. Port numarası, bir  adresleme şemasının en önemli  parçasıdır.  Port 
numarası  yanlış  ise  mesajlar  uygulamalar  arasında  kaybolacaktır.  Bazı  önceden  atanmış  port 
numaraları internet üzerinde kullanılır : 

Port Numarası  Protokol  Açıklama 


21  FTP  Dosya Transfer Protokolü 
23  TELNET  Uzaktan bağlanma 
25  SMTP  Basit e‐posta transfer protokolü 
80  HTTP  http protokolü 
 

İstemci ve sunucu programları arasında iletişim için FTP, SMTP, http gibi birçok uygulama protokolü 
vardır.    Taşıma  protokolleri  ise  uygulama  protokolleri  arasındaki  iletişime  yardımcı  olur.  Bir  porttan 
diğer bir porta mesaj aktarmak için kullanılır. Mesaj, bir bağlantı veya bağlantısız iletişim metodu ile 
aktarılır. 

TCP  :  Kaynak  ve  hedef  portların  IP  adresleri    arasında    bir  bağlantı  oluşturur.  Bu  portlar  bağlantı 
kapatılana  veya  kopana  kadar  bağlıdır.  TCP  bağlantıyı  kaynaktan  hedefe  bir  bayt  akımı  olarak 
gerçekleştirir. [Link] sınıfları TCP destekler. 

UDP  :  Bağlantısız  bir  protokoldür.  Bağlanmak  için  bir  bağlantı  oluşturmaz.  Basit  bir  örnek  normal 
postadır.  Bir  şey  postalarken,  bir  mesaj  ve  hedefin  adresini  yazarız  ve  mektubu  posta  kutusuna 
koyarız. UDP’de hedef portu ve IP adresini datagram ismi verilen öbek içine yazar. Sonra datagramı 
hedefe gönderir.  UDP, TCP’ye göre güvensizdir. Çünki teslimat garantisi yoktur. 

İstemciler  ve  sunucular  soketler  aracılığıyla  bağlantı  oluştururlar.  Bu  bağlantılar  TCP  kullanılarak 
oluşturulan iletişim bağlantılarıdır. İstemciler istemci soketleri aracılığıyla iletişim kurarken, sunucular 
sunucu soketleri aracılığıyla iletişim kurarlar.İstemci, sunucu ile iletişim kurmak için sunucu soketine 
bir bağlantı oluşturur. İstemci ve sunucu sonra bağlantı üzerinden veri alış‐verişi sağlar. 

Bir  soket  oluşturmak  için  [Link]  sınıfından  nesne  oluşturlmalıdır.  Sonra  internet  üzerinden 
veri  gönderilebilir  ve  okunabilir.    Bir  telefon  görüşmesi  için  telefon  numarasını  bilmek  zorunda 
olunduğu gibi, alıcının IP adresi bilinmelidir.  

Soketler,  makine  adresi  ve  port  numarası  ile  ilişkilendirilir.  Makine  adresi,  istemci  veya  sunucu 
programlarının  bulunduğu  makinenin  IP  adresidir.  Port  adresi,  istemci/sunucu  programlarının 
kullandığı iletişim portudur. 

Bağlantısız iletişim yerine bağlantılı iletişim her zaman tavsiye edilir. 

2. [Link]  
[Link] paketi, soket tabanlı istemci/sunucu iletişimini destekleyen sınıflar sunar.  

[Link] paketi aşağıdaki sınıflardan oluşur : 

 InetAddress 

 Socket 

 ServerSocket 

 DatagramSocket 

 DatagramPacket 

2.1. InetAddress Sınıfı 

Bu sınıf, internet üzerinde adresleri bulmaya yardım eder. Adresi bulmak için sadece isim yeterlidir. 
Inetrnet IP adreslerini özetler. Hem sayısal IP adreslerini hem de makine isimlerini destekler. 

getLocalHost() : Yerel makinenin adresini tutar. 

getHostName() : Makinenin alan adını döndürür. 

getHostAddress() : Makinenin sayısal IP adresini gösterir. 

getByName() : Bir makinenin internet adresini göstermek için kullanılır. 

 
 

Örnek : 

import [Link].*; 

public class ag1 { 

  public static void main(String args[]) throws UnknownHostException { 

    InetAddress Adres1 = [Link](); 

    [Link](Adres1); 

    Adres1 = [Link]("[Link]"); 

    [Link](Adres1); 

  } 

2.2. Socket Sınıfı 

Java  programları  ağa  bağlanmak  için  bir  soket  kullanır.  “Socket”  sınıfı,  istemci  bağlantılarının 
oluşturulmasına ve istemci ve sunucu arasında uygulamalar geliştirilmesine yardımcı olur.  

getInetAddress() : IP adresini elde etmek için kullanılır. 

getPort () : Makinenin port numarası 

getLocalPort () : Yerel port numarası 

getLocalAddress () : Yerel IP adresi 

getInputStream() ve getOutputStream (): Girdi ve çıktı akımlarına erişmek için 

close () : Soketi kapatır. 

SO_LINGER : close() metodunu çağırdıktan sonra soketin ne kadar açık kalacağını belirten 
zamanı tanımlar. 

SO_TIMOUT : Zaman aşımına uğramadan önce soket üzerindeki bir okuma işleminin ne kadar 
bekledikten sonra bloke olacağını tanımlar. 

TCP_NODELAY : Soket bağlantısı üzerinden gönderilen veriyi tanımlamak için bir algoritmanın 
kullanılıp kullanılmayacağını belirler. 

setSocketImplFactory () : Varsayılan Java soket gerçekleştirmesinden geleneksel soket 
gerçekleştirmesine geçer. 
2.3. ServerSocket Sınıfı 

Bu sınıf TCP sunucusu soketini gerçekleştirir.  

accept () : Sunucu soketinin dinleme moduna geçmesini ve bir gelen bağlantı oluşturuluna kadar 
beklemesini sağlamak için kullanılır. 

getInetAddress() : IP adresini elde etmek için kullanılır. 

getLocalPort () : Sunucu soketinin gelen bağlantılar için dinlediği yerel port numarası 

toString () : Soketin adresini ve port numarasını  dizgi olarak döndürür. 
 
implAccept () : Accept metodunun üzerine yazar. 
 

2.4. DatagramSocket Sınıfı 

Bu sınıf UDP protokolü kullanarak istemci ve sunucu soketlerini gerçekleştirir.  
 
UDP, istemci ve sunucu uygulama programları arasında bilgi alışverişini sağlamak için datagramlar 
kullanan bağlantısız bir protokoldür. 
 
Datagramlar, veri yığınlarıdır. Bu sınıfta aşağıdaki 3 constructor bulunur : 
 
 Varsayılan kurucu, istemci uygulamalarının kullandığı bir datagram soketi oluşturur. Bu 
durumda port numarası belirtilmez. 
 
 İkinci kurucu, datagram soket oluşturmak için belirtilen portu kullanır. Bu, genellikle sunucu 
uygulamaları ile kullanılır. 
 
 Üçüncü kurucu, portun yanında internet adresi de belirtebilmeyi sağlar. 
 

send() : Datagramları göndermek için kullanılır. 

receive() : Datagramları almak için kullanılır. 

getLocalPort () : Yerel port numarası 

getLocalAddress () : Yerel IP adresi 
 
close () : Soketi kapatır. 
 
 
 
 
 
2.5. DatagramPacket Sınıfı 

Bu sınıf, gönderilen ve alınan datagramları kapsüllemek için DatagramSocjet sınıfının nesnelerini 
kullanır. Bu sınıfın, bir tanesi datagram soketinden alınan datagramlar için ve diğeri datagram soketi 
üzerinden gönderilen datagramları oluşturmak için olmak üzere 2 tane kurucu vardır. 

getAddress() : Hedef IP adresini okumak için kullanılır. 

getPort () : Hedef port numarası 

getLength () : Datagramda bulunan verideki baytların sayısı 

getData () : Datagramda bulunan veriyi bir bayt dizisi tamponuna okumak için kullanılır. 

setAddress (): Datagramın IP adresinin ayarlanmasını sağlar. 

setPort (): Datagramın port numarasının ayarlanmasını sağlar. 

setLength (): Datagramın uzunluğunun ayarlanmasını sağlar. 

setData (): Datagramın gönderilecek verinin  ayarlanmasını sağlar. 

Örnek : Aşağıdaki örnek, sunucu ve istemci arasındaki ağ iletişimi uygulamasını gösterir. Mesajlar, 
sunucuda pencere içine yazılır ve istemci tarafında ise gösterildikleri yere yazılırlar. 

Bu örnek program, yerel bir makinede iki port arasında çalışmak üzere DatagramSocket kurucusu 
tarafından kısıtlanmıştır. Programı kullanmak için bir pencerede aşağıdaki satır çalıştırılır : 

Java datagram 

Bu istemcidir. Daha sonra aşağıdaki satır çalıştırılır. 

Java datagram 1 

Bu ise sunucudur. Sunucu penceresi içine yazılan herhangi bir şey, Enter’a basıldıktan sonra istemci 
penceresine gönderilir. 

// Datagram örneği 

import [Link].*; 

class datagram { 

  public static int serverPort = 998; 

  public static int clientPort = 999; 

  public static int buffer_size = 1024; 

  public static DatagramSocket ds; 

  public static byte buffer[] = new byte[buffer_size]; 
  public static void TheServer() throws Exception { 

    int pos=0; 

    while (true) { 

      int c = [Link](); 

      switch (c) { 

        case ‐1: 

          [Link]("Server Quits."); 

          return; 

        case '\r': 

          break; 

        case '\n': 

          [Link](new DatagramPacket(buffer,pos, 

             [Link](),clientPort)); 

          pos=0; 

          break; 

        default: 

          buffer[pos++] = (byte) c; 

      } 

    } 

  } 

  public static void TheClient() throws Exception { 

    while(true) { 

      DatagramPacket p = new DatagramPacket(buffer, [Link]); 

      [Link](p); 

      [Link](new String([Link](), 0, [Link]())); 

    } 
  } 

  public static void main(String args[]) throws Exception { 

    if([Link] == 1) { 

      ds = new DatagramSocket(serverPort); 

      TheServer(); 

    } else { 

      ds = new DatagramSocket(clientPort); 

      TheClient(); 

    } 

  } 

3. Web ile İlgili Sınıflar  
[Link] paketi ayrıca Web’e özgü uygulamaları destekleyen sınıflar da sunar.  

3.1. URL Sınıfı 

Web üzerinde kaynakları bulabilmek için standart bir yol sunar. [Link] sınıfı web üzerindeki 
nesneleri kapsüller.  
Kaynak ismi 
Protokol tanıtıcı  http :// [Link] 

openConnection() : Bir bağlantı oluşturur ve bir akım döndürür. 

getContent () : Bir bağlantı oluşturur ve içeriği okur. 

getFile () : URL’nin dosya ismi kısmını döndürür. 

getHost () : URL’nin makine ismi kısmını döndürür. 

getPort ():URL’nin port numarası kısmını döndürür. 

getProtocol ():URL’nin protokol ismini döndürür. 

getRef ():URL’nin referans kısmını döndürür. 

equals (Object) : 2 URL nesnesinin aynı kaynağı gösterip göstermediğini test eder. 

openStream() : Bir bağlantı oluşturur ve okumak için bir akım döndürür. 
Örnek : Aşağıdaki örnekte [Link]’nin misyon sayfasına bir URL oluşturulur ve sonra 
özellikleri incelenir. 

import [Link].*; 

class ag2 { 

  public static void main(String args[]) throws MalformedURLException { 

    URL hp = new URL("[Link]

    [Link]("Protocol: " + [Link]()); 

    [Link]("Port: " + [Link]()); 

    [Link]("Host: " + [Link]()); 

    [Link]("File: " + [Link]()); 

    [Link]("Ext:" + [Link]()); 

  } 

3.2. URLConnection  Sınıfı 

Web üzerindeki aktif http bağlantılarını kapsüller. Soyut bir sınıftır. Tek bir URL’den URLConnection 
nesneleri oluşturulabilir ve birden fazla bağlantıyı aynı anda tutabilirsiniz. URLConnection kurucusu 
protected türündedir. Bu nedenle, bir URLConnection nesnesi oluşturmak için, önce bağlantıyı açmak 
zorundayız.  Bunu yapmak için openConnection() metodu kullanılır. Bu sınıf, bir URLConnection 
nesnesinin varsayılanlarını, sorgularını ve o anki ayarlarını değiştirmek için çeşitli metotlar sunar.  

connect() : Bir iletişim bağlantısı oluşturur. 

getDate() : Tarihi alır. 

getExpiration() :URL’nin bitiş tarihini alır. 

getInputStream() : Kaynağı okumak için kullanılabilecek “InputStream” akımını alır. 

getLastModified () : Son değiştirilme tarihini alır. 

getURL() : Bağlantı oluşturmak için kullanılan URL’yi alır. 

Kısaca URLConnection sınıfı Web nesneleri ve Web nesnelerine bağlantılar hakkında bilgiler edinmek 
için kullanılır. HttpURLConnection sınıfı http parametrelerine direkt erişim sağlar. Bu URLConnection 
sınıfının  alt sınıfıdır. 

 
Örnek : Bir URL nesnesinin openConnection() metodunu kullanarak bir URLConnection oluşturulur ve 
sonra belgenin özelliklerini ve içeriğini incelemek için kullanılır. 

// URLConnection Örneği. 

import [Link].*; 

import [Link].*; 

import [Link]; 

class ag3 

  public static void main(String args[]) throws Exception { 

    int c; 

    URL hp = new URL("[Link]

    URLConnection hpCon = [Link](); 

    // tarihi al 

    long d = [Link](); 

    if(d==0) 

      [Link]("No date information."); 

    else 

      [Link]("Date: " + new Date(d)); 

    // içerik tipini al 

    [Link]("Content‐Type: " + [Link]()); 

    // bitiş tarihini al 

    d = [Link](); 

    if(d==0) 

      [Link]("No expiration information."); 

    else 
      [Link]("Expires: " + new Date(d)); 

    // son değiştirme tarihini al 

    d = [Link](); 

    if(d==0) 

      [Link]("No last‐modified information."); 

    else 

      [Link]("Last‐Modified: " + new Date(d)); 

    // içerik uzunluğunu al 

    int len = [Link](); 

    if(len == ‐1) 

      [Link]("Content length unavailable."); 

    else 

      [Link]("Content‐Length: " + len); 

    if(len != 0) { 

      [Link]("=== Content ==="); 

      InputStream input = [Link](); 

      int i = len; 

      while (((c = [Link]()) != ‐1)) { // && (‐‐i > 0)) { 

        [Link]((char) c); 

      } 

      [Link](); 

    } else { 

      [Link]("No content available."); 

    } 

  } 

 
URLEncoder Sınıfı  

Bu sınıf, metindizgilerini, URL’nin bir parçası olarak kullanılabilecek uygun formata dönüştürür. Bu 
sınıf metin içindeki boşlukları (+) işaretlerine çeviren encode() metodunu bulundurur. Özel karakteleri 
çevirmek için kaçma modu olarak yüzde işaretini (%) kullanır.  

ContentHandler Sınıfı 

MIME türündeki verileri işler ve çıkarır. MIME, Çok Amaçlı İnternet Posta Uzantısı anlamına 
gelmektedir. Farklı türde internet nesneleri tanıma yöntemidir. MIME, ses, resim, video gibi farklı 
nesne türlerini içerir. ContentHandler sınıfı, görüntüleyicilerin MIME türlerini işleyebilmesini sağlar. 
Bir URLConnection nesnesinden MIME türünde bir nesne çıkaran getContent() metodunu içerir. 

 
SAKARYA ÜNİVERSİTESİ

Java Programlama 
Hafta 12 
 
Prof. Dr. Ümit KOCABIÇAK 
 
 

Bu  ders  içeriğinin  basım,  yayım  ve  satış  hakları  Sakarya  Üniversitesi’ne  aittir.  "Uzaktan  Öğretim"  tekniğine  uygun  olarak 
hazırlanan  bu  ders  içeriğinin  bütün  hakları  saklıdır.    İlgili  kuruluştan  izin  almadan  ders  içeriğinin  tümü  ya  da  bölümleri 
mekanik, elektronik, fotokopi, manyetik kayıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz.  
Her hakkı saklıdır © 2009 Sakarya Üniversitesi 
1. Veritabanı 
 

Veritabanı  bir  dosyada  elektronik  olarak  depolanmış  düzenli  bilgi  kümeleridir.  Microsoft  Access, 
Microsoft FoxPro, MYSQL, Oracle ve SQL Server gibi çeşitli veritabanı programları kullanılarak güçlü 
veritabanları oluşturulabilir. Veritabanı uygulaması, bir veritabanının alan ve kayıtlarını alarak bunları 
kullanıcılar için anlamlı bir biçimde görüntüleyen bir programdır. Kayıtları aramak, silmek, yazdırmak, 
eklemek bir veritabanı uygulamasının temel komutlarıdır.  

 
1.1. Temel SQL Komutları 

Bu  bölümde  temel  SQL  komutları  ile  veritabanını  sorgulayarak  veri  alma,  sıralama,  güncelleştirme, 
silme gibi işlemlerinin nasıl yapıldığını inceleyeceğiz. 

SELECT İfadesi  

SELECT ifadesi veritabanından bilgi seçmek için kullanılır. Genel ifadesi aşağıdaki şekildedir. 

SELECT Sütun_ismi_1, Sütun_isimi_2,.... FROM  Tablo_ismi WHERE Koşul  

ORDER BY Siralanacak_sütun [ASC / DESC] 

Temel SELECT İfadesi : SELECT ifadesinin en basit şekli, 

SELECT * FROM  Tablo_ismi 

Buradaki (*) tablodaki tüm sütunları (alan) seçecektir. 
 
Belirli Sütunların Seçilmesi : Tablodan istenilen sütunlar seçiilebilir. 

SELECT Sütun_ismi_1, Sütun_isimi_2,.... FROM  Tablo_ismi 

WHERE İfadesi : Koşulu sağlayan bilgilerin tablodan seçilmesini sağlar.  
 
SELECT Sütun_ismi_1, Sütun_isimi_2,.... FROM  Tablo_ismi WHERE Koşul 

Koşullarda kullanılan operatörler : 
 

Karşılaştırma  Operatörleri  =, <>, <, <=, >, >= 

Mantıksal Operatörler  NOT, OR, AND 

Alfabetik Operatörler  LIKE, NOT LIKE 

Değer  IN, NOT IN 

Değer Aralıkları  BETWEEN, NOT BETWEEN 

Bilinmeyen Değerler  IS NULL, IS NOT NULL 
ORDER BY İfadesi : Satırları sıralamak için kullanılır. ASC seçeneği, artan sırada (yani A  Z, 0  9), 
DESC seçeneği azalan sırada (yani Z  A, 9  0)  sıralama yapmak için kullanılır. 
 
SELECT Sütun_ismi_1, Sütun_isimi_2,.... FROM  Tablo_ismi  

ORDER BY Siralanacak_sütun [ASC / DESC] 

INNER JOIN İfadesi 

SELECT  ifadesi,  bilgileri  yalnızca  bir  tablodan  seçti.  Halbuki  birçok  uygulama  birden  çok  tablo 
kullandığı için, birden çok tablodan gelen bilgilerin birleştirilmesi gereklidir.  2 çeşit birleştirme vardır. 
İç  ve  dış  birleştirme.  İç  birleştirme,  yalnızca  birleştirme  koşulunun  True  (Doğru)  olduğu  satırları 
verecektir.  
 
 
SELECT Sütun_ismi_1, Sütun_isimi_2,.... FROM  Tablo_ 1  
INNER JOIN  Tablo_ 2 

ON Tablo_1.Sütun = Tablo_2.Sütun 
 
 
 
INSERT İfadesi 

INSERT ifadesi, bir tabloya yeni bir kayıt ilave etmek için kullanılır.  
 
INSERT INTO Tablo_ismi (Sütün_ismi_1, Sütün_ismi_2, .....) 
VALUES (Değer1i Değer2,......) 
 
 
UPDATE İfadesi 

UPDATE ifadesi, bir tablodaki bilginin değerlerinin değiştirilmesine olanak sağlar.  
 
UPDATE Tablo_ismi  
SET Sütün_ismi_1=Değer1, Sütün_ismi_2=Değer2, .....) 
WHERE Koşul 
 
DELETE İfadesi 

DELETE ifadesi, bir tablodaki satır(lar)ın silinmesini sağlar.  
 
DELETE FROM Tablo_ismi  
WHERE Koşul 
 
 

 
2. JDBC 

Java  da  veri  tabanı  uygulamaları  geliştirmeyi  sağlayan  API  (Application  Programming  Interface) 
JDBC(Java Database Connectivity) dir. Bu API biz proramcılara veri tabanına erişmek ve işlemek için 
bir çok arabirim sunmaktadır. JDBC API kullanarak yazdığımız uygulamalar SQL ifadelerini çalıştırmayı 
sonuçları nesne bazında elde etmeyi ve veriler üzerinden işlem yapmaya olanak sağlamaktadır. JDBC 
API aynı zamanda birçok veri kaynağıyla aynı anda iletişim kurmayı da sağlamaktadır. Kısaca JDBC API 
veritabanını temsil edip aynen veritabanı üzerinde gerçekleştirilen tüm işlemleri(tabloları sorgulama, 
stored prosedürleri kullanma, triggerlarla ,indexlerle çalişma vs.) uygulama bazında gerçekleştirmeyi 
sağlar . Veritabanından çekilen veriler bu API sayesinde nesne mantığıyla işlenmaktedir. 

Üzerinde  durulması  gereken  diğer  önemli  bir  husus  da  JDBC  sürücüleridir.  Sürücüler  her  veritabanı 
yönetim  sistemine  özeldir  ve  uygulamalar  ile  veritabanı  yönetim  sistemi  arasında  kod  alış  verisini 
sağlamaktadır.  Yani  veritabanı  üreticileri  JDBC  API  si  ile  uyumlu  çalışarak  veritabanı  bağlantılarını 
sağlayan sürücüleri kendileri üretmektedir. MySQL veritabanı yönetim sistemine erişmek için MySQL 
JDBC sürücüsünü, Oracle ‘a erişmek için Oracle JDBC sürücüsünü ve Access’e erişmak için ise JDBC‐
ODBC  sürücüsünü  kullanmamız  gerekmektedir.  ODBC  Microsoft  tarafından  geliştirilen  ve  Microsoft 
platformunda  veri  tabanına  erişmeyi  sağlayan  bir  teknolojidir.  Bu  sürücülerden  sadece  JDBC‐ODBC 
JDK ile gelmektedir diğerlerini üreticinin sitesinden indirmek gerekiyor. 

3. JDBC kullanarak veritabanı uygulaması geliştirmek 

JDBC  veritabanına  erişimi  ve  iletişimi  sağlayan  arabirim  ve  sınıflardan  oluşmaktadır.  Bunlardan  en 
önemlileri Driver ,Connection,Statement ve Resultset dir. Bu arabirimler kullanılarak temel veritabanı 
işlemleri gerçekleştirilir. 

Bu  arabirimleri  veritabanı  üreticileri  kendi  ürünlerine  özgü  implemente  etmektedir.  Bize  düşen 
sadece arabirimleri kullanmaktır arka planla pek fazla ilgilenmemiz gerekmiyor. 

Driver  vasıtasıyla  uygulama  ile  veritabanı  arasında  bağlantı  sağlanır  SQL  sorguları  da  Statement 
içerisinde  nesne  mantığıyla  işlenerek  veri  tabanı  üzerinde  sorgular  oluşturulur  ve  bu  sorguların 
çalıştırılmasıyla  uygulamada  kullanabileceğimiz  veri  tabanı  bilgilerini  Resultset  ‘de  depolarız  ve  veri 
ihtiyaci böylelikle karşılanmış olur. 

3.1. Yüklenecek sürücüler 

Yapılması  gereken  ilk  işlem  bağlanacağımız  veri  tabanına  özgü  sürücüleri  uygulamaya  yüklememiz 
gerekir. Bunu 

[Link](“JDBCDriverClass”) 

ile sağlıyoruz. Kullanılacak sürücüler 

Access [Link]  

MySQL [Link] 

Oracle [Link] 
Bu sınıflar jar içerisinde paketlenmiş durumdadır .Uygulamalarımızda bu sınıflardan yararlanmak için 
jar dosyalarının classPath ‘e eklenmesi gerekiyor.  

3.2. Bağlantı Oluşturmak 

İkinci adım olarak veri tabanına bağlanmak için bu işlemi DriverManager sınıfının statik yordamı olan 
getConnection(databaeUrl) metoduyla yapılır. 

Connection connection=[Link](databaseUrl) 

bu ifadede kullanılan databaseUrl parametresi veritabanına özgüdür. 

Access jdbc:odbc:datasource(veritabanı ismi)  

Oracle jdbc:oracle:thin :@hostname:port# OracleDBSID 

MySQL jdbc:mysql://hostname/veritabanı ismi 

port  numarası  oracle  ‘ın  hangi  porttan  dinleme  yaptığını  gösterir  oracleDBSID  ise  veritabanı  ismine 
karşılık gelmektedir. 

3.3.  Statement (ifade ) oluşturmak 

Stament  sınıfı  sorgular  oluşturmayı  ve  bunu  connection  üzerinden  çalıştırmayı,  aynı  zamanda 
sorgular ile çekilen verileri Resultset ile elde etmemizi sağlamaktadır. 

Statement statement =[Link](); 

bu ifade ile sorguları işletecek Statment nesnesi oluşturulur. 

3.4. Sorguları calıştırmak 

Statement nesnesini oluşturduktan sonra bu nesne üzerinden sorguyu çaliştırmak için : 

Resultset resultset=[Link](Sorgu ifadesi); 

3.5. Resulset’i işlemek 

Resulset  nesnesi  veri  tabanındaki  tabloyu  temsil  [Link]şlangiçta  bu  nesne  null’u 
göstermektedir. Bu nesnenin Next() metodunu cağrılarak her seferinde tablonun bir sonraki satırına 
ilerlenir. 

while([Link]()) 

[Link]([Link](1) +” “+ [Link](2)); 

getstring(index) ile o an üzerinde bulunan satırın ilgili sütunları okunur. Her bir döngüde bir sonraki 
satıra ilerlenir. 

You might also like