java 5 nesneler metotlar
DESCRIPTION
Nesne Yönelimli Programlamaya GirişTRANSCRIPT
1
BİL-141 Bilgisayar Programlama I
(Java)
Hazırlayan: M.Ali Akcayol
Gazi Üniversitesi
Bilgisayar Mühendisliği Bölümü
Not: Bu dersin sunumları, “Java Bilgisayar Programlamaya Giriş, A. Yazıcı, E. Doğdu, M.
Özbayoğlu, M. Erten, O. Ergin” kitabı kullanılarak hazırlanmıştır.
Konular
Metotlarla Programlama
Statik Metotlar ve Değişkenler
Math Sınıfı
Sarmalayan Sınıflar
Fazladan Yükleme (Overloading)
Nesne Kurucular
2
3
Metotlarla Programlama
Başka metotları çağıran metotlar
Java dilinde bir metodun gövdesinde başka metot çağırılabilir.
main() metodunun içinde başka nesnelere ait metotlar
nesne adıyla birlikte çağırılmaktadır.
Bir metot ait olduğu sınıfın içinde başka bir metodu doğrudan adıyla çağırabilir. (this işaretçisi de
kullanılabilir.)
4
Metotlarla Programlama
Başka metotları çağıran metotlar
Aşağıdaki örnekte oyunSorusu() metodunun içinden oyunOyna() metodu doğrudan adıyla çağırılmıştır.
public void oyunSorusu()
{
String cevap;
Scanner klavye = new Scanner(System.in);
do
{
oyunOyna();
System.out.print(“Bir kere daha ”);
System.out.println(“oynamak istiyor musun ? ”);
cevap = klavye.next();
} while (cevap.equalsIgnoreCase(“Evet”));
System.out.println(“iyi gunler”);
}
3
5
Metotlarla Programlama
Başka metotları çağıran metotlar – devam – örnek /**
* SayiOyunu sinifi bilgisayarin rasgele sectigi bir sayiyi
* bulmak icin kullanilir.
*/
import java.util.*;
public class SayiOyunu
{
int bulunacakSayi;
int girilenSayi;
boolean sayiBulundu;
private void buyukKucukGoster()
{
if (girilenSayi > bulunacakSayi)
{
System.out.print("Sayiniz buyuk. ");
System.out.println("Daha kucuk bir sayi girin.");
}
6
Metotlarla Programlama
Başka metotları çağıran metotlar – devam – örnek
else if (girilenSayi < bulunacakSayi)
{
System.out.print("Sayiniz kucuk. ");
System.out.println("Daha buyuk bir sayi girin.");
}
else
{
// Sayi bulundu.
System.out.println("Sayiyi buldunuz, tebrikler.");
sayiBulundu = true;
}
}
4
7
Metotlarla Programlama
Başka metotları çağıran metotlar – devam – örnek
public void oyunSorusu()
{
String cevap;
Scanner klavye = new Scanner(System.in);
do
{
oyunOyna();
System.out.print("Bir kere daha oynamak ");
System.out.println("istiyor musun ? (Evet-Hayir)");
cevap = klavye.next();
} while (cevap.equalsIgnoreCase ("Evet"));
System.out.println("iyi gunler");
}
private void oyunaBasla()
{
bulunacakSayi = (int) (Math.random() * 100 + 1);
sayiBulundu = false;
}
8
Metotlarla Programlama
Başka metotları çağıran metotlar – devam – örnek
private void sayiSor()
{
Scanner klavye = new Scanner(System.in);
do
{
System.out.print("1 ile 100 arasinda ");
System.out.println("bir sayi girin.");
girilenSayi = klavye.nextInt( );
} while ((girilenSayi < 1) && (girilenSayi > 100));
}
private void oyunOyna()
{
oyunaBasla();
do
{
sayiSor();
buyukKucukGoster();
} while (!(sayiBulundu));
}
}
5
9
Metotlarla Programlama
Başka metotları çağıran metotlar – devam – örnek
public class DeneSayiOyunu
{
public static void main(String [] args)
{
SayiOyunu oyun1 = new SayiOyunu();
oyun1.oyunSorusu();
}
}
Yukarıdaki örnekte SayiOyunu sınıfı içindeki metotlar
birbirlerini çağırabilmektedir. Bir metot kendi sınıfının dışından çağırılmak istendiğinde
nesneyle birlikte kullanılması gerekir. DeneSayiOyunu sınıfı SayiOyunu sınıfına ait oyunSorusu() metodunu çağırırken oyun1 adlı nesneyle
çağırmaktadır.
10
Metotlarla Programlama
Başka metotları çağıran metotlar – devam – örnek
Çıktı:
DeneSayıOyunu sınıfının örnek programda çalışması
1 ile 100 arasında bir sayı girin.
175
1 ile 100 arasında bir sayı girin.
87
Sayiniz buyuk. Daha kucuk bir sayi girin.
34
Sayiniz kucuk. Daha buyuk bir sayi girin.
67
Sayiniz buyuk. Daha kucuk bir sayi girin.
63
Sayiyi buldunuz. tebrikler.
Bir kere daha oynamak istiyor musun ?
Evet
1 ile 100 arasında bir sayı girin.
77
Sayiniz kucuk. Daha buyuk bir sayi girin.
90
Sayiniz buyuk. Daha kucuk bir sayi girin.
85
Sayiyi buldunuz. tebrikler.
Bir kere daha oynamak istiyor musun ?
Hayir
iyi gunler
6
Konular
Metotlarla Programlama
Statik Metotlar ve Değişkenler
Math Sınıfı
Sarmalayan Sınıflar
Fazladan Yükleme (Overloading)
Nesne Kurucular
12
Statik Metotlar ve Değişkenler
Bazı problemlerde nesne kullanmayan metotlar ve değişkenler gerekebilir.
Bir sınıftan oluşturulan tüm nesneler için bir değişken veya metot aynı olacaksa tanımlaması static yapılır.
Static üyelere erişim nesne ile değil sınıf adı ile yapılır. Nesne ile erişimde derleyici hata vermez ancak static üye olduğu kullanıldığı yerde anlaşılmaz.
Static üyelere this pointer’ı ile erişilemez. Derleyici hata verir. This pointer’ı bir üyeye erişen nesneyi işaret eder.
7
13
Statik Metotlar ve Değişkenler
Aşağıdaki örnekte Math sınıfının static üyesi sqrt()
fonksiyonu kullanılmıştır. Math.sqrt(2.5);
Static üyerle erişim aşağıdaki gibi yapılmalıdır.
Sınıf_adı.metot_adı();
Sınıf_adı.değişken_adı;
14
Statik Metotlar ve Değişkenler
Örnek1 public class StaticOrnek
{
public static int staticA; // Static data member
public int a;
public static void setStaticA(int deger)
{
staticA = deger;
}
public void setA(int deger)
{
a = deger;
}
8
15
Statik Metotlar ve Değişkenler
Örnek1 – devam public int getStaticA()
{
return staticA;
}
public int getA()
{
return a;
}
}
16
Statik Metotlar ve Değişkenler
Örnek – devam public class DeneStaticOrnek
{
public static void main(String [] args)
{
StaticOrnek s1 = new StaticOrnek();
StaticOrnek s2 = new StaticOrnek();
s1.setStaticA(5);
s1.setA(10);
s2.setStaticA(15);
s2.setA(20);
System.out.print("s1 nesnesinin staticA ");
System.out.println("degeri = " + s1.getStaticA());
System.out.print("s1 nesnesinin A ");
System.out.println("degeri = " + s1.getA());
System.out.print("s2 nesnesinin staticA ");
System.out.println("degeri = " + s2.getStaticA());
System.out.print("s2 nesnesinin A ");
System.out.println("degeri = " + s2.getA());
}
}
Çıktı:
s1 nesnesinin staticA degeri = 15
s1 nesnesinin A degeri = 10
s2 nesnesinin staticA degeri2= 15
s2 nesnesinin A degeri = 20
9
17
Statik Metotlar ve Değişkenler
Örnekte staticA değişkeni iki nesne içinde aynıdır. Ancak A değeri farklıdır.
staticA değişkeni static tanımlandığı için nesneden
bağımsızdır.
staticA değişkeni için setStaticA() ve getStaticA() isimli iki farklı static metot tanımlanması
erişimin bunlar ile yapılması tercih edilen yoldur.
Bu düzeltmelerin yapılmış hal devam eden sayfadadır. gibi yapılmalıdır.
18
Statik Metotlar ve Değişkenler
Örnek1 – Düzeltilmiş hali
public class StaticOrnekYeni
{
public static int staticA;
public int a;
public static void setStaticA(int deger)
{
staticA = deger;
}
public void setA(int deger)
{
a = deger;
}
10
19
Statik Metotlar ve Değişkenler
Örnek1 – Düzeltilmiş hali – devam
public static int getStaticA()
{
return staticA;
}
public int getA()
{
return a;
}
}
20
Statik Metotlar ve Değişkenler
Örnek1 – Düzeltilmiş hali – devam public class DeneStaticOrnek
{
public static void main(String [] args)
{
StaticOrnek s1 = new StaticOrnek ();
StaticOrnek s2 = new StaticOrnek ();
StaticOrnek.setStaticA(5);
s1.setA(10);
StaticOrnek.setStaticA(15);
s2.setA(20);
System.out.print("s1 nesnesinin staticA degeri = ");
System.out.println(StaticOrnek.getStaticA());
System.out.print("s1 nesnesinin A degeri = ");
System.out.println(s1.getA());
System.out.print("s2 nesnesinin staticA degeri = ");
System.out.println(StaticOrnek.getStaticA());
System.out.print("s2 nesnesinin A degeri = ");
System.out.println(s2.getA());
}
}
11
21
Statik Metotlar ve Değişkenler
Örnek2 – static metot kullanılarak faktöriyel
hesabı
import java.util.*;
public class DeneFaktoriyelToplami
{
public static void main(String [] args)
{
long n, toplam=0;
System.out.print("Bir tamsayi giriniz (n>2):");
Scanner klavye = new Scanner(System.in);
n = klavye.nextInt();
for (long k = 1; k <= n; k++)
toplam = toplam + faktoriyel(k);
System.out.println("1!+2!+...+" + n + "!=" + toplam);
}
22
Statik Metotlar ve Değişkenler
Örnek2 – static metot kullanılarak faktöriyel
hesabı - devam
public static long faktoriyel(long sayi)
{
long f = 1;
for (int i = 1; i <= sayi; i++)
f = f * i;
return f;
}
}
12
23
Statik Metotlar ve Değişkenler
Örnek3 – Nesne kullanılarak faktöriyel hesabı
import java.util.*;
public class DeneFaktoriyelToplamiYeni
{
public static void main(String [] args)
{
long n, toplam=0;
FaktoriyelToplami eleman = new FaktoriyelToplami ();
System.out.print("Bir tamsayi giriniz (n>2):");
Scanner klavye = new Scanner (System.in);
n = klavye.nextInt();
for (long k = 1; k <= n; k++)
toplam = toplam + eleman.faktoriyel(k);
System.out.println("1!+2!+...+" + n + "!=" + toplam);
}
}
24
Statik Metotlar ve Değişkenler
Örnek3 – Nesne kullanılarak faktöriyel hesabı - devam
public class FaktoriyelToplami
{
public long faktoriyel(long sayi)
{
long f = 1;
for (int i = 1; i <= sayi; i++)
f = f * i;
return f;
}
}
Çıktı:
Bir tamsayi giriniz (n>2):8
1!+2!+...+8!=46233
13
25
Statik Metotlar ve Değişkenler
Bir static metodun içinde static olmayan metodun
çağırılabilmesi için ait olduğu sınıftan bir nesne oluşturulup nesne adıyla çağırılması geekir.
Örnekte static bir metodun içinden static olmayan
metot çağrılmaktadır.
import java.util.*;
public class DaireHesabi
{
public static final double PI = 3.14159;
private double daireCapi;
public void setDaireCapi(double Cap)
{
daireCapi = Cap;
}
26
Statik Metotlar ve Değişkenler
public static double alan(double yaricap)
{
return (PI * yaricap * yaricap);
}
public void alaniGoster()
{
System.out.print("Dairenin alani ");
System.out.println(alan(daireCapi / 2));
}
public static void alanBulma()
{
System.out.println("Dairenin capini giriniz:");
Scanner klavye = new Scanner(System.in);
double cap1 = klavye.nextDouble();
DaireHesabi daire1 = new DaireHesabi();
daire1.setDaireCapi(cap1);
daire1.alaniGoster();
}
}
14
27
Statik Metotlar ve Değişkenler
public class DeneDaireHesabi
{
public static void main(String [] args)
{
DaireHesabi daire1 = new DaireHesabi();
daire1.setDaireCapi(2);
System.out.println("Eger dairenin capi 2 ise ");
daire1.alaniGoster( );
System.out.print("Simdi yeni bir daire ");
System.out.println("hesaplayalim.");
DaireHesabi.alanBulma( );
}
}
Çıktı:
Eger dairenin capi 2 ise
Dairenin alani 3,14159
Simdi yeni bir daire hesaplayalim.
Dairenin capini giriniz:
6
Dairenin alani 28.274309999999996
28
Statik Metotlar ve Değişkenler
static değişkenlerde nesneden bağımsızdır.
static metodun içinden static olmayan bir değişkene
de bir nesne oluşturularak erişilir.
Örnekte static bir metodun içinden static olmayan
değişken çağrılmaktadır.
// Static olmayan degiskenin static metodun içinde kullanimi
public class DaireHesabiYeni
{
public static final double PI = 3.14159;
private double daireCapi;
public void setDaireCapi(double Cap)
{
daireCapi = Cap;
}
15
29
Statik Metotlar ve Değişkenler
public static double alan(double yaricap)
{
return (PI * yaricap * yaricap);
}
public static void StaticOlmayanDaireCevresi(double cap)
{
double ornekDaireCevresi;
DaireHesabiYeni daire1 = new DaireHesabiYeni( );
daire1.daireCapi = cap;
ornekDaireCevresi = PI * daire1.daireCapi;
System.out.print("Ornek daire cevresi = ");
System.out.println(ornekDaireCevresi);
}
}
30
Statik Metotlar ve Değişkenler
public class DeneDaireHesabi
{
public static void main(String [] args)
{
DaireHesabiYeni daire1 = new DaireHesabiYeni();
daire1.setDaireCapi(2);
System.out.println("Eger dairenin capi 2 ise ");
DaireHesabiYeni.staticOlmayanDaireCevresi(2);
}
}
Çıktı:
Eger dairenin capi 2 ise
Ornek daire cevresi = 6.28318
16
31
Statik Metotlar ve Değişkenler
Örnek : Kitap sınıfı // Kitap sinifi
public class Kitap
{
//instance variables
private String kitapAdi;
private int basimYili;
private String ISBN;
private double satisFiyati;
public void setBaslik(String a)
{
kitapAdi = a;
}
public void setbasimYili(int b)
{
basimYili = b;
}
32
Statik Metotlar ve Değişkenler
Örnek : Kitap sınıfı – devam
public void setISBN(String c)
{
ISBN = c;
}
public void setsatisFiyati(double d)
{
satisFiyati = d;
}
public void kitapYazdir()
{
System.out.println("Kitap adi:" + kitapAdi);
System.out.println("ISBN:" + ISBN);
System.out.println("Basim yili:" + basimYili);
System.out.println("Fiyati:" + satisFiyati);
}
} // Kitap sinifi sonu
17
33
Statik Metotlar ve Değişkenler
Örnek : Kitap sınıfınını kullanılması /**
* main metodunun baska bir sinif (DeneKitap) içinde kullanimi
* Bu program 3 adet Kitap nesnesi kullanmaktadir.
* Sizin göreviniz, deneKitabi kullanarak, Kitap nesnesini
* tanimlamak ve metotlarini yazmak olacaktir.
*/
public class DeneKitap
{
public static void main (String [] args)
{
Kitap kitap1 = new Kitap();
kitap1.setBaslik("T.C. Anayasasi");
kitap1.setbasimYili(2001);
kitap1.setISBN("123-45678-9");
kitap1.setsatisFiyati(24.50);
// Kitap bilgilerini yazdir.
kitap1.kitapYazdir();
} // main metot sonu
} // DeneKitap sinifi sonu
Çıktı:
Kitap adi:T.C. Anayasasi
ISNB:123-45678-9
Basim yili:2001
Fiyati:24.5
34
Statik Metotlar ve Değişkenler
main() metodu aynı sınıf içinde de kulanılabilir. // main metodunun ayni sinif içinde kullanimi
public class Zar
{
private final int MAKSIMUM = 6;
private int zarDegeri;
public Zar()
{
zarDegeri = 1;
}
public int zarAt()
{
zarDegeri = (int)(Math.random() * MAKSIMUM) + 1;
return zarDegeri;
}
18
35
Statik Metotlar ve Değişkenler
public void zarDegeriVer(int deger)
{
zarDegeri = deger;
}
public int zarDegeriAl()
{
return zarDegeri;
}
public String toString()
{
String sonuc = Integer.toString(zarDegeri);
return sonuc;
}
36
Statik Metotlar ve Değişkenler
public static void main (String [] args)
{
Zar zar1 = new Zar();
int zarSonucu;
System.out.println("Zarda 6 atana kadar devam.");
do
{
zarSonucu = zar1.zarAt();
System.out.print("Atilan zar = ");
System.out.println(zar1.toString());
} while (zar1.zarDegeriAl() != 6);
}
}
Çıktı:
Zarda 6 atana kadar devam.
Atilan zar = 5
Atilan zar = 4
Atilan zar = 6
19
Konular
Metotlarla Programlama
Statik Metotlar ve Değişkenler
Math Sınıfı
Sarmalayan Sınıflar
Fazladan Yükleme (Overloading)
Nesne Kurucular
38
Math Sınıfı
Math sınıfı matematiksel işlemler için tanımlanmıştır. Tüm metotlar static olarak tanımlanmıştır.
Math.PI ve Math.E iki static değişmezdir.
Metot Parametre Sonuç
Math.pow(x,y) x,y: double double
Math.abs(x) x: int, long, float,
veya double
Parametreyle aynı
Math.max(x,y) x,y: int, long,
float, veya double
Parametreyle aynı
Math.min(x,y) x,y: int, long,
float, veya double
Parametreyle aynı
Math.sqrt(x) x: double Double
Math.round(x) x: float veya double int veya double
Math.ceil(x) x: double double
Math.floor(x) x: double double
20
Konular
Metotlarla Programlama
Statik Metotlar ve Değişkenler
Math Sınıfı
Sarmalayan Sınıflar
Fazladan Yükleme (Overloading)
Nesne Kurucular
40
Sarmalayan Sınıflar
Java’da veri türleri değerle metoda gönderilirler.
Java’da veri türlerini sınıf gibi kullanabilmek için sarmalayan sınıflar (wrapper classes) kullanılır.
Temel veri türü Sarmalayan sınıf
int Integer
double Double
float Float
char Character
boolean Boolean
long Long
byte Byte
short Short
21
41
Sarmalayan Sınıflar
Java’da sarmalayan sınıfların kullanımı diğer sınıflarla aynıdır.
Integer i = new Integer;
i = 10;
Sarmalayan veri türünün değeri bir değişkene aktarılabilir.
int j = i.intValue();
int j = i; // kullanılabilir
Sarmalayan sınıflar kullanıldığında çok sayıdaki metot kolaylıkla kullanılabilmektedir.
42
Sarmalayan Sınıflar
Integer sınıfı static değişkenleri ve değişmezleri
Integer i = new Integer;
i = 10;
Sarmalayan sınıflar kullanıldığında çok sayıdaki metot kolaylıkla kullanılabilmektedir.
int j = Integer.MAX_VALUE;
Değişken adı Açıklama
MAX_VALUE Java’da tamsayının alabileceği en büyük
değer (231-1)
MIN_VALUE Java’da tamsayının alabileceği en küçük
değer (-231)
22
43
Sarmalayan Sınıflar
Integer sınıfı static metotları
Metot Açıklama
Integer valueOf(String s) Metoda giren String nesnesini
Integer nesnesine çevirir.
int parseInt(String s) Metoda giren String nesnesini int
temel veri türüne çevirir.
String toString(int i) Metoda giren int temel veri
türünü String nesnesine çevirir.
44
Sarmalayan Sınıflar
Integer sınıfı static olmayan metotları
Metot Açıklama
int compareTo(Integer) İki adet Integer nesnesini sayısal
olarak karşılaştırır.
double doubleValue() Metodu çağıran Integer nesnesini
double temel veri türüne çevirir.
boolean equals(Object o) Metodu çağıran Integer nesnesini
metod giren nesneyle karşılaştırır.
float floatValue() Metodu çağıran Integer nesnesini
double temel veri türüne çevirir.
int intValue() Metodu çağıran Integer nesnesinin int
temel veri türü olarak değerini
verir.
long longValue() Metodu çağıran Integer nesnesini long
temel veri türüne çevirir.
short shortValue() Metodu çağıran Integer nesnesini
short temel veri türüne çevirir.
String toString() Metodu çağıran Integer nesnesinin
sayısal değerini String’e çevirir.
23
45
Sarmalayan Sınıflar
Char veri türünü sarmalayan Character sınıfının static değişkenleri ve değişmezleri
char j = Character.MAX_VALUE;
Değişken adı Açıklama
MAX_VALUE Java’da char veri türünün alabileceği
en büyük değer ‘\uFFFF’.
MIN_VALUE Java’da char veir türünün alabileceği
en büyük değer ‘\u0000’.
46
Sarmalayan Sınıflar
Character sınıfının bazı static metotları
Metot Açıklama
int getNumericValue(char ch) Metoda giren Unicode char temel
veri türünün rakamsal değerini
verir.
int getType(char ch) Metoda giren char temel veri
türünün Unicode gösterimi
içindeki genel kategorisini
verir.
Integer valueOf(String s) Metoda giren String nesnesini
Integer nesnesine çevirir.
boolean isDefined(char ch) Metoda giren char veri türünün
Unicode içinde tanımlı olup
olmadığını gösterir.
boolean isDigit(char ch) Metoda giren char veri türünün 0-
9 arası bir tamsayı olup
olmadığını gösterir.
boolean isLetter(char ch) Metoda giren char veri türünün
bir harf olup olmadığını
gösterir.
24
47
Sarmalayan Sınıflar
Character sınıfının bazı static metotları – devam
Metot Açıklama
boolean isLetterOrDigit(char ch) Metoda giren char veri türünün 0-
9 arası bir tamsayı veya harf
olup olmadığını gösterir.
boolean isLowerCase(char ch) Metoda giren char veri türünün
bir küçük harf olup olmadığını
gösterir.
boolean isUpperCase(char ch) Metoda giren char veri türünün
bir büyük harf olup olmadığını
gösterir.
boolean isWhiteSpace(char ch) Metoda giren char veri türünün
boşluk gösteren bir Unicode harf
olup olmadığını gösterir.
char toLowerCase(char ch) Metoda giren char temel veri
türünü küçük harfe çevirir.
char toUpperCase(char ch) Metoda giren char temel veri
türünü büyük harfe çevirir.
String toString(char ch) Metoda giren char temel veri
türünü String’e çevirir.
48
Sarmalayan Sınıflar
Character sınıfında bazı static olmayan metotları
Metot Açıklama
int compareTo(Character) İki adet Character nesnesini
sayısal olarak karşılaştırır.
boolean equals(Object o) Metodu çağıran Character
nesnesini metoda giren nesneyle
karşılaştırır.
Char charValue() Metodu çağıran character
nesnesinin char temel veri türü
olarak değerini verir.
String toString() Metodu çağıran Character
nesnesini String’e çevirir.
25
Konular
Metotlarla Programlama
Statik Metotlar ve Değişkenler
Math Sınıfı
Sarmalayan Sınıflar
Fazladan Yükleme (Overloading)
Nesne Kurucular
50
Fazladan Yükleme (Overloading)
Bir metod farklı sınıflar içinde aynı isimle yer alabilir.
Metod kullanılırken nesne adıyla birlikte yazılacağından karşıklık olmaz.
Bir sınıfta bir metodun birden fazla durum için kullanılabilmesi metodun fazla yüklenmesiyle gerçekleştirilir.
Örneğin Math sınıfındaki birçok metot int, long, float ve double kullanılabilecek şekilde falzadan
yüklenmiştir.
Math.max(x, y) yazıldığında aynı metoda int, long, float ve double türündeki veri gönderilebilir.
26
51
Fazladan Yükleme (Overloading)
Örnekte aynıSey() adlı metod fazla yüklenmiştir. //Fazladan yükleme örnegi için FazladanYukleme sinifi
public class FazladanYukleme
{
public void ayniSey()
{
System.out.println("Merhaba gencler...");
}
public boolean ayniSey(int sayi)
{
boolean yanit;
if (sayi % 2 == 0)
yanit = true;
else
yanit = false;
return yanit;
}
}
52
Fazladan Yükleme (Overloading)
// FazladanYukleme’nin çalistirilmasi
import java.util.*;
public class FazladanYuklemeDeneme
{
public static void main(String [] args)
{
boolean yanit;
int N;
System.out.print("Bir sayi giriniz:");
Scanner klavye = new Scanner(System.in);
N = klavye.nextInt();
FazladanYukleme fark = new FazladanYukleme();
yanit = fark.ayniSey(N);
if (yanit)
System.out.println(N + " cift sayidir.");
else
System.out.println(N + " tek sayidir.");
fark.ayniSey();
}
}
Çıktı:
Bir sayi giriniz:5
5 tek sayidir.
Merhaba gencler...
27
Konular
Metotlarla Programlama
Statik Metotlar ve Değişkenler
Math Sınıfı
Sarmalayan Sınıflar
Fazladan Yükleme (Overloading)
Nesne Kurucular
54
Nesne Kurucular
Bir nesne oluşturulduğu anda parametrelerine otomatik olarak veya kullanıcı tarafından değer atanmak istenebilir.
Bu tür başlangıç değer atamaları nesne kurucusu (constructor) tarafından yapılır.
Nesne kurucusu new Sınıf_adı(...) şeklinde
yapılır.
Nesne kurucusu da sınıfa ait bir metotdur ve falzadan yükleme yapılabilir.
28
55
Nesne Kurucular
//Fazladan yüklenen Nesne kuruculari
public class Araba
{
private String renk;
private int beygirGucu;
private int hiz;
public Araba(String renk, int guc, int hiz)
{
this.renk = renk;
this.beygirGucu = guc;
this.hiz = hiz;
}
public Araba(String renk)
{
this.renk = renk;
}
56
Nesne Kurucular public void veriGoster()
{
System.out.println("Renk = "+ this.renk);
System.out.println("Beygir Gucu = " + this.beygirGucu);
System.out.println("Hiz = " + this.hiz);
System.out.println();
}
public static void main(String [] args)
{
Araba ferrari = new Araba("kirmizi",450,320);
Araba fiat = new Araba("beyaz");
fiat.setBeygirGucu(70);
fiat.setHiz(155);
System.out.println("Ferrari Ozellikleri ");
ferrari.veriGoster();
System.out.println("Fiat Ozellikleri ");
fiat.veriGoster();
}
}
Çıktı:
Ferrari Ozellikleri
Renk = kirmizi
Beygir gucu = 450
Hiz = 320
Fiat Ozellikleri
Renk = beyaz
Beygir gucu = 70
Hiz = 155
29
57
Nesne Kurucular
Eğer bir nesne kurucusu tanımlanmamışsa Java otomatik olarak bir nesne kurucusunu var sayar.
public class Araba
{
private String renk;
private int beygirGucu;
private int hiz;
public static void main(String [] args)
{
Araba ferrari = new Araba(); // Varsayılan nesne kurucusu
}
}
58
Nesne Kurucular
Eğer programcı bir nesne kurucusu tanımlamışsa varsayılan kurucu kullanılamaz.
public class ArabaYeni
{
private String renk;
private int beygirGucu;
private int hiz;
public ArabaYeni (String renk, int guc, int hiz)
{
this.renk = renk;
this.beygirGucu = guc;
this.hiz = hiz;
}
30
59
Nesne Kurucular
public static void main(String [] args)
{
ArabaYeni ferrari = new ArabaYeni(); // derleyici hata
// verir.
}
}
60
Nesne Kurucular
Önceki örnekte nesne kurucu 3 parametreli bir şekilde tanımlanmıştır.
Hiç parametre gönderilmeden nesne kurucusu çağırıldığında derleyici hata verir.
Bu hata yeni bir nesne kurucu oluşturularak giderilebilir.
31
61
Nesne Kurucular
// Bir önceki programdaki hatanin düzeltilmis hali
public class ArabaYeni2
{
private String renk;
private int beygirGucu;
private int hiz;
public ArabaYeni2(String renk, int guc, int hiz)
{
this.renk = renk;
this.beygirGucu = guc;
this.hiz = hiz;
}
public ArabaYeni2()
{
}
62
Nesne Kurucular
public static void main(String [] args)
{
ArabaYeni2 ferrari = new ArabaYeni2(); // tanimli nesne
// kurucusu
}
}
32
63
Nesne Kurucular
Nesne kurucusu diğer metotları çağırabilir.
Nesne kurucusu bir nesne geri döndüren metottur. Ancak return kelimesi kullanmaz.
64
Nesne Kurucular
//Nesne kurucusunun diger metotlari çagirmasi
public class Araba3
{
private String renk;
private int beygirGucu;
private int hiz;
public Araba3 (String renk, int guc, int hiz)
{
System.out.print("Yeni bir Araba3 nesnesi");
System.out.println(" olusturuluyor.");
// nesne kurucusu baska metot çagiriyor.
this.set (renk, guc,hiz);
}
33
65
Nesne Kurucular public Araba3()
{
}
public void set(String renk, int guc, int hiz)
{
this.renk = renk;
this.beygirGucu = guc;
this.hiz = hiz;
}
public void veriGoster()
{
System.out.println("Renk = " + this.renk );
System.out.println("Beygir Gucu = " + this.beygirGucu);
System.out.println("Hiz = " + this.hiz);
System.out.println();
}
66
Nesne Kurucular
public static void main(String [] args)
{
Araba3 ferrari = new Araba3("kirmizi",500,335);
System.out.println("Ferrari ozellikleri");
ferrari.veriGoster();
ferrari.set("siyah",480,325);
System.out.println("Yeni Ferrari ozellikleri");
ferrari.veriGoster();
}
} Çıktı:
Yeni bir Araba3 nesnesi olusturuluyor.
Ferrari ozellikleri
Renk = kirmizi
Beygir gucu = 500
Hiz = 335
Yeni Ferrari ozellikleri
Renk = siyah
Beygir gucu = 480
Hiz = 325