Eclipse ile Java. Laboratuvar Kılavuzu. (J2sdk v1.4.2)

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "Eclipse ile Java. Laboratuvar Kılavuzu. (J2sdk v1.4.2)"

Transkript

1 Eclipse ile Java Laboratuvar Kılavuzu (J2sdk v1.4.2) Yusuf Kenan YILMAZ v Haziran 2007

2 2 Sibnet Java eğitimleri laboratuvar çalışması kitapçığıdır Sibnet Đletişim Bilgileri Tel : (pbx) Faks : Web : Diğer Java & J2EE & WebSphere eğitimlerimiz Kod Kurs Gün Application Track SW225 IBM WebSphere JSP and Servlet Development with Introduction to EJBs 5 SW243 Introduction to Java using IBM WebSphere Studio Application Developer 5 SW233 IBM WebSphere Studio Application Developer Bootcamp 5 SW257 Using EJBs to Develop Enterprise Apps with WebSphere Studio SW530 IBM WebSphere Portal Version 5 Installation and Deployment 5 SW237 Developing Web Applications with WebSphere Studio Admin Track SW246 Administration of WebSphere App. Server 4 Portal Track SW569 IBM WebSphere Portal 5.1 Application Development 3

3 3 Đçindekiler Lab 2: Literals... 4 Lab 3: Building Classes... 7 Lab 4: Inheritence Lab 5: Interface Lab 6.1: Java Collections Lab 6.2: Java 2 Collections Clone & Sort Lab 7: MultiThreaded Programming Lab 8: Exception Handling Lab 9: I/O Stream Lab 10: Object Serialization Lab 11: RTTI & Reflection Lab 12: Applet API Lab 13: RMI Lab 14: Utility Class lar Lab 15: Java 2 Security Lab 16: JDBC Ek-A : Swing API Ek-B : Java tools (native2ascii) Ek-C : Java SDK Ek-D: JavaDoc Ek-E Eclipse Notları... 81

4 4 Lab 2: Literals Literals ve Operators 1. Aşağıdaki kodda hata nedir? Nasıl düzeltilir? float f; f=7.1; 2. y'nin değeri nedir? int x = 3; int y = x << 3; Scope String 3. Aşağıdaki satırda b'nin değeri nedir? int x=3; int z=5; boolean b = (x==z); 4. num1=5 ve num2=0 veriliyor. Aşağıdaki işlemlerin sonunda sayıların değeri ne olur? a) num2=num1++; b) num2=++num1; 5. Aşağıdaki işlemin sonucu nedir? System.out.println( " eşittir " ); 6. Aşağıdaki işlemin sonucu nedir? int i=9; int j=3*3; System.out.println(i==j==false); Aşağıdaki main() metodunun çıktısı nedir? class ScopeTest static int classtotal=0; public static void main(string[] args) int methodtotal=75; classtotal=100; System.out.println("classTotal = " + classtotal); System.out.println("methodTotal = " + methodtotal); minor(); System.out.println("Back in main, classtotal = " + classtotal); System.out.println("methodTotal = " + methodtotal); public static void minor() int methodtotal=55; classtotal=120; System.out.println("In minor, classtotal = " + classtotal); System.out.println("In minor, methodtotal = " + methodtotal);

5 5 Java'da String özel bir Object tipidir, primitive tip değildir. Ancak çok kullanıldığından dolayı diğer Object tiplere göre özelleştirilmiştir. Her String nesnesi read-only'dir. Diğer bir deyişle String nesneleri immutable dır. Örneğin, aşağıdaki örnekte ikinci satırdan sonra str referansı heapde farklı bir adresi gösterir. String str = "Hello"; str = str + " world"; Anonymous String. Aşadaki örnekte str1 ve str2 referansları aynı String nesnesini gösterir. String s1 = "Hello"; String s2 = "Hello"; immutable object : state i bir kere oluştuktan sonra bir daha değişmeyenobject ler immutable dır. Stringclass ı ve Integer class ı immutable dır. String Nesnelerini Karşılaştırmak == operatörü String karşılaştırma amacıyla kullanılmamalıdır. Örneğin bu operatör aşadaki örneklerde farklı sonuçlar verir. String s1 = "armut"; String s2 = "armut"; String s3 = new String("armut"); if (s1 == s2) // 1 System.out.println(true); // true if (s1 == "armut") // 2 System.out.println(true); // true if (s1 == s3) // 3 System.out.println(true); // false String - StringBuffer Append (ya da String birleştirme) işlemi String ve StringBuffer nesnelerinden hangisi için daha hızlı çalışır? Örneğin String a için aşağıdaki toplama (yani ekleme) işleminin yapıldığını varsayın. String a = new String("hello"); a=a+"merhaba"; StringBuffer için ise aşağıdaki işlem yapılmaktadır. StringBuffer sb1 = new StringBuffer("hello"); sb1.append("merhaba"); Hangisi daha hızlıdır? Bu soruyu yanıtlamak için bir class yazın. Literals 1. f=7.1f; Yanıtlar

6 6 2. y=3*2^3=24 3. b=false 4. a) num1=6 num2=5 b) num1=6 num2= eşittir false Scope: classtotal = 100 methodtotal = 75 In minor, classtotal = 120 In minor, methodtotal = 55 Back in main, classtotal = 120 methodtotal = 75 String-StringBuffer package sib.collections; public class StringBufferX public static void main(string[] args) String a = new String("hello"); int loop = 1000; long t1 = System.currentTimeMillis(); for (int i = 0; i < loop; i++) a = a + "merhaba"; long t2 = System.currentTimeMillis(); System.out.println(t2 - t1); StringBuffer sb1 = new StringBuffer("hello"); t1 = System.currentTimeMillis(); for (int i = 0; i < loop; i++) sb1.append("merhaba"); t2 = System.currentTimeMillis(); System.out.println(t2 - t1); System.out.println(a); System.out.println(sb1);

7 7 Lab 3: Building Classes Constructor Elma e1 = new Elma() ifadesinde son parantezler Elma()'nın bir metod olduğunu gösterir. Class ile aynı adı taşıyan metoda constructor denir. Eğer constructor parametre almaz ise zero-argument constructor adını alır. Eğer bir constructor parametre almaz ve gövdesi boş ise default constructor adını alır. Bir class tanımı içinde default constructor tanımlanmamış ise JVM otomatik olarak bir default constructor varsayar. Elma constructor 1. Elma class'ına aşağıdaki constructor'ları ekleyin: Elma() Elma(String r) Renk = r; 2. Şimdi Start.java programını aşağıdaki gibi değiştirin. Artık Elma nesnelerinin renklerini yaratılırken atayabilirsiniz. class Start public static void main(string args[]) Elma e1 = new Elma("Kırmızı"); System.out.println(e1.getRenk()); Overloading Birden fazla metod aynı ismi alabilir. Ancak bu metodların en azından parametre tipleri (veya sayıları) ayırt edici özellikte olmalıdır. 1. Bir classın birden fazla constructor'u olabilir. Elma class tanımına aşağıdaki constructor u da ekleyin. Bu constructor Elma nesnelerini yaratılırken renklerin sayısal verilmelerini sağlar (1: yeşil, 2: kırmızı gibi) Elma(int i) switch (i) case 1 : setrenk("yeşil"); break; case 2 : setrenk("kırmızı"); break; case 3 : setrenk("sarı"); break; default : setrenk("mor"); break;

8 8 2. Şimdi Start.java programınıza aşağıdaki değişikliği yapın: Elma e1 = new Elma(2); System.out.println(e1.getRenk()); Garbage Collector Aşağıdaki kodu inceleyin: Elma e2 = new Elma("kırmızı"); Elma e3 = new Elma("yeşil"); e2=e3; Đlk iki satır heap'de iki Elma nesnesi için yer ayrılmasına sebep olur. Son satır e2'nin e3'ü göstermesini sağlar. Böylece e2 için ayrılan bellek alanı sahipsiz kalır. Aşağıda da null assignment heap de ayrılan belleğin sahipsiz kalmasına yol açar. Elma e1 = new Elma("Yeşil"); e1 = null; Elma e1 = new Elma( yeşil ) e1 = null; e1 Y e ş i l e1 Y e ş i l unreferenced object Aşağıdaki kod garbage collector'u devreye sokar. Garbage collector bir class'ın finalize() metodu varsa o nesneyi heap den silmeden önce bu metodu çağırır. Garbage Collector JVM içinde düşük öncelikli bir thread dir. Sistem yoğunken devreye girmez. Programcı normalde Garbage Collector u çağırmak için bir şey yapmaz. Garbage Collector arka planda çalışır. Ancak aşağıdaki kodda Garbage Collector System.gc() ile özellikle devreye sokulmuştur. Bunu test etmek için: 1. Elma class'ına aşağıda finalize() metodunu ekleyin: public void finalize() System.out.println("bye"); 2. Start.java içinde aşağıdaki değişikliği yapın: // garbage collector Elma e2 = new Elma("kırmızı"); Elma e3 = new Elma("yeşil"); e2=e3; System.gc();

9 9 Parameter Passing Parametreler metodlara geçirilirken ya by value ya da by reference (by address) geçirilir. Java'da bütün parametreler metodlara by value geçer. Parametre tipi primitive ise (int, char, float gibi) primitive değer stack üstüne kopyalanır. Metod parametreleri stack üstüne kopyalanan bu değerlere initialize edilir. Parametre tipi Object ise (aslında variable lar hiçbir zaman Object olamaz, Object reference demek daha doğru olur) bu kez Object reference stack üstüne kopyalanır. Metod çalışırken bu referens değerlerini kullanır. Ancak Object reference stack üzerine kopyalansa da metod gerçek Object üzerinde çalışır. Sonuç olarak: 1. primitive tipler method tarafından değiştirilemezler, 2. object tipler metod tarafındandeğiştirilirler, 3. immutable Object tipler (String ve Integer classları gibi) metod tarafından değiştirilemezler. By reference parametre geçişinde Object adresleri stack a kopyalanmaz, metod parametreleri doğrudan gerçek parametreleri gösterir. Teknik deyimle actual parametrelerin l-value ları formal parametrelerin l- value ları eşittir. Aşağıdaki örnekte bu iki durum karşılaştırılmıştır: public class ParameterPassing public static void main(string[] args) int a=5; System.out.println("a= " + a); asga(a); System.out.println("a= " + a ); StringBuffer s = new StringBuffer("Merhaba"); System.out.println("s= " + s); asgs(s); System.out.println("s= " + s ); static void asga(int x) x=30; static void asgs(stringbuffer x) x.append(" Dünya"); Bu programın çıktısı nedir? Encapsulation Aşağıdaki main() metodunu inceleyin. e1 nesnesinin rengi nasıl set edilmiş? e1.setrenk("kırmızı") yerine doğrudan Renk property'si üzerinde işlem yapılmış. OO dillerde property'lere diğer nesnelerden doğrudan erişilmesi yerine getter/setter metodlarıyla işlem yapılmaları genel bir kuraldır.

10 10 public static void main(string[] args) Elma e1 = new Elma(); e1.renk = "Kırmızı"; System.out.println(e1.getRenk()); Elma class'ının Renk property'sini korumaya alın: class Elma private String Renk; Yukarıdaki main() artık çalışmayacaktır. Package Package kabaca dizine (ya da folder) karşılık gelir. Bir package yaratmak aslında bir dizin yaratmaktır. JVM'nin aradığı classları bulabilmesi için (default dizinde değilse) class'ın bulunduğu dizinin belirtilmesi gerekir. Đşletim sistemlerinde dizinler-alt dizinler \ ile ayrılırken (örneğin c:\winnt\system32...) package'ler. (nokta) ile ayrılırlar. (Örneğin java.util package'i aslında..\java\util dizini demektir). Class'ın içinde çağırdığınız ancak farklı package'lerde bulunan diğer class'ları belirtmek için import kullanılır. 1. com.xnet.p1 ve com.xnet.p2 adlı iki package yaratın. 2. com.xnet.p1 altında Elma.java, com.xnet.p2 altında Start.java class'ları oluşturun. Start içindeki main() aşağıdaki gibi olabilir: Elma e1 = new Elma(2); System.out.println(e1.getRenk()); 3. Start.java'yı çalıştırın. Elma class'ını bulamayacaktır. 4. Şimdi Start içindeki main() metodunu aşağıdaki gibi değiştirip çalıştırın: com.xnet.p1.elma e1 = new com.xnet.p1.elma(2); System.out.println(e1.getRenk()); Alternatif olarak aşağıdaki de çalışır: import com.xnet.p1.elma;... Elma e1 = new Elma(2); System.out.println(e1.getRenk()); static keyword static keywordü ile nitelenen property (field) ya da metod bir class'ın nesnesine değil, class'ın kendisine aittir. Static variable ve static metod lara class variable / class metod da denir. Metod içinde static variable tanımı yapılamaz. Metod içinde sadece local variable tanımlanır. Her new Elma() ifadesi yeni bir Elma nesnesi yaratır. Herhangi bir anda toplam kaç tane Elma nesnesi yaratıldığını bulabilir miyiz? 1. Elma classına bir static property ekleyin:

11 11 static int cnt = 0; 2. Elma class'ının constructor'larını her seferinde cnt'yi arttıracak şekilde düzenleyin: Elma() cnt++; Elma(String r) cnt++; Renk = r; 3. Birkaç tane Elma nesnesi yarattıktan sonra static değişkene erişmek için aşağıdaki kuralı kullanın: System.out.println(Elma.cnt); 4. static değişkene class adı yerine nesne üzerinden de erişirsiniz ancak çoğu compiler bu satıra uyarı verecektir: System.out.println(e1.cnt); Static initializer Static değişkenler Class JVM tarafından yüklendiği anda (o class için Heap de bir Class class ından instance oluştuğunda) initialize edilir (class ın bir static metodu çağrıldığında ya da class dan yeni bir instance elde edildiğinde). Peki ya bir static değişkeni initialize etmek için birden fazla statement verekirse ne olacak? Örneğin static bir DataSource nesnesini JNDI den bulup nasıl initialize edebiliriz? static code block ile statik değişkenler initialize edilebilir. Aşağıdaki örnekte static bloğu sadece bir kere, JVM class ı yüklediği anda çalışacaktır. Class Data static int i; static i=3+5; i=9;... Not: Birden fazla static initializer block olabilir. Compile hepsini birleştirir. Paramater Passing a= 5 a= 5 s= Merhaba s= Merhaba Dünya Yanıtlar

12 12 Lab 4: Inheritence Inheritence Elma class'ını daha önce tanımlamıştınız. Elma class'ının daha özelleşmiş hali YElma class'ına gereksinim duyuluyor. Bu çalışmada da YElma class ını yazacaksınız. 1. yelma adlı yeni bir package yaratın. 2. Diğer paketlerin birinden Elma classını yelma paketine kopyalayın. 3. YElma adlı yeni bir class yaratın. main() metodu olmasın. YElma classının Elma classından türetilmiş olduğunu göstermek için aşağıdaki yazım kuralını kullanın: class YElma extends Elma 4. Yaratılan her YElma nesnesinin renginin yeşil olması için default constructor'u değiştirin: public class YElma extends Elma YElma() setrenk("yeşil"); Şimdi yeni bir Start.java yaratın. main() metoduna aşağıdaki satırları yazarak default constructor'un çalıştığını test edin. Dikkat edecek olursanız YElma class tanımında getrenk() adında bir metod yoktur. Bu method YElma'nın superclass'ında tanımlıdır. Ancak YElma bu metodu sanki kendinde tanımlıymış gibi kullanabilir. YElma ye1 = new YElma(); System.out.println(ye1.getRenk()); 5. YElma constructor'unda aşağıdaki değişikliği yapın. super() keywordü YElma'nın superclass'ı Elma'nın constructor'unu çağırmak için kullanılır. Elma class'ının birden fazla constructoru olabilir ancak Elma(String) imzalı (method signature konusunu hatırlayın) constructor devreye girecektir. SuperClass YElma() //setrenk("yeşil"); super("yeşil"); ye1 nesnesinin superclass'ının adını öğrenmek istiyoruz. main() metodunda ne eklememiz gerekir? tostring() Metodu System.out.println() metoduna Elma ve YElma nesnelerini geçirdiğimizde standart outputa (genellikle ekrana) anlamlı bir mesaj çıksın istiyoruz. System.out.println() methodu parametre olarak verilen nesnenin (varsa) tostring method unu kullanarak onun String tipinde mesajını yazabilir. tostring() methodunu Elma class'ına ekleyebiliriz. public String tostring()

13 13 return "Bu elma " + getrenk()+ " renktedir"; Şimdi Start.java main() içine aşağıdaki satırı ekleyin: System.out.println(ye1); tostring() metodu Object class'ının (bütün class'ların superclass'ı) bir metodudur. Bir class da override edilmedikçe Object içindeki tostring() çalışır. Bu metod ise nesnenin classı ile beraber hashcode() unu hex olarak döner. Yani : tostring : com.sibnet.lab.elma@(hex of Object.hashCode() Method Overriding Yukarıdaki örnekte tostring() metodu Elma class'ına eklenmiştir. YElma class'ı da bu metodu superclass'ı aracılığıyla kullanır. Ancak YElma class'ı da isterse tostring() metodunu yeniden tanımlayabilir. O durumda System.out.println ye1 parametresini gördüğünde tostring() metodunu Elma'dan değil YElma'dan kullanır. 1. YElma class'ına aşağıdaki tostring methodunu ekleyin: public String tostring () return "yeşil_tostring: Bu elma yeşil renktedir"; 2. Şimdi Start.java aşağıdaki satıra hangi çıktıyı üretiyor? System.out.println(ye1); final Metotlar final metodlar override edilemez. Örneğin aşağıdaki Elma metodu getrenk() YElma sınıfı içinde yeniden tanımlanamaz. final public String getrenk() return renk; super ve this (ve instance variable overriding) YElma içinde renk değişkeni tanımlayabilir miyiz? Elma içinde renk değişkeni olduğunu unutmayın. Evet. Subclass lar Superclass içindeki instance variablerın aynısını tanımlayabilirler. Subclass her iki değişkeni de super ve this yardımı ile kullanabilir. YElma içinden super.renk Elma içindeki renk nesnesini, this.renk ise YElma içindeki renk resnesini gösterir. Metod lookup Aynı mantık override edilen metodları çağırırken de geçerlidir.

14 14 YElma içinden super.tostring() metodu çağrıldığında Elma içindeki tostring (ya da orada bulamazsa daa superclass lardaki) kullanır. Yani super.f() ifadesinde method lookup superclass dan başlar. Bulamaz ise daha üst class larda arar: class YElma public void setrenk(string renk) this.renk = renk; String s = super.tostring(); Örneğin bu durumda tostring ilk olarak Elma class ında aranır, bulamaz ise Object classındaki kullanılır. Polymorphism Method overriding Bir class hiyerarşisinde, superclass ve subclass aynı method signature larını taşıyorlarsa bir nesne hangi constructor ile yaratılmış ise (new keywordu ile çağrılan) o class daki metod dikkate alınır. 1. Elma classına aşağıdaki tostring() metodunu ekleyin. public String tostring() return "Elma: " + Renk; 2. YElma class ına ise aşağıdaki tostring() metodunu ekleyin. Her iki metodda da kime ait olduğu bilinsin diye class adı yazıldığına dikkat edin. public String tostring() return "YElma: " + Renk; 3. Şimdi Start.java main() içinde aşağıdaki tanımları yapın. Programın çıktısı olarak ne bekliyorsunuz? Hangi class daki tostring() metodu çağrılacak? Elma e = new YElma(); System.out.println(e); 4. Şimdide açık olarak hangi metodu çağırmak istediğimizi belirtelim. Sonuç değişti mi? System.out.println(((Elma)e).toString()); Polymorphism Örneği ve Run Time (Dynamic) Metod Binding Aşağıdaki kodun çıktısını inceleyin: Vector v = new Vector(); v.add(new Integer(5)); v.add(new Elma("Kırmızı")); v.add(new String("Merhaba")); for (int n = 0; n < v.size(); n++) Object o = v.get(n); System.out.println(o);

15 15 Çıktı: 5 getrenk: Kırmızı Merhaba System.out.println(o) ifadesinde, System.out.println o nesnesinin tostring() metodunu çağırır. Ancak tostring metod adının gerçek çalışacak kod ile ilişkilendirilmesi ancak run-time sırasında (dynamic) olur. Buna Dynamic binding denir. (binding ; metod adının kod ile ilişkilendirilmesi). Öteyandan Object o = v.get(i) satırında upcasting yapılmıştır. Run time da tostring metodunun aranması (metod lookup) gerçekte yaratılan object te başlar. Yukarıdaki örnekte Elma class ı dahil bütün class lar tostring metodunu override etmiştir. Bu nedenle System.out.println(o) satırı her nesnenin kendi tostring metodunun çağrılmasına sebep olur. Subclass-superclass assignment Upcasting new ile subclass dan (ya da derived class) yaratılan bir nesne her zaman superclass (ya da base class) tipinde bir referansa( reference; nesne adresi) atanabilir. Buna upcasting denir. Upcasting her zaman güvenle yapılabilir. Yukarıdaki alıştırmada compiler aşağıdaki satır a hata verdi mi? Elma e = new YElma(); DownCasting Downcasting ise bir derived class referansa base class nesnesnin atanmasıdır. Downcasting upcasting gibi güvenli değildir. Uygun olmayan durumlarda downcasting ClassCastException yaratır. Şimdi şu satırı deneyin: YElma ye = new Elma(); Compiler bu satıra hata verdi mi? Bunu düzeltmek için explicit casting yapmanız ( açık yazmanız ) gerekir. YElma ye = (YElma) new Elma(); Programı çalıştırdığınızda ne oluyor? Programı çalıştırdığınızda (runtime da) ClassCastException hatası alırsınız. JVM Elma nesnesini YElma tipinde bir nesneye dönüştüremez. Ancak aşağıdaki gibi durumlarda downcasting hata vermeden çalışır. ex nesnesinin zaten orijinalinde YElma sınıfına ait olduğuna dikkat edin. Elma ex = new YElma(); // downcasting //YElma ye1 = new Elma(); // Compile time Error //YElma ye2 = (YElma) new Elma(); // Runtime // Error:ClassCastException YElma ye3 = (YElma) ex; // OK. Sembol Resolution Aşağıdaki kodun çıktısı nedir? class A String s; A() s = "Class_a";

16 16 class B extends A String s; B() s = "class_b"; String print() return "class_b_print"; ; class C extends B String s; C() s = "class_c"; void m(string s) String p = s; String q = this.s; String w = super.s; String r = ((A) this).s; System.out.println(p); System.out.println(q); System.out.println(w); System.out.println(r); System.out.println(print()); String print() return super.print(); public static void main(string[] args) C t = new C(); t.m("knidos"); Access Modifiers private Bir derived class (subclass) bir base (superclass) class ın bütün metodlarına sahip olabilir mi? 1. Elma.java içinde setrenk() metodunu private yapın. private void setrenk(string r) Renk=r; 2. Start.java içinde yeni bir YElma nesnesi yaratın: YElma ye = (YElma) new YElma(); ye.setrenk("kırmızı"); Compiler ye.setrenk("kırmızı") satırına hangi mesajı veriyor? protected 1. Daha önce yaratılmamış ise com.xnet.p1 ve com.xnet.p2 adlı iki package yaratın. 2. com.xnet.p1 içine Elma.java, com.xnet.p2 içine YElma.java class larını koyun. Daha önceden bu class lar var ise onları da kullanabilirsiniz.

17 17 3. Elma.java içinde setrenk() aşağıdaki gibi tanımlansın: void setrenk(string r) Renk=r; 4. YElma nın constructor unu aşağıdaki gibi tanımlayın. Compiler setrenk() satırına hangi hatayı veriyor? YElma() setrenk("yeşil"); 5. Bu hatayı düzeltmek için Elma class ındaki setrenk() metodunu public yapabilirsiniz. Ancak public, bu metodun herhangi bir nesne içinden çağrılabilmesi anlamına geliyor. Oysa siz bir subclass ın içinden superclass ının bir methodunu çağırmak istiyorsunuz (o metod zaten inheritance ile geliyor). Bunun için protected keywordünü kullanın. Yani Elma.java içinde setrenk() i aşağıdaki gibi değiştirin: protected void setrenk(string r) Renk=r; Default access modifier Soru: Hiç bir şey yazmadığınız zaman (public, protected ya da private) bir method ya da property nin default access modifier ı nedir? Compilation Unit Bir source dosyası içinde birden fazla class tanımı yazabilirsiniz. Bu dosyanın tamamına compilation unit denir. Ancak bir compilation unit içinde sadece bir public class tanımı olabilir. Ve sadece bu Java source içinde main() methodu olabilir. Herhangi bir package içinde daha önce yarattığınız YElma.java ve Start.java yı aynı dosya içine alarak bu durumu test edin. Yanıtlar SuperClass adı Class c = ye1.getclass().getsuperclass(); System.out.println(c.getName()); Sembol Resolution knidos class_c class_b Class_a class_b_print void m(string s) String p = s; // method parameter s String q = this.s; // class C property s String w = super.s; // class B propert s String r = ((A) this).s; // class A property s

18 18 Default access modifier Hiç biri. Verilmediği zaman ismi olmayan dördüncü bir access modifier varsayılır. Bu access modifier friendli ya da package diye de bilinir. Bu access modifier o package içindeki bütün method ların bu method a erişmesini sağlar.

19 19 Lab 5: Interface Interface Elma ve Armut class'larının aynı method tanımlarına (aynı method signature ) uymalarını zorlayabiliriz. Bunun için genel bir Meyve interface'i yazıp, Elma ve Armut class'larının implement etmesi gereken methodları belirleyebiliriz. 1. Meyve Interface'ini oluşturun. public interface Meyve String getrenk(); void setrenk(string r); 2. Elma class'ını Meyve Interface'inden implement edin. Aşağıdaki satır bunu sağlar. Şimdi artık Meyve içinde belirtilen methodları Elma içinde tanımlamak zorundasınız. public class Elma implements Meyve 3. Implement edilen methodların'un signature'ı aynı olmak zorunda ama gövdesi boş olabilir. örneğin getrenk() methodunu aşağıdaki iki biçimde de implement edebilirsiniz: String getrenk() return Renk; Ya da public String getrenk() //empty body return ; 4. Aşağıdaki satırı deneyin? Ne sonuç verdi? Meyve v; 5. Peki ya şu satır? Meyve v2 = new Meyve(); Interface'lerin değişkenleri olabilir ama Interface den yeni bir nesne (instance) yaratılamaz. Şimdi şu satırları test edin: Meyve v; v=new Elma("sarı"); System.out.println(v.getRenk()); Bu konu (polymorphism) daha önce de çalışılmıştı. new ile subclass dan (ya da derived class) yaratılan bir nesne her zaman superclass (ya da base class) tipinde bir referansa( reference; nesne adresi) atanabilir. Buna upcasting denir. Ama tersi downcasting her zaman mümkün değildir. Uygun olmayan durumlarda downcasting ClassCastException yaratır. Constant Değerler Bir interface içinde sabit değerler de tanımlanabilir. Aşağıda IConst interface inde bazı matematiksel sabitler tanımlanmıştır. IConst ve Circle kodlarını yazıp test edin.

20 20 IConst.java public interface IConst double pi = 3.14; double e = 2.71; double getarea(); Circle.java public class Circle implements IConst double rad; public double getarea () return pi*rad*rad; ; Circle(double r) rad = r; public static void main(string[] args) Circle c1 = new Circle(2.0); System.out.println(c1.getArea()); //Circle.pi=3.00; hata System.out.println(Circle.pi); 1. Circle da main() içinde pi değerini yazdırmak istiyoruz. Hangi satırı eklerdiniz? 2. Circle da main() içinde pi değerini yaklaşık 3 almak için aşağıdaki satırı ekliyoruz. Ancak hata veriyor. Neden? Circle.pi=3.00; RMI Interface kavramı RMI (Remote Method Invocation) gibi distributed programming konularında çokca başvurulan bir özelliktir. RMI server daki Java nesnelerinin remote sistem (client) üzerinden erişilmesidir. Nesneler network ten geçer. Networkte nesneleri taşıyon protokol Java Remote Method Protocol (JRMP) adını alır. Ancak CORBA nın taşıyıcı protokolü IIOP yi kullanan RMI versiyonu da vardır (RMI-IIOP). Server da aşağıdaki IElma interface i ve onu implement eden Elma class ı olsun. public interface IElma String getrenk(); void setrenk(string r); public class Elma implements IElma String Renk; public String getrenk()

21 21 ; return Renk; public void setrenk(string r) Renk = r; ; Elma(String r) Renk = r; Aşağıdaki Main class ında server ve client olmak üzere iki ayrı bölüm bulunmaktadır. Bu kod gerçek bir RMI uyarlaması değildir. Gerçekte Main içindeki server site kısmı RMI server tarafında çalışan, client tarafı ise remote site da çalışan iki ayrı class dır. Ayrıca RMI için naming gibi işlemler de gereklidir. Ancak burada Interface konusunun nasıl işlem gördüğü konusunda bir örnek bulunmaktadır. Server kısmı bir elma nesnesi yaratıp bir vector nesnesi içine koymaktadır. Client bölümünde aynı nesne vector den alınmaktadır. Vector den nesneyi alırken nesnenin Object tipini (Elma) kaybettiğini hatırlayın. Bu nesneyi cast ederek Elma nesnesine çevirmemiz gerekir. Ancak bunu için client tarafında Elma class ının da bulunması gerekir. Ancak Elma class ı içinde pek çok implementation (method larımızın nasıl çalıştığı gibi) bulunmaktadır. Elma class ı kod büyüklüğü olarak uzun ve de gizli olabilir (en azından client ile ayrıntıları paylaşmak istemeyebiliriz). Oysa aşağıdaki koddan da anlaşılacağı gibi client tarafında casting için sadece IElma interface inin olması yeterlidir. IElma interface i sadece method adlarını tutar. Bu nedenle hem kısadır hem de içinde implementation yoktur. import java.util.vector; public class Main public static void main(string[] args) // Server Site Vector v = new Vector(); Elma e1 = new Elma("green"); v.add(e1); // Client (Remote site) IElma ex = (IElma) v.elementat(0); System.out.println(ex.getRenk()); Yanıtlar Sabit Değerler Inteface deki değerler sabit (final) ve static değerlerdir. Interface i implement eden class içinden statik değerler gibi erişilebilir. Ancak assignment yapılamaz. System.out.println(Circle.pi);

22 22 Lab 6.1: Java Collections Vector Bir vector nesnesi ilk yaratıldığı anda kaç tane hücresi oluşturulmuştur? Başka bir açıdan soralım: add() methodu bir nesneyi vector nesnesinin hücresine eklerken, bu hücre hazır mıdır? Yoksa her add() işlemi ilk önce bir hücre mi oluşturur? Bunu öğrenmek için vector nesnesine 11 adet (her seferinde Integer değerini bir arttırarak) add() işlemi yapan bir class yazın. Class ı debugger ile çalıştırın. v Vector nesnesinin içine debuggerdan bakın. Vector v.addelement(new Integer(1)); Aşağıdaki satırda hata nedir? Vector int i=9; Vector v = new Vector(); v.add(i); Vector class'ı dinamik olarak büyür. Her vector 'hücresi' ayrı bir class tipinde nesne alabilir. 1. Aşağıdaki gibi 4 adet nesne yaratın. String s = "Merhaba"; Vector v = new Vector(); Elma e = new Elma("sarı"); int i[] = new int[]2,3,7; 2. Bu nesneleri depolayacağınız vector nesnesini yaratın. Vector v2 = new Vector(); 3. Yukarıda yarattığınız nesneleri vector'e ekleyin. v2.add(s); v2.add(v); v2.add(e); v2.add(i); 4. Şimdi de vector nesnesinden nesneleri birer birer alıp class isimlerini yazdıralım: for (int c = 0; c<v2.size(); c++) Class cls = v2.elementat(c).getclass(); System.out.println(cls.getName()); 5. Nesneler vector'e eklenirken class tiplerini kaybederler. Vector içine hepsi Object tipine dönüşür. Tekrar elde ettiğimizde orijinal tipine çevirmemiz (type casting) gerekir. Aşağıdaki ilk satır vector içindeki aramayı gösterir. int x = v2.indexof(e); Elma e2 = (Elma) v2.elementat(x); System.out.println(e2.getRenk());

23 23 Bu bölümden itibaren Java 2 ile gelen Collection class'ları göreceğiz. Properties 1. Input için Notepad ile C:\p.txt adında bir dosya yaratın: 2. Dosyanın içeriği aşağıdaki gibi olmalıdır: # yorum user = db2admin pass = pass 3. Aşağıdaki Java programı ile dosya içindeki değerlere erişin: package sib.colls; import java.io.fileinputstream; import java.util.properties; public class Prop public static void main(string[] args) Properties props = new Properties(); try // TR için J2SE 1.42 native2acsii programını kullanın props.load(new FileInputStream("c:\\p.txt")); catch (Exception e) e.printstacktrace(); System.out.println(props.get("user")); Not: Eğer properties dosyası Proje folderının hemen altındaysa file path vermeden kullanın. Iterator Iterator class Enumeration class'in yeni versiyonudur. 1. Aşağıdaki kodu yazarak test edin. Vector nesnesinin Iterator nesnesi ile nasıl okunduğuna dikkat edin. Iterator nesnesinden remove işlemi ise gerçekte Vector nesnesi üzerinde etkilidir. Vector v = new Vector(); v.add(new String("1")); v.add(new String("2")); v.add(new String("1")); // iterator Iterator iter = v.iterator();

24 24 2. Programın çıktısını yazın. Set System.out.println("size= " + v.size()); while (iter.hasnext()) System.out.println((String) iter.next()); iter.remove(); // remove from vector System.out.println("size= " + v.size()); iter = v.iterator(); while (iter.hasnext()) //nothing to print System.out.println((String) iter.next()); Bu class matematikdeki küme tanımının karşılığıdır. Bir kümede aynı isimli iki eleman olamaz. Örneğin A = a,b,a = a,b olur. Aynı şekilde bir Set nesnesine aynı elemanı eklemenin etkisi yoktur. Aşağıda Set nesnesinin elemanlarına erişmek için Iterator kullanılmıştır. // set System.out.println("\nHashSet - near constant time complexity:"); v.add(new String("1")); v.add(new String("2")); v.add(new String("1")); Set hs = new HashSet(); hs.addall(v); hs.add(new String("2")); // has no effect iter = hs.iterator(); while (iter.hasnext()) System.out.println((String) iter.next()); // System.out.println("\nTreeSet (ordered)- logaritmic time complexity:"); Set ts = new TreeSet(); ts.addall(v); iter = ts.iterator(); while (iter.hasnext()) System.out.println((String) iter.next()); Yukarıdaki programın çıktısı nedir? Set ve equals() metodu Şimdi Elma nesnelerini Set içine ekleyelim. Aşağıdaki programın çıktısı 3 ayrı Elma nesnesidir. Set hs = new HashSet(); hs.add(new Elma("K")); // has no effect hs.add(new Elma("K")); hs.add(new Elma("K"));

25 25 Iterator iter = hs.iterator(); while (iter.hasnext()) System.out.println( iter.next()); Set içine eklerken add() metodu 3 Elma nesnesinin de aynı olduğunu anlamaz. Çünkü Elma nesnelerinin aynı olduğunu test etmekiçin equals() metodunu çağırır. equals() metodu Object class ında gelir. Default olarak referance karşılaştırması yapar (e1==e2). Bu metodunun Elma içinde override edilmesi gerekir. Elma içinde equals() metodunu overide ederek yukarıdaki kodu tekrar deneyin. public boolean equals(object obj) if(this == obj) return true; if((obj == null) (obj.getclass()!= this.getclass())) return false; // object must be Test at this point Elma e = (Elma)obj; return (renk == e.renk) (renk!=null && renk.equals(e.renk)); public int hashcode() int hash = HashCodeUtil.SEED; hash = HashCodeUtil.hash( hash, renk ); return hash; Not: equals() metodu override edildiğinde hashcode() metodu da override edilmelidir. Collection API sinin (set, map, list) çalışması için bu gereklidir. Birbirine eşit olan object ler aynı hashcode() u vermelidir. Yani e1.equals(e2) ise e1.hashcode() = e2.hashcode() olmalıdır.tersi zorunlu değil. Yani Birbirine eşit olmayan object ler farklı hash kodu üretmek zorunda değil. BitSet BitSet bitwise işlemler yapmak için kullanılan bir class'dır. Aşağıdaki kodun çıktısı nedir? ArrayList ve LinkedList // BitSet System.out.println("\nbitSet:"); BitSet b = new BitSet(); b.set(0); System.out.println(b.size()); Aşağıdaki programın çıktısı nedir? import java.util.*; public class ListExample public static void main(string args[]) List list = new ArrayList();

26 26 list.add("bernadine"); list.add("elizabeth"); list.add("gene"); list.add("elizabeth"); list.add("clara"); System.out.println(list); System.out.println("2: " + list.get(2)); System.out.println("0: " + list.get(0)); LinkedList queue = new LinkedList(); queue.addfirst("bernadine"); queue.addfirst("elizabeth"); queue.addfirst("gene"); queue.addfirst("elizabeth"); queue.addfirst("clara"); System.out.println(queue); queue.removelast(); queue.removelast(); System.out.println(queue); Yanıtlar Iterator size= size= 0 Set HashSet - near constant time complexity: 2 1 TreeSet (ordered)- logaritmic time complexity: 1 2 BitSet bitset: 64 ArrayList ve LinkedList [Bernadine, Elizabeth, Gene, Elizabeth, Clara] 2: Gene 0: Bernadine [Clara, Elizabeth, Gene, Elizabeth, Bernadine] [Clara, Elizabeth, Gene]

27 27 Lab 6.2: Java 2 Collections Clone & Sort Cloneable Interface Bir object in kopyasını clone() methodunu çağırarak oluşturabilirsiniz. Bunun için: Object in class tanımı Cloneable interface ini implement etmeli. Cloneable interface i bir marker interface. Yani hiçbir methodu yok. Sadece JVM ye bu nesnenin clone() methodunu kullanabileceğini söylüyor. Class içinde clone() methodunu yazmalısınız. Bu clone methodu Object class ı içindeki clone() methodunu çağırmalı. Object class ındaki clone() protected method dur. Başka bir classın içindeyken Code assist ile görülemez. Ayrıca Object class ının kendisinin Cloneable olmadığına dikkat edin. Bu nedenle her class Cloneable interface ini kendi implement etmek zorunda. Cloneable Elma 1. Elma class ını Cloneable yapın: public class Elma implements Cloneable String Renk; StringBuffer stf = new StringBuffer(); Bu tanım içinde bir adet StringBuffer nesnesi eklenmiştir. 2. clone() methodunu ekleyin: public Object clone() try return super.clone(); catch (CloneNotSupportedException e) throw new InternalError(); 3. Main.java içinden aşağıdaki gibi Elma nesnesinin kopyasını yaratın. Elma e1 = new Elma("sari"); Elma e2 = (Elma) e1.clone(); Her iki Elma nesnelerinin ayrı renk alanları oldu. Ancak her iki nesne de aynı stf adlı nesneyi görüyor. Main.java içinden aşağıdaki gibi clone işleminin etkisini kontrol edin. System.out.println(e1.getRenk()); e1.stf.append("e1 renk"); System.out.println(e1.stf.toString()); Elma e2; e2 = (Elma) e1.clone(); System.out.println(e2.getRenk()); e2.setrenk("kirmizi"); e2.stf.append("e2 renk"); System.out.println(e2.getRenk()); System.out.println(e2.stf.toString());

28 28 e2.stf.append() işlemi e1.stf nesnesi üzerinde etkili olacaktır. 4. Elma class tanımından Cloneable ifadesini kaldırın. Yani class aşağıdaki gibi tanımlansın. Main.java yı çalıştırın. Hangi hatayı alıyorsunuz? public class Elma... Yanıt: Programı çalıştırdığınızda CloneNotSupportedException hatasını alırsınız. Shallow Copy Söz konusu kopyalama işlemi Shallow Copy adını alır. Source konumundaki Elma nesnesinin içindeki bütün primitive data tiplerinin ( ve String ) ayrı bir kopyası alınır. Ancak object reference lar assignment (=) işlemine tabi tutulur. Yani e2 = e1.clone() işlemi, birbirlerinden bağımsızca update edilebilen iki ayrı e1.renk data tipi yaratır. Ancak e1.stf ile e2.stf aynı StringBuffer nesnesini gösterir. e1 e2 Renk Stf clone() işlemi öncesi e1 e2 Renk Stf Renk Stf clone() işlemi sonrası Soru Aşağıdaki iki işlemin farkı nedir? ve Vector v2 = v.clone(); v2=v; Vector clone() Aşağıdaki kodun çıktısı nedir? import java.util.*; public class Clone

29 29 public static void main(string args[]) Vector v = new Vector(); Elma e1 = new Elma("mavi"); v.add(e1); Vector v2 = (Vector) v.clone(); Elma e2 = (Elma) v.elementat(0); if (e1 == e2) System.out.println("eşit"); else System.out.println("değil"); if (v == v2) System.out.println("eşit"); else System.out.println("değil"); Sorting (sıralama) Aşağıda 4 elemandan oluşan bir vektör verilmiştir. Vector v = new Vector(); v.add("sarı"); v.add("mavi"); v.add("kırmızı"); v.add("siyah"); Bu vektörün elemanlarını outputa yazdırmak için Iterator nesnesini kullanabiliriz. Iterator i = v.iterator(); while (i.hasnext()) System.out.println(i.next()); Ancak output vektörün elemanlarını add() işleminin sırasına göre verecektir. Vektörün elemanlarını nasıl harf sırasına göre yazdırabiliriz? Collections class ının static sort() methodu bir collection nesnesi içindeki elementleri doğal sırasına göre dizer. (Collections ve Collection adlarında iki farklı class olduğunu unutmayın). Elma Sorting Collections.sort(v); i = v.iterator(); while (i.hasnext()) System.out.println(i.next()); Şimdi aşağıdaki List nesnesini düşünün. (List nesnesi ile Vector nesnesi arasında sort işlemi açısından bir fark yoktur). List list = new ArrayList();

30 30 list.add(new Elma("sarı")); list.add(new Elma("kırmızı")); list.add(new Elma("yeşil")); Collections.sort(list); // use compareable Collections.sort() methodu elmaları nasıl, hangi kritere göre dizecektir? sort() methodu primitive data tipleri doğal sıralamalarına göre (nümerik ya da alfabetik sıralama) dizer. Ancak Elma gibi user defined data tiplerini sıralayı bilemez. Bu yüzden Collections.sort() satırı Exception (ClassCastException) fırlatacaktır. implements Comparable Elma class ının sort() methodu ile sortable hale gelmesi için bu classın Comparable interface ini implements etmesi gerekir. public class Elma implements Comparable Bu interface in compareto() methodu iki Elma nesnesini karşılaştırır. compareto() methodunu dilediğimiz gibi yazabiliriz. public int compareto(object o) String r1 = ((Elma) o).getrenk(); String r2 = getrenk(); return r2.compareto(r1); Not: String için compareto() aşağıdaki örnekteki gibi Stringlerin ilk char larının ASCII code farkı olarak çalışır. (ilk char lar aynı ise ikinci char lara bakar) "A".compareTo("C") = -2 (A ile C nin ASCII farkı : = -2) implements Comparator Sorting için bir başka alternatif daha var. Bir class Comparator interface ini de implement edebilir. class Elma2 implements Comparator Comparator interface inin public int compare(object o1, Object o2) adlı methodu bulunmaktadır. compare() methodu compareto() ile karşılaştırıldığında iki adet parametre alır. public int compare(object o1, Object o2) String r1 = ((Elma2) o1).getrenk(); String r2 = ((Elma2) o2).getrenk(); return r1.compareto(r2); Şimdi Collecitons.sort() methodunu aşağıdaki gibi çağırmak gerekir: Collections.sort(list, new Elma2("xxx")); // use comprator, Elma2( xxx ) nesnesi dummy bir nesnedir. sort() methodu bütün nesneleri bu dummy nesne ile karşılaştırır. Dummy nesne aslında herhangi bir Elma2 nesnesi olabilir.

31 31 Yanıtlar Soru Đki işlem ayrı şeyler. Test etmek için: v2=v işlemi sonrasında if(v2==v) doğru sonuç verir çünkü v2=v ifadesi sonrası v ve v2 referansları heap'de aynı vector nesnesini gösterir ( not: vector de heap de bir nesnedir ). Ancak v2=v.clone() satırı sonrasında heap'de ikinci bir vector daha oluşur.ancak sonuçta bu iki vector de aynı objeleri gosteriyor. Biri değişince diğeri de değişiyor. Bu durumda if(v2==v) ifadesi false (yanlış) değerini alır. Vector clone() eşit değil Not: Vector gibi collection nesnelerine clone() işlemi uyguladığımızda iki tane vector oluşuyor. Ancak bu iki vectorun slotları aynı nesneyi/nesneleri gösteriyor. Vector'un slotları heap de yaratılan adres alanları aslında.

32 32 Lab 7: MultiThreaded Programming terminated Start Ready-to-run Running dead completed Non-runnable Waiting Sleeping Blocked Process State Tablosu Concurrent Processing Aşağıdaki class'ı yazıp çalıştırın. 5 thread sırayla başladığına göre class'ın çıktısı niçin sıralı gelmiyor? public class Thread1 extends Thread int index; public static void main(string argv[]) Thread1 t1 = new Thread1(1); Thread1 t2 = new Thread1(2); Thread1 t3 = new Thread1(3); Thread1 t4 = new Thread1(4); Thread1 t5 = new Thread1(5); t1.start(); t2.start(); t3.start(); t4.start(); t5.start(); //end main Thread1(int i) index = i; //end constructor public void run() // dummy job String a = null; for (int i=0; i<500; i++) a = a + "Hello"; System.out.println("Thread " + index + " is finished"); Aşağıda bu sıralamaya etki edebilecek join, sleep ve priority gibi çeşitli teknikler göreceksiniz. join() Method'u

33 33 join() methodu bir thread'in bir başka thread'in sonlanmasını beklemesini sağlar. Örneğin aşağıdaki kodu çalıştıran bir thread bu satırdan sonraki satıra tx threadi bitmeden geçemez; tx'in bitmesini bekler. Bu method Exception fırlattığından try-catch içine yazılmalıdır. tx.join() Yukarıda verilen Thread1 class'ında 3 nolu thread'in 4 nolu thread'den mutlaka önce bitmesini sağlayın. sleep() Method'u sleep() method'u CPU'nun bir thread'in geçici olarak sleep moduna almasını sağlar. Bu durumdaki bir thread bloklanmıştır. sleep() methodu statik bir method dur. Aşağıdaki gibi çağrılır. Method parametresi olarak verilen değer milisaniye cinsinden uyuma süresidir. Thread.sleep(1000) Thread1 class ında 2 nolu thread'i 5 saniye uyutun. En son hangi thread tamamlandı? Thread Priority Bütün thread'lere 1-10 arası öncelik verilebilir. 10 en yüksek 1 en düşük önceliktir. Default öncelik değeri 5'dir. Aşağıda t1 thread'inin önceliği 8'e yükseltilmiştir. Thread t1 = new Thread(); t1.setpriority(8); t1.start(); Thread prority özelliğini kullanarak 1,2, 4 ve 5 nolu thread'lere en yüksek (10); 3 nolu thread'e ise en düşük önceliği verin. Programın çıktısında en son tamamlanan thread hangisidir? Thread lerin mutlaka öncelik sırasına göre tamamlanmadığına dikkat edin. Synchronized Lock Aşağıdaki programda iki adet thread t1 ve t2 thread leri yaratılıp başlatılmıştır. start() ile thread in run() method u devreye girer. Đki thread in paylaştığı bir kaynak vardır: System.out. Thread ler run methodlarında bu kaynağıı kullanarak output a thread adıyla beraber 1-4 arası sayıları sırayla yazdırmaktadır. Ancak 2 thread aynı kaynağı kullandığından (System.out) çıktı sırayla gelmemekte, iki thread ın çıktısı birbirine girmektedir. Aşağıda bu class ın bir çıktısı var. Thread-1 started Thread Thread-2 started Thread Thread Thread Thread Thread Thread Thread Thread-1 terminated Thread-2 terminated

34 34 makeload() methodu CPU ya yapay bir yük yaratmak için kullanılmıştır. Yoksa CPU bir thread i (run methodunu) bir time-slice süresi içinde bitirebilir. Bu da Thread lerin (tesadüfen) çıktılarının sırayla yazılmasına sebep olur. package sib.thread; public class Thread1 extends Thread public static void main(string[] args) Thread1 t1 = new Thread1(); Thread1 t2 = new Thread1(); t1.start(); t2.start(); // make artificial load for CPU void makeload() String g = null; for (int j = 0; j < 5000; j++) g = g + "merhaba"; // thread's main execution public void run() System.out.println(this.getName() + " started"); for (int i = 0; i < 4; i++) System.out.println(this.getName() + "----- " + i); makeload(); System.out.println(this.getName() + " terminated"); Thread lerin run method larının aynı kaynağa erişimini sırayla yapmak için synchronized keywordü kullanılır. Yukarıdaki kodda run methodunu aşağıdaki gibi değiştirin. public void run() synchronized (System.out) System.out.println(this.getName() + " started"); for (int i = 0; i < 4; i++) System.out.println(this.getName() + "----- " + i); makeload(); System.out.println(this.getName() + " terminated"); Class ın çıktısı aşağıdaki gibi olacaktır. Thread-1 started Thread Thread Thread

35 35 Thread Thread-1 terminated Thread-2 started Thread Thread Thread Thread Thread-2 terminated synchronized method Aşağıdaki programda t1 ve t2 thread lerinin çıktıları sıraya dizilmiştir ve aşağıdadır: Thread Thread Thread Thread Thread Thread Thread Thread Bu class da static Print pr=new Print() statik tanımı yerine Print pr=new Print() şeklinde tanımlandığında sıralama karışık gelmekte ve synchronized tanımıı çalışmamaktadır. Neden? class Print synchronized void count(string threadname) for (int i = 0; i < 4; i++) System.out.println(threadName + "----- " + i); makeload(); void makeload() String g = null; for (int j = 0; j < 5000; j++) g = g + "merhaba"; public class Thread2 extends Thread static Print pr=new Print(); public static void main(string[] args) Thread2 t1 = new Thread2(); Thread2 t2 = new Thread2(); t1.start(); t2.start(); // thread's main execution public void run() pr.count(this.getname()); synchronized code block

36 36 Yukarıdaki kod aşağıdaki biçimde de çalıştırıldığında thread lerin çıktıları sıraya dizilir: Integer lock = new Integer(2); void count(string threadname) synchronized (lock) for (int i = 0; i < 4; i++) System.out.println(threadName + "----- " + i); makeload(); lock nesnesi iki thread tarafından ortak olarak erişilebilir. Aşağıdaki kod içinde lock nesnesi local bir nesne olarak tanımlandığından çıktı karışık gelir. Neden? void count(string threadname) Integer lock = new Integer(2); synchronized (lock) for (int i = 0; i < 4; i++) System.out.println(threadName + "----- " + i); makeload(); Deamon Thread Java da 2 çeşit thread vardır: user thread ve deamon thread. main() methodu user thread lerin bitmesini beklerken, deamon thread leri keser. Örneğin bir GUI uygulamasında print işlemi bir deamon thread ise, print işlemi başlatıp hemen (print bitmeden) programdan çıkmaya karar veriseniz, deamon thread olarak set edebilirsiniz. Đki thread arasındaki farkı görmek için aşağıdaki run() methodunu kullanınız: run() for (int i=0; i<500; i++) System.out.println( Thread... ); Bir user thread i deamon thread yapmak için aşağıdaki formatı kullanın: t1.setdeamon(true); Java Thread ile ilgili Diğer Notlar wait() ve notify() synchronized ile beraber kullanılır. Bir kaynağa erişen thread bir şarta göre kaynağı serbest bırakabilir.

37 37 wait() komutu thread e elinde tuttuğun lock'ları release et ve sleep moduna geç bilgisi verir. Böylece diğer lock bekleyenlerden biri lock ı ele geçirme fırsatı yakalar. interrupt : wait yapan thread i tekrar running moda çevirir. sleep ile yield farkı. sleep metodunu çalıştıran thread kendini blocked queue ya koyar. Yield metodu ise CPU nun time slice süresini bitirmesini beklemeden kes ve kendini running queue ya koy, demektir. Ancak yield yapan process blocklanmış sayılmaz. consumer - producer örneği : consumer depoya erişiirken: 1. depoyu lock et, 2. depoya bak. 3. depo boş ise wait i çağır 1. lockı release et 2. sleep et produces 1. depoyu lock et 2. depoya koy 3. locku kaldır ve 4. notify ile uyuyan processi uyandır Yanıtlar sleep () Method'u run() methodu: public void run() try if (index == 2) Thread.sleep(4000); catch (Exception e) // dummy job String a = null; for (int i = 0; i < 500; i++) a = a + "Hello"; System.out.println("Thread " + index + " is finished"); Thread Prority t1.setpriority(10); t2.setpriority(10); t3.setpriority(1); t4.setpriority(10); t5.setpriority(10); t1.start(); t2.start(); t3.start(); t4.start(); t5.start();

38 38 Synchronized Method Print pr=new Print() şeklindeki tanım her iki thread in de iki ayrı Print nesnesi yaratmasına sebep olur. Bu da synchronized void count(string threadname) satırnın iki ayrı nesne üstünde çalışmasına yol açar. Bir synchronized methodun açılımı aşağıdaki gibidir: synchronized void m()... void m() synchronized(this)... synchronized(lock) keywordünü çalıştıran iki ayrı threadin senkronize olması için her iki thread in the aynı lock nesnesini görmesi gerekir. Oysa yukarıdaki şekilde iki ayrı Print nesnesi iki ayrı this nesnesi oluşturmaktadır. Synchronized Code Block count() methodu içindeki local Integer nesnesi lock olarak kullanılamaz çünkü count methodunun her çağrılışında new ile ayrı nesneler yaratılır. Lock olarak kullanılacak nesne thread ler için global olmalıdır. Đki ayrı nesne olamaz.

39 39 Lab 8: Exception Handling Exception Elma class ı içinde bir takım kabul edilemez koşulları kullanıcıya uygun mesajlar vererek düzenlemek istiyoruz. Örneğin setrenk() methodu null ( ) string ile çağrıldığında bunun bir hata olduğunu belirtmek istiyoruz. Ayrıca setrenk() method u komut satırından (args[0] ile) renk bilgisi alıyor olabilir. Kullanıcının olası geçersiz renk değerlerini bir şekilde çözümlemeliyiz. Object Throwable Bunun bir yolu setrenk() methodunu aşağıdaki gibi yazmaktır: int setrenk(string r) if (r.equals("")) return -1; else Renk = r; Error Exception return 1; Program içinde bu methodu çağırırken return değerine dikkat etmelisiniz. if (e.setrenk(args[0]) == -1) System.out.println( bir renk girmelisiniz ); Ancak Exception Handling mekanizması daha doğal bir çözüm sunar. 1. Elma.java içinde setrenk() method unun gövdesini ( gövdesi arasına yazılan her şey) aşağıdaki gibi değiştirin: if (r.equals("")) Exception e = new Exception(); throw e; else Renk = r; Programınızı compile ettiğinizde hata mesajı ile karşılaşırsınız. Gövdesinde Exception gönderen (throw komutu ile) bir method un başlık kısmında bunun belirtilmesi gerekir. Başlık kısmını aşağıdaki gibi yazın: void setrenk(string r) throws Exception Notlar: a. Exception ın bir class olduğuna dikkat edin. Bir hata durumu ile karşılaşıldığında önce Exception class ından bir nesne (object ya da instance) yaratılıyor, sonra bu nesne throw keyword ü ile fırlatılıyor. b. Bir method gövdesinde birden fazla tipte Exception nesnesi fırlatıyorsa bütün nesneleri başlık kısmında listelemeli. Aşağıda gibi: void setrenk(string r) throws Exception, IOException c. Yukarıdaki if den sonraki iki satırın tek satırda yazılabileceğine dikkat edin: throw new Exception(); 2. Start.java içinde main() methodunda aşağıdaki kodu oluşturun:

40 40 Elma e1 = new Elma(); e1.setrenk("sarı"); Compiler şu hata mesajını verecektir: Unhandled exception type Exception. Bunun sebebi main() methodu içinde hata fırlatma potansiyelinde olan bir method çağrılmıştır (setrenk() ) ve bu methodun üretebileceği Exception nesnesinin yakalanıp gerekli işlemin yapılması (Exception handling) gerekmektedir. main() methodu bunu iki ayrı (alternatif) yöntemle gerçekleştirebilir: a. Exception handling yapmayıp kendi gövdesinde meydana gelebilecek Exception nesnelerini kendisini çağıran bir üst methoda transfer etmek. b. Try-catch ile Exception handling yapmak. 3. Şimdi main methodunun setrenk() in üretebileceği hataları kendisini (main() i ) çağıran bir üst methoda transfer etmesi için aşağıdaki değişikliği yapın: public static void main(string[] args) throws Exception 4. Ya da setrenk() methodunu try-catch içine alarak Exception nesnesini yakalayabiliriz: public static void main(string[] args) Elma e1 = new Elma(); try e1.setrenk(""); System.out.println(e1.getRenk()); catch (Exception e) System.out.println("hata"); e.printstacktrace(); Exception Class 5. Acaba Exception nesnesi yerine daha kullanışlı olabilecek kendi Exception sınıfımızı tanımlayabilir miyiz? Aşağıda ElmaException class tanımı verilmiştir. Aynı şekilde Java programlarında gördüğümüz IOException, ArrayIndexOutofBound gibi Exception class ları da Exception class ından türetilmiştir. Package içinde yeni bir ElmaException.java class ı yaratın: class ElmaException extends Exception String msg; ElmaException(String s) msg = s; 6. Artık setrenk() methodu Exception yerine ElmaException nesnesini fırlatabilir. Aşağıda setrenk() içinde iki ayrı tipte Exception nesnesi fırlatılmıştır. Elma nesnesinin rengi (null) olduğunda ElmaException, renk mavi olduğunda (mavi Elma olmayacağı için) Exception nesnesi fırlatılmıştır. Aslında her ikisi için de ElmaException nesneleri yaratılıp fırlatılabilirdi ancak sadece örnek amacıyla iki ayrı Exception tipi verilmiştir. void setrenk(string r) throws ElmaException, Exception if (r.equals("")) throw new ElmaException("renk boş olamaz"); else if (r.equals("mavi")) throw new Exception("renk mavi olamaz");

41 41 Renk = r; 7. main() içinde her iki Exception nesnesinin de catch() ile yakalanması gerekmektedir. Ancak aşağıdaki noktalara dikkat edin. Aşağıda verilen kod parçalarının her birini yazarak test edin. a. Doğru (compile açısından) kod. Exception nesnesi ElmaException ın superclass ı olduğudan hem Exception hem de ElmaException nesnelerini catch(exception e) ile yakalayabilir. Elma e1 = new Elma(); try e1.setrenk(""); System.out.println(e1.getRenk()); catch (Exception e) e.printstacktrace(); b. Hatalı kod. catch(elmaexception e) sadece ElmaException nesnesini yakalar. Diğer Exception nesnesini ya throws Exception ile çağıran method a transfer etmeli ya da catch() ile yakalamalısınız. Elma e1 = new Elma(); try e1.setrenk(""); System.out.println(e1.getRenk()); catch (ElmaException e) e.printstacktrace(); c. Doğru kod. Elma e1 = new Elma(); try e1.setrenk(""); System.out.println(e1.getRenk()); catch (ElmaException e) e.printstacktrace(); catch (Exception e) e.printstacktrace(); d. Hatalı kod. Daha genel olan Exception classı daha alt satıra yazılmalı. Yoksa catch(exception e) satırı bütün Exception ları toplar ve catch(elmaexception e) bloğuna hiçbir zaman erişilemez. Compiler ın verdiği hata: Unreachable catch block. Elma e1 = new Elma(); try e1.setrenk(""); System.out.println(e1.getRenk()); catch (Exception e) e.printstacktrace(); catch (ElmaException e) e.printstacktrace(); 8. Son olarak ElmaException nesnesini aşağıdaki gibi kullanabileceğinize dikkat edin: catch (ElmaException e) System.out.println(e.msg); e.printstacktrace();

42 42 finally finally içindeki kod, try-catch içindeki koda bakmaksızın her durumda çalışır. try-catch içinde aşağıdaki tipte kod çalışsa bile finally mutlaka devreye girecektir. throw return break continue Örneğin aşağıdaki metod 3 değil 4 değerini dönecektir. public int method3() try return 3; finally return 4; try-finally try-finally, catch olmadan da kullanılabilir. Bir kod grubundan doğabilecek olası bir Exception nesnesini catch ile yakalamayıp bir üst fonksiyona geçirmek isteyebilirsiniz. Ancak hala, kod hatalı bir işlemle kırıldığında (yani Exception nesnesi yaratıldığında ) bir üst fonksiyona geçmeden önce mutlaka çalışmasını istediğiniz kod olabilir (açık dosyaları kapatmak gibi). Aşağıdaki örnekte main() metodunda throws Exception ifadesinin hala yazılması gerektiğine dikkat edin. public static void main(string[] a) throws Exception try Elma e = new Elma(); e.setrenk(""); finally //... Uncheck Exception Bazı Exception nesneleri try-catch bloğu gerektirmez. Örneğin aşağıdaki satır potansiyel olarak ArrayIndexOutOfBoundsException nesnesi fırlatabilir ancak try-catch bloğu ya da throws Exception gerekmez. int a[]=new int[2]; a[4]=0; NullPointerException ve NumberFormatException da bu tip Exception nesneleridir.

43 43 Hangi tip Exception nesneleri try-catch gerektirmez? Yukarıdaki şekilden de anlaşıldığı gibi RuntimeException sınıfından türetilen Exception nesneleri Unchecked Exceptions adını alır. Unchecked Exception nesneleri try-catch gerektirmez. Elma.java package sib.except; class Elma Yanıtlar String Renk; void setrenk(string r) throws ElmaException, Exception if (r.equals("")) throw new ElmaException("renk boş olamaz"); else if (r.equals("mavi")) throw new Exception("renk mavi olamaz"); Renk = r; String getrenk() return Renk; Elma() Elma(String r) Renk = r; ElmaException.java package sib.except; class ElmaException extends Exception String msg; ElmaException(String s) msg = s; Start.java package sib.except; public class Start

44 44 public static void main(string[] args) Elma e1 = new Elma(); try e1.setrenk(""); System.out.println(e1.getRenk()); catch (ElmaException e) System.out.println(e.msg); e.printstacktrace(); catch (Exception e) e.printstacktrace();

45 45 Lab 9: I/O Stream FileCopy Function DOS copy komutunu java ile yazalım. 1. main() methodu olan bir Start.java class'ı yaratın. 2. Input ve Output dosyaları FileInputStream ve FileOutputStream olarak açalım. Dosya isimleri komut satırından girilsin. FileInputStream fin = new FileInputStream(args[0]); FileOutputStream fout = new FileOutputStream(args[1]); 3. Şimdi input dosyadan okuyup outputa yazalım. Bunun için read() write() methodlarını kullanabiliriz. File sonuna gelindiğinde read() 1 dönecektir. int c; c = fin.read(); while (c!= -1) fout.write(c); c = fin.read(); 4. Kopyalama bittiğinde stream'ler kapatılmalı. fin.close(); fout.close(); System.out.println("done"); 5. Yukarıdaki işlemlerin try-catch içinde yazılması gerekiyor. catch ile FileNotFoundException ve IOException nesnelerini yakalayın. 6. Komut satırına bir input ve output dosya adı yazarak programı test edin. Not: Komut satırından adı verilen dosyalar package folder altında değil, projenin olduğu folder altında aranmalıdır. BufferedFileCopy Function 1. FileInputStream ve FileOutputStream buffer kullanmaz. O nedenle fazla verimli çalışmazlar. Bu stream'lere BufferedInputStream ve BufferedOutputStream bağlayarak (chaining) kopya sırasında bellek buffer alanı kullanılmasını sağlayalım: BufferedInputStream bin = new BufferedInputStream(fin); BufferedOutputStream bout = new BufferedOutputStream(fout); 2. Şimdi yukarıdaki programın ana döngüsü üzerinde aşağıdaki değişikliği yapalım. Okuma ve yazma methodları artık bin ve bout üzerinde çalışıyorlar. int c; c = bin.read(); while (c!= -1) bout.write(c); c = bin.read();

46 46 bout.flush(); 3. Kopyalama bittiğinde stream'ler kapatılmalı. Yukarıda olduğu gibi sadece fin ve fout kapatılabilir. Çünkü bu ikisi kapandığında kendilerine bağlı bout ve bin gibi nesneler de kapatılır. Character Encoding Türkçe karakterleri bir output stream'e nasıl yazdırırız? 1. main() methodu olan Yeni bir Start.java yaratın. 2. Bir FileOutputStream yaratın. FileOutputStream out = new FileOutputStream(args[0]); 3. out nesnesine bağlanan OutputStreamWriter nesnesi yaratın. Ancak OutputStreamWriter yaratılırken character encoding de TR karakter kodu olarak belirtin. Türkçe kod 8859_9'dur. OutputStreamWriter wout = new OutputStreamWriter(out, "8859_9"); 4. Şimdi PrintWriter nesnesini wout nesnesine bağlayın. Ve Türkçe karakterleri "ğüşiöç" yazdırın. PrintWriter pw2 = new PrintWriter(wout); pw2.println("ğüşiöç"); pw2.close(); 5. FileNotFoundException ve IOException nesnelerini catch ile yakalayın. Line Reader Aşağıdaki class ise bir dosyadan satır satır okuyup, bir satır içindeki merhaba sözcüklerini hello ya çeviriyor. Eğer output ekrana gönderilecekse (System.out) PrintWriter nesnesini aşağıdaki gibi değiştirin: PrintWriter pw = new PrintWriter(System.out, true); Örnek: package sib.io; import java.io.*; public class LineRead public static void main(string[] args) try FileReader fr = new FileReader("e:\\ps\\info.txt"); BufferedReader br = new BufferedReader(fr); FileWriter fw = new FileWriter("e:\\ps\\info2.txt"); PrintWriter pw = new PrintWriter(fw, true); //PrintWriter pw = new PrintWriter(System.out, true); final String msg = "merhaba"; String s = br.readline(); while (s!= null) if (s.equals(msg)) pw.println("hello");

47 47 else pw.println(s); s = br.readline(); pw.flush(); fr.close(); fw.close(); System.out.println("done "); catch (Exception e) e.printstacktrace(); Random Access Şu ana kadar gördüğümüz bütün IO işlemleri sequential access yapar. Aşağıdaki kod random access için. Bu kod açtığı dosyanın en sonuna gidip bir satır ekliyor. package sib.io; import java.io.*; public class RandomAccess public static void main(string[] args) try File log = new File("e://ps//info.txt"); if (log.exists()) RandomAccessFile raf = new RandomAccessFile(log, "rw"); raf.seek(raf.length()); raf.writebytes("--last line--"); raf.close(); catch (IOException e) e.printstacktrace(); New IO Aşağıdaki programda java nio ile kopya yapan program verilmiştir. infile ve outfile değerlere kopyalamak istediğiniz dosya adını yazın. import java.io.*; import java.nio.*; import java.nio.channels.*; public class Copy static public void main( String args[] ) throws Exception

48 48 String infile = "c:\\temp\\j2sdk.exe"; String outfile = "c:\\temp\\j.exe" ; FileInputStream fin = new FileInputStream( infile ); FileOutputStream fout = new FileOutputStream( outfile ); FileChannel fcin = fin.getchannel(); FileChannel fcout = fout.getchannel(); ByteBuffer buffer = ByteBuffer.allocate( 1024); while (true) buffer.clear(); int r = fcin.read( buffer ); if (r==-1) break; buffer.flip(); fcout.write( buffer ); System.out.println("bitti"); Yanıtlar BufferedFileCopy package sib.io; import java.io.*; public class BufferedFileCopy public static void main(string[] args) try FileInputStream fin = new FileInputStream(args[0]); FileOutputStream fout = new FileOutputStream(args[1]); BufferedInputStream bin = new BufferedInputStream(fin); BufferedOutputStream bout = new BufferedOutputStream(fout); int c; c = bin.read(); while (c!= -1) bout.write(c); c = bin.read(); bout.flush(); fin.close(); fout.close();

49 49 System.out.println("done"); catch (FileNotFoundException e) e.printstacktrace(); catch (IOException ie) ie.printstacktrace(); CharacterEncoding package sib.io; import java.io.*; public class CharTREncoding public static void main(string[] args) try FileOutputStream out = new FileOutputStream(args[0]); OutputStreamWriter wout = new OutputStreamWriter(out, "8859_9"); PrintWriter pw2 = new PrintWriter(wout); pw2.println("ğüşiöç"); pw2.close(); System.out.println("done"); catch (FileNotFoundException e) e.printstacktrace(); catch (IOException e) e.printstacktrace();

50 50 Lab 10: Object Serialization JVM herhangi bir anda bellekteki bir nesneyi disk file'a yazabilir. Bu işlem özellikle büyük nesneler için persistency (kalıcılık) sağlar. Yani sistemin durması sonucunda değişken diskten okunabilir. Bu yöntemin bir diğer sonucu da nesnelerin bir bilgisayardan diğerine aktarılabilmesidir. String [] Class Örnek olarak bir String [] nesnesini diske yazıp tekrar okumaya çalışalım. Kullanılacak olan class'lar ObjectInputStream ve ObjectOutputStream. Aşağıdaki örnek kod önce String strarr[] = "Kemal", "Atatürk" satırıyla bir String nesnesi oluşturur. Ardından bu nesne obj-store.dat adlı dosyaya yazılır ve readdata() metodu diskten nesneyi okur. Ancak nesne diske yazılırken Object class'ına dönüşmüştür. Bu nedenle readdata() Object nesnesini String[] tipine casting ile dönüştürmek zorundadır. import java.io.*; public class Start void writedata(object obj) try // setup storage FileOutputStream outfile = new FileOutputStream("obj-store.dat"); ObjectOutputStream outstream = new ObjectOutputStream(outFile); // Write data outstream.writeobject(obj); //close outstream.flush(); outstream.close(); catch (IOException e) e.printstacktrace(); Object readdata() Object o = null; try // open stream FileInputStream infile = new FileInputStream("obj-store.dat"); ObjectInputStream instream = new ObjectInputStream(inFile); // read object o = instream.readobject(); catch (Exception e) e.printstacktrace(); return o; public static void main(string[] args) Start s = new Start(); String strarr[] = "Kemal", "Atatürk" ; s.writedata((object) strarr);

51 51 String instrarr[] = (String[]) s.readdata(); System.out.println(inStrArr[0]); System.out.println(inStrArr[1]); Serializable Elma Class'ı 1. Şimdi Elma class'ından bir nesneyi diske yazalım. Yukarıdaki programın main() metoduna aşağıdaki eklemeleri yapın: // Write Elma object Elma e1 = new Elma("kırmızı"); s.writedata((object) e1); Elma e2 = (Elma) s.readdata(); System.out.println(e2.getRenk()); 2. Hangi hata mesajını aldınız? JVM Elma nesnesinin Serializable olduğunu bilmediğinden NotSerializableException hatasını verecektir. 3. Elma class'ını Serializable yapmak için class tanımını aşağıdaki gibi değiştirirn. public class Elma implements java.io.serializable Yukarıdaki programı tekrar çalıştırın. Bu kez Elma nesnesi diske yazılıp okunabilecektir. transient Bir nesnenin bir kısmının diske yazılması engellenebilir mi? Güvenlik sebebiyle gizli bir alanın diske yazılmasını istemeyebilirsiniz. transient keywordü ile nitelenen alanlar diske yazılmaz. Ayrıca statik olarak nitelendirilen alanlar da diske yazılmaz. 5. Elma class'ında Renk alanının tanımını aşağıdaki gibi değiştirin. transient String Renk; 6. Yukarıdaki programı tekrar çalıştırın. Renk olarak ne okuyorsunuz? Renk değişkeni diske yazılamadığından diskten okuma sırasında null değer alacaktır. Başka Bir Örnek 2 ayrı java dosyası. Write.java public static void main(string[] args) try Elma e = new Elma("Kırmızı"); //String e = new String("bugün pazar"); FileOutputStream fout = new FileOutputStream("c:\\elma.ser"); ObjectOutputStream out = new ObjectOutputStream(fout); out.writeobject(e); catch (Exception exp)

52 52 exp.printstacktrace(); Read.java public class MSerRead public static void main(string[] args) try Elma e; //String e; FileInputStream fin = new FileInputStream("c:\\elma.ser"); ObjectInputStream in = new ObjectInputStream(fin); e = (Elma) in.readobject(); System.out.println(e); catch (Exception exp) exp.printstacktrace(); Serialver package sib.serial; import java.io.serializable; public class Test implements Serializable static final long serialversionuid = 5; int t=0; int r=9; public static void main(string[] args) Projenin içinden çalıştırın. C:\workspace\eclipse32\ja351\MySecond>serialver com.hsbc.lab1.elma com.hsbc.lab1.elma: static final long serialversionuid = L ;

53 53 Lab 11: RTTI & Reflection instanceof instanceof RTTI nin basit bir formatıdır. Aşağıdaki kodu çalıştırın. Ne çıktı veriyor? Düzeltmek için ne yapmalısınız? String s = null; if (s instanceof String) System.out.println("done"); else System.out.println("no done"); Class class Bir nesnenin class adını bulabilir miyiz? Örneğin Vector nesnesinde depolanmış bulunan nesneler acaba hangi class dan yaratılmış sorusunu nasıl çözebiliriz? Vector v = new Vector(); v.add(new String("merhaba")); v.add(new Integer(5)); for (int i = 0; i < v.size(); i++) Object o = v.elementat(i); Class c = o.getclass(); System.out.println(c.getName()); Dinamik Instance Yaratmak ve Classloading Bir class, komut satırından girilen başka bir class isminden dinamik olarak nesneler yaratabilir mi? 1. Önce Elma.java dosyasını çalıştığınız package içine alın. Ve aşağıdaki eklentileri yapın. Bu eklentiler daha öncede gördüğümüz gibi herhangi bir anda kaç Elma nesnesini görebilmek için yapılmaktadır. static int no=0; static int getno() return no; Elma() no++; 2. Programın ana döngüsünden önce aşağıdaki kodu ekleyin. Class adının tam olarak (package name ile birlikte) girildiğine dikkat edin. Class adı program komut satırından da girilebilirdi. Size değişkeni komut satırından giriliyor ve kaç Elma nesnesi yaratılacağını belirtiyor. Class c = Class.forName("sib.rtti.Elma"); int size = Integer.parseInt(args[0]); Object o[] = new Object[size]; 3. Programın ana döngüsü içinde nesneler yaratılıyor. Elma.getNo() statik metodu taç Elma nesnesinin yaratıldığını söyleyecektir. for (int i=0; i<size; i++)

54 54 o[i] = c.newinstance(); System.out.println(Elma.getNo()); Metodlara Erişim Bir class ın bütün metodlarını listeleyebilir misiniz? Örneğin bir class adını biliyorsunuz fakat metod isimleri aklınızda değil. (.class dosyası JVM nin erişip yükleyebileceği bir class). Aşağıdaki kod Elma class ının bütün public metodlarını (superclass larından da gelen) listeliyor. Eğer sizin metodlar listede yoksa Elma.java içinde o metodu public yapın. try Class c = Class.forName("sib.rtti.Elma"); Method m[] = c.getmethods(); for (int i = 0; i < m.length; i++) System.out.println(m[i].getName()); catch (ClassNotFoundException e) e.printstacktrace(); ; Yanıtlar instanceof String s = new String(); Listing /* * Yusuf Kenan YILMAZ, Sibnet, Aug 13, 2003 */ package sib.rtti; import java.lang.reflect.method; import java.util.vector; public class RTTI public static void main(string[] args) //instanceof String s = ""; if (s instanceof String) System.out.println("done"); else System.out.println("no done"); //class class Vector v = new Vector(); v.add(new String("merhaba")); v.add(new Integer(5)); for (int i = 0; i < v.size(); i++) Object o = v.elementat(i); Class c = o.getclass(); System.out.println(c.getName());

55 55 //dynamic class instance creation try Class c = Class.forName("sib.rtti.Elma"); int size = Integer.parseInt(args[0]); Object o[] = new Object[size]; for (int i = 0; i < size; i++) o[i] = c.newinstance(); System.out.println(Elma.getNo()); catch (Exception e) e.printstacktrace(); //method access try Class c = Class.forName("sib.rtti.Elma"); Method m[] = c.getmethods(); for (int i = 0; i < m.length; i++) System.out.println(m[i].getName()); catch (ClassNotFoundException e) e.printstacktrace(); ;

56 56 Lab 12: Applet API Applet Đskeleti import java.applet.*; public class MyApplet extends Applet public void init() //add initialization code here public void start() //add starting code here public void stop() //add stopping code here public void destroy() //add termination code here public void paint() //add drawing code here Not: Sadece gerekli metodları yazın. Örnek: package com.sib.app; import java.awt.*; import java.applet.*; public class MyApp2 extends Applet public void init() setbackground(color.blue); //end init public void paint(graphics g) g.setcolor(color.red); g.fillrect(0, 0, 100, 100); for (int i = 0; i < 256; i++) g.setcolor(new Color(100, i, i)); g.setfont(new Font("sansserif", Font.BOLD, 16)); g.drawstring("merhaba DTM IT ",10*i,15*i); //end paint //end class

57 57 HTML <BODY> <APPLET width="300" height="300" code="com/sib/app/myapp2.class" codebase="app/" ></APPLET> </BODY> Parametre HTML den Applet içine parametre geçirebiliriz. Bunun için HTML aşağıdaki gibi olmalıdır: <APPLET width="300" height="300" code="com/sib/app/myapp2.class" codebase="app/" > <PARAM name="msg1" value="merhaba DTM"> <PARAM name="id" value="2100"> </APPLET> Applet içinde public void start() içine aşağıdaki kodu ekleyin. s1=getparameter("msg1"); s2=getparameter("id"); s2 değişkenini class düzeyinde tanımlayın. Şimdi paint içinden s1 değerini yazdırın. Java Console Applet içindeki System.out.println mesajları nereye gider? System.out.println("Hello, world!") LiveConnect JavaScript Java nesnelerine (metod ve field lara) erişebilir mi? LiveConnect ile erişebilir. package com.sib.app; import java.applet.applet; import java.awt.graphics; public class Hello extends Applet String mystring; public void init() mystring = new String("Hello, world!"); public void paint(graphics g) g.drawstring(mystring, 25, 20); public void setstring(string astring) mystring = astring; repaint(); HTML

58 58 <BODY> <APPLET CODE="com/sib/app/Hello.class" codebase="app/" NAME="Hello" WIDTH=150 HEIGHT=25> </APPLET> <FORM NAME="form1"> <INPUT TYPE="button" VALUE="Set String" onclick="document.hello.setstring(document.form1.str.value)"> <BR> <INPUT TYPE="text" SIZE="20" NAME="str"> </FORM> </BODY> Not: document.hello document içindeki Hello adlı applet demektir. Aynı Applete document.applets[0] ile de erişilebilir.

59 59 Lab 13: RMI RMI Elma Implementation Bu alıştırmada remote server üzerindeki Elma nesnesine client üzerinden erişeceksiniz. Client: IElma e1 = (IElma) ctxt.lookup("elmax"); e1.setrenk("mavi"); Client Server Server: Elma e = new Elma(); ctxt.bind("elmax", e); e1 e1 IElma IElma Elma ElmaCli ElmaSrv Elma_Stub Elma_Skel Client ve Server daki Class lar ve Interface 1. IElma interface IElma adlı interface i yazın. Bu interface client tarafında Remote Elma Object in referansını almak için kullanılacaktır. package sib.rmi.elma; import java.rmi.*; public interface IElma extends Remote public void setrenk(string value) throws RemoteException; public String getrenk() throws RemoteException;

60 60 Bu interface hem server hem de client sistemde bulunmalıdır. 2. Elma class Ardından Elma class ını oluşturun. Elma class ı server da bulunacak ve IElma interface ini implement edecektir. package sib.rmi.elma; import java.rmi.server.*; public class Elma extends UnicastRemoteObject implements IElma //RemoteException exception public Elma() throws java.rmi.remoteexception super(); private String Renk; public void setrenk(string r) Renk=r; public String getrenk() return Renk; Notlar: Elma class ı java.rmi.server.unicastremoteobject class ını extend ederek RMI server a bağlanır. Ancak Elma classı eğer başka bir class dan extend edecekse, UnicastRemoteObject i metod olarak çağırabilir. Elma class ının default constructor ını override etmek gerek. Bunun sebebi default constructor içindeki super() RemoteException fırlatır. Onu default constructor içinde handle etmek gerek. 3. ElmaSrv class ElmaSrv class ını oluşturun. Bu class server da çalışan ve Elma nesnesini RMI ile client a servis veren class dır. package sib.rmi.elma; import java.util.hashtable; import javax.naming.*; public class ElmaSrv public static void main(string[] args) try Elma e1 = new Elma(); Hashtable parms = new Hashtable(); parms.put( Context.INITIAL_CONTEXT_FACTORY,

61 61 "com.sun.jndi.rmi.registry.registrycontextfactory"); parms.put(context.provider_url, "rmi://localhost"); Context ctxt = new InitialContext(parms); ctxt.bind("elmax", e1); catch (Exception e) System.out.println("Trouble: " + e); Notlar: ElmaSrv class ı kendi içinde bir Elma nesnesi yaratıyor. Ardından Elma nesnesini Name Server a register ediyor. Kullanılan name server url: rmi://localhost. Bu nameserver ı servis olarak implement eden rmiregistry.exe programıdır. Name server a register ederken bir isim vermek, örnekteki ELMAX gibi, durumdadır. Client elma nesnesini bu isim ile bulacaktır. 4. ElmaCli class ElmaCli class ını oluşturun. Bu class client da çalışacaktır. Bu class Remote elma nesnesini bulup kullanack olan class dır. package sib.rmi.elma; import java.util.hashtable; import javax.naming.*; public class ElmaCli public static void main(string[] args) try System.out.println("Connecting to Elma server..."); Hashtable parms = new Hashtable(); parms.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.registrycontextfactory"); parms.put(context.provider_url, "rmi://localhost"); Context ctxt = new InitialContext(parms); IElma e1 = (IElma) ctxt.lookup("elmax"); e1.setrenk("mavi"); System.out.println("Renk: " + e1.getrenk()); catch (Exception e) e.printstacktrace(); Notlar: ElmaCli class ı name server da ELMAX adıyla Elma nesnesini arıyor.

62 62 ctxt.lookup( ELMAX ) remote nesnenin referansını (adresini) döner. e1.setrenk() metodu server üzerindeki Elma nesnesinin rengini değiştirir. 5. RMIC (RMI Compiler) Client server arasında taşınacak olan Elma nesnesidir. Diğer bir deyimle client remote server üzerindeki Elma nesnesine erişecektir. Client sanki Elma nesnesi local address space içinde tanımlıymış gibi nesnenin rengini set edebilir: e1.setrenk( kırmızı ); Remote bir nesneye sanki local bir nesne gibi erişebilmek için bir çeşit proxy metodu kullanılmaktadır. Bu proxy Elma nesnesi ayrıca class olarak implement edilir. Bu proxy nesneler hem client hem de server tarafında bulunmalıdır. Bu proxy class ları yaratmak için RMIC.EXE (RMI compiler) kullanıılabilir. RMIC.EXE Java JDK içinde (bin dizininde) bulunur. Bu programı DOS komut satırından aşağıdaki gibi çalıştırın: >RMIC Elma Output olarak Elma_Stub ve Elma_Skel classları yaratılacaktır. Elma_Stub class ı client da bulunması gereken proxy dir. Elma_Skel ise (Skeleton^dan geliyor) server da bulunur. RMIC ı Eclipe (ya da WSAD) üzerinden ayrılmadan aşağıdaki gibi çalıştırabilirsiniz: Run --> External Tools-->External Tools menüsüne gidip aşağıdaki ayarları yapın ve run edin. Console view da hiç bir hata gelmezse RMIC gerekli class ları yapmış demektir. Bu class ları görmek için Resource Perspective i kullanabilirsiniz. Location: Working Directory: Arguments: D:\java\j2sdk141\bin\rmic.exe $workspace_loc:/sibjava sib.rmi.elma.elma

63 63 6. RMIREGISTRY Client ile Server bir name server üzerinden haberleşirler. Server objectlerini name server a bir adla kaydeder. Client bu adla name server dan remote object in referansına ulaşır. Name server bir servistir. Java JDK bin dizininde bulunan RMIREGISTRY.EXE bu servisi implement eder. Bu programı çalıştırın. Yine Eclipse platformundan ayrılmadan aşağıdaki ayarlarla External Tools menüsünden çalıştırabilirsiniz: Location: Working Directory: Arguments: D:\java\j2sdk141\bin\rmiregistry.exe $workspace_loc:/sibjava -yok- Not: Aşağıdaki kod RMI name servise (rmiregistry.exe) JNDI Interface i ile erişme yoludur. JNDI dışında RMI name servise erişme yolları da bulunmaktadır. 7. Test Hashtable parms = new Hashtable(); parms.put(context.initial_context_factory, "com.sun.jndi.rmi.registry.registrycontextfactory"); parms.put(context.provider_url, "rmi://localhost"); Context ctxt = new InitialContext(parms); IElma e1 = (IElma) ctxt.lookup("elmax"); Şimdi sistemi test edin class ı oluşturun RMIC compiler ı Elma class ı üzerinde çalıştırıp Elma_Stub ve Elma_Skel class larının oluşmasını sağlayın RMIREGISTRY.EXE yı çalıştırın ElmaSrv yi çalıştırın. Bu class içinde bir loop olmadığı halde terminate etmeyip ElmaCli client ın çalışmasını bekleyecektir ElmaCli yi çalıştırın.

64 64 Lab 14: Utility Class lar Regular Expression Bu regular expression'da parantezler şart değil, ancak grup oluşturuyor. String regex = "(\\w+)@(\\w+\\.)(\\w+)(\\.\\w+)*"; Örneğin, daha sonra aşağıdaki ifade bir nolu grubu yazdırmak için kullanılacaktır. System.out.println("Found a match: " + matcher.group(1)); Kod Listesi import java.util.regex.*; public class public static void main(string[] args) // Compile the regex. String regex = "(\\w+)@(\\w+\\.)(\\w+)(\\.\\w+)*"; Pattern pattern = Pattern.compile(regex); // Create the 'target' string we wish to interrogate. String targetstring = "You can me at g_andy@example.com or andy@example.net.tr.x to get more info"; // Get a Matcher based on the target string. Matcher matcher = pattern.matcher(targetstring); // Find all the matches. while (matcher.find()) System.out.println("Found a match: " + matcher.group()); System.out.println("Start position: " + matcher.start()); System.out.println("End position: " + matcher.end()); System.out.println("Found a match: " + matcher.group(1)); System.out.println("Found a match: " + matcher.group(2)); System.out.println("Found a match: " + matcher.group(3)); Regular Expression -2 package sib.regex; import java.util.regex.*; public class RegEx public static void main(string[] args) // s.mathes(regex) in anlamı: // s regex kuralına uyacak. // sıfır ya da daha fazla sayıda a ve bir b String s = "ab"; // diger match edenler :"b", "ab", "aab"

65 65 boolean b = s.matches("a*b"); System.out.println(b); // en az bir a ve sıfır ya da daha fazla b s = "aabbb"; // diger match edenler :"a", "ab", "aab" "aabbb" b = s.matches("a+b*"); // a veya b (bir tane) ve bir ya da daha fazla c s = "accc"; // diger match edenler :"ac", "bc", "a" "b" b = s.matches("[a b]c*"); // "Hello" ile başlayacak ve herhangi bir karakterden // birden fazla olabilir. s = "Hello World"; // b = s.matches("hello.*"); // Đçinde "Hello" geçen string s = "Merhaba Hello World"; b = s.matches(".*hello.*"); // adres kontrolü s = "yky1@sibnet.com.tr"; olmaz zorunda // ondan önce rakam ve harf içeren herhangi birşey olabilir. b = s.matches("[a-z 0-9]*@.*"); System.out.println(b); /////////////////////////// String sp[] = "ank ist adana".split(" "); System.out.println(sp[0]); // virgule göre ayır, // virgülden sonra sıfır, bir ya da daha fazla boşluk olabilir sp = "appels,oranges, pears".split(",\\s*"); System.out.println(sp[0] + "~" + sp[1]); ///////////////////////////// //,? : bir ya da hiç virgul //!? : bir ya da hiç! // \\s+ : en az bir space olmalı. // also matching: // "Hello, World!" "Hello World" "hello world" String x = "dhello, World!"; /* b = x.matches("^[hh]ello,?\\s+[ww]orld!?$"); System.out.println(b); ////////////////////// group // virgülden öncesi ve sonrası aynı ise true x = "hello, hello"; // also matches //x = "hellx, hellx"; b = x.matches("([a-z]*), \\1"); System.out.println(b); ///////////// // bir char ve 3 digitlik her şey. // \\d3 : 3 digit demek

66 66 String roaster = "X123"; // Kenan123456"; String re = "([A-Za-z]\\d3)"; //.*\\((\\d6)\\)"; Pattern p = Pattern.compile(re); Matcher m = p.matcher(roaster); while (m.find()) System.out.println(m.group(1)); //System.out.println(m.group(2)); /////////////// ///////////// // bir char ve 3 digitlik her şey. // \\d3 : 3 digit demek String roaster = "X "; String re = "([A-Za-z]\\d3).*(\\d6)"; Pattern p = Pattern.compile(re); Matcher m = p.matcher(roaster); while (m.find()) System.out.println(m.group(1)); System.out.println(m.group(2)); */ DateFormat Class Output: DateFormat informatter = DateFormat.getDateInstance(DateFormat.SHORT); DateFormat outformatter = DateFormat.getDateInstance(DateFormat.LONG); Date today = informatter.parse(" "); System.out.println(outFormatter.format(today)); System.out.println(outFormatter.format(new Date())); System.out.println(inFormatter.format(new Date())); 12 Ocak 2001 Cuma 29 Kasım 2006 Çarşamba GregorianCalendar Class Output Calendar calendar = new GregorianCalendar(); calendar.settime(new Date()); System.out.println(calendar.get(Calendar.DAY_OF_YEAR)); System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); (29 Kasım da yapılan test) Đki tarih arasındaki Fark Calendar cal_1 = new GregorianCalendar();

67 67 Calendar cal_2 = new GregorianCalendar(); cal_1.set( 1997, Calendar.MARCH, 1, 0, 0, 0 ); cal_2.set( 1998, Calendar.APRIL, 2, 0, 0, 0 ); long time = cal_2.gettime().gettime() - cal_1.gettime().gettime();// ms long days = Math.round( (double)time / (24. * 60.*60.*1000.) ); //days System.out.println( "Fark: " + days );

68 68 Lab 15: Java 2 Security Java 2 de Applet ler mutlaka java.security.manager tarafından denetlenir. Local code ise ancak aşağıdaki gibi istenirse java.security.manager tarafından güvenlik kontrolünden geçirilir. Java 2 Security Lab Çalışması Bu çalışmalarda Eclipse ya da WSAD kullanılacaktır. 1. Aşağıdaki kod file sisteme erişip dummy.txt adlı dosyayı oluşturur. Bu kodu yazıp test edin. import java.io.*; public class FileIOX public static void main(string[] args) try FileWriter out = new FileWriter("c:\\dummy.txt"); out.write("java2x"); out.flush(); out.close(); catch (Exception e) e.printstacktrace(); 2. Bu kod security manager olmadan çalışır. Şimdi security manager ı devreye sokun. Bunun için JVM yi - Djava.security.manager parametresi ile çalıştırın. Aşağıdaki hata mesajını alırsınız. java.security.accesscontrolexception: access denied (java.io.filepermission c:\dummy.txt write) 3. Security Manager aşağıdaki kod ile de devreye girer. main() metodunda ilk satıra ekleyebilirsiniz: System.setSecurityManager(new SecurityManager()); 4. Şimdi sec.policy adlı (herhangi bir ad olabilir) policy file yapın. a. Bu dosyayı yaratmak için j2sdk\bin\policytool.exe adlı programı kullanın. b. Add Policy Entry ile yeni bir policy ekleyin. Add Permission ile aşağıdaki ayarları girin. Bu şekilde bütün dosyalara Read-Write-Execute-Delete hakkı vermiş olursunuz. c. Bu file ı..\jre\lib\security altına sec.policy adıyla kopyalayın. 5. Şimdi yarattığınız policy dosyasının JVM tarafından dikkate alınmasını sağlayın. Bunun için aşağıdaki satırı..\jre\lib\security altındaki java.security dosyasına ekleyin. Numarayı (..url.3) uygun şekilde java.security dosyasındaki sıraya göre değiştirin:

69 69 policy.url.3=file:$java.home/lib/security/sec.policy Not: Policy file file sistemde herhangi bir yerde olabilir. Aşağıdaki gibi yerini belirtebilirsiniz. policy.url.3=file:/c:/test/mypolicy 6. Şimdi -Djava.security.manager ile run edin. Şimdi dummy.txt file ı yaratılabilmeli.

70 70 Lab 16: JDBC Cloudscape için: Driver=com.ibm.db2j.jdbc.DB2jDriver JAR=C:\IBM\WID602\runtimes\bi_v6\cloudscape\lib\db2j.jar Url=jdbc:db2j:C:\scape2;create=true Start.java public class Start public static void main(string[] args) EmployeeHome.select(); EmployeeHome.Java public class EmployeeHome static final String DRIVER ="com.ibm.db2j.jdbc.db2jdriver"; static final String URL = "jdbc:db2j:c:\\employee"; static try Class.forName(DRIVER); catch (Exception e) e.printstacktrace(); public static void select() try Connection conn = DriverManager.getConnection(URL); Statement query = conn.createstatement(); ResultSet rs = query.executequery("select * from app.users"); User u = new User(); while(rs.next()) u.setid(rs.getint(1)); u.setfistname(rs.getstring(2)); u.setlastname(rs.getstring(3)); System.out.println(u); rs.close(); conn.close(); System.out.println(conn); catch (Exception e) e.printstacktrace();

71 71 User.java public class User implements Serializable private int id; private String fistname; private String lastname; public User() public String getfistname() return fistname; public void setfistname(string fistname) this.fistname = fistname; public int getid() return id; public void setid(int id) this.id = id; public String getlastname() return lastname; public void setlastname(string lastname) this.lastname = lastname; public String tostring() return "id=" + id + " ad="+fistname + " soyad=" + lastname;

72 72 Ek-A : Swing API Java ile standalone grafik uygulamaları yapabilirsiniz. Bunun için kullanabileceğiniz iki API var: AWT ve Swing API. Ayrıca SWT ile Eclipse plug-in de yapabilirsiniz. JMenuBar JFrame f = new JFrame(); Container c = f.getcontentpane(); // // JMenuBar mb = new JMenuBar(); JMenu m1 = new JMenu("File"); // file JMenu m2 = new JMenu("Edit"); // edit JMenuItem it1 = new JMenuItem("Open"); JMenuItem it2 = new JMenuItem("Save"); it1.addactionlistener(this); m1.add(it1); m1.add(it2); mb.add(m1); mb.add(m2); // c.add(mb); // yanlış, aşağıdakini kullanın. f.setjmenubar(mb); Not: Bu örnekte sadece it1 için Event Listener eklenmiştir. JmenuItem için gereken listener Jbutton için kullanılan ActionListener ile aynıdır. actionperformed(actionevent e) metodu implement edilmelidir. Event Handling Event Handling için aşağıdaki işlem yapılır: Đlgili XXXListener implement edilir. Component setxxlistener metodunu kullanarak Listener instance ını register eder. Bunun için 3 yöntem vardır: 1. Listener ayrı bir class olarak implement edilir. class MyFrame extends JFrame JButton b = new JButton(); b.addactionlistener(new MyListener()); Class MyListener implement ActionListener public void actionperformed(actionevent e)... Sorun: actionperformed içinde aşağıdaki satır kullanılamaz: if (e.getsource() == b1) 2. Listener Frame classı içinde implement edilir.

73 73 class MyFrame extends JFrame implements ActionListener JButton b = new JButton(); b.addactionlistener(this);... public void actionperformed(actionevent e) Inner class. Jframe f=new Jframe(); f.addwindowlistener(new WindowAdapter() public void windowclosing(windowevent e) System.out.println("---- çıkış"); Window w = (Window) e.getsource(); w.setvisible(false); w.dispose(); System.exit(0); Örnek Not: WindowAdapter kullanılmasının sebebi implement edilecek metod sayısını azaltmak. Sadece istediklerimizi implement etmek. Aslında WindowAdaper abstruct bir class. Đçinde dummy metod implementationları var. Biz istediğimizi override ediyoruz. Aşağıda basit bir Swing uygulaması verilmiştir. Bu programın çıktısı şekilde görülen penceredir. import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Sw2 private static String labelprefix = "Number of button clicks: "; private int numclicks = 0; public Component createcomponents() final JLabel label = new JLabel(labelPrefix + "0 "); JButton button = new JButton("I'm a Swing button!"); button.setmnemonic(keyevent.vk_i); button.addactionlistener(new ActionListener() public void actionperformed(actionevent e) numclicks++; label.settext(labelprefix + numclicks); ); label.setlabelfor(button); /* * An easy way to put space between a top-level container * and its contents is to put the contents in a JPanel * that has an "empty" border. */ JPanel pane = new JPanel(); pane.setborder(borderfactory.createemptyborder( 30, //top 30, //left 10, //bottom

74 74 30) //right ); pane.setlayout(new GridLayout(0, 1)); pane.add(button); pane.add(label); return pane; public static void main(string[] args) try // UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); // UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); // UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); catch (Exception e) //Create the top-level container and add contents to it. JFrame frame = new JFrame("SwingApplication"); Sw2 app = new Sw2(); Component contents = app.createcomponents(); frame.getcontentpane().add(contents, BorderLayout.CENTER); //Finish setting up the frame, and show it. frame.addwindowlistener(new WindowAdapter() public void windowclosing(windowevent e) System.exit(0); ); frame.pack(); frame.setvisible(true);

75 75 Ek-B : Java tools (native2ascii) Properties dosyasının Türkçe karakterleri desteklemesi için Unicode karakterler kullanmalısınız. Bunun için properties dosyasına TR karaklerleri yazdıktan sonra aşağıdaki gibi dönüştürün: C:\Eclipse\j2sdk142\bin>native2ascii -encoding iso8859_9 a.txt a=\u00f6\u00e7\u011f\u00fc\u015f\u0131 a.txt dosyasinın içeriği aşağıdadır: a=öçgüsi

76 76 Ek-C : Java SDK Bu alıştırma Java araçlarını (JDK: Java Development Kit) tanımaya yöneliktir. Bu kapsamda katılımcı ilk Java programını Sun Java JDK ve Eclipse üzerinde geliştirecektir. Not: Java2 den sonra JDK yerine SDK ifadesi kullanılmaya başlamıştır. Sun JDK 1. Eğitmenin bilgisi dahilinde PC nize Sun JDK 1.4.x kurulumunu yapın. 2. Bir MS-DOS komut satırı penceresi açın. 3. MSDOS penceresinden programınızı koyabileceğiniz bir dizin yaratın ve bu dizine geçin (aşağıdaki komutları kullanabilirsiniz) md c:\java cd c:\java 4. Notepad ile Elma.java dosyası yaratın. class Elma String Renk; String getrenk() return Renk; void setrenk(string r) Renk = r; public static void main(string args[]) Elma e1; e1 = new Elma(); e1.setrenk("kırmızı"); String r = e1.getrenk(); System.out.println(r); 5. Aşağıdaki komut ile Elma.java programını compile edin (Sun Java..\bin dizini PATH de olmalı). Compile sonucunda Elma.class dosyası oluşmuş olmalı. Javac Elma.java 6. Programınızı (Elma.class) aşağıdaki komutla çalıştırın: Java Elma Sun JDK 2 ayrı class 1. Yukarıdaki programı iki ayrı java dosyasına bölün. Birinci dosya Elma.java. Đkinci dosya Start.java. Ancak bu kez Elma.java içindeki main() metodunu Start.java içine taşıyın. 2. Start.java ve Elma.java programlarında class ismi ile dosya isminin aynı olması gerekiyor. Start.java içinde gerekli değişiklikleri yapın. 3. Elma.java ve Start.java yı compile edin: Javac Elma.java Javac Start.java

77 77 4. Start.class dosyasını çalıştırın. Java Start Sun JDK 2 ayrı class Eclipse 1. C:\java altında bir lib adlı alt dizin açın ve Elma.* dosyalarını lib dizini altına taşıyın (copy yerine move işlemi yapın) 2. Start.class dosyasını çalıştırın. Java Start 3. JVM hangi hatayı veriyor? Nasıl düzeltirsiniz? Bu alıştırmadan önce eğitmeniniz size Eclipse üstünde örnek bir uygulama gösterecektir. 1. Eğitmenin verdiği bilgiler doğrultusunda sisteminize Eclipse'i kurun. 2. JavaX adlı yeni bir Java Project yaratın. 3. Yarattığınız Java projesi altında com.xnet.demo adlı Java package yaratın. 4. com.xnet.demo package altına iki adet Java Class yaratın. Bu class'ların adı Elma ve Start olsun. Class'ların içeriğini yukarıdaki alıştırmada yaptığınız Elma.java ve Start.java dosyalarından copy paste ile oluşturabilirsiniz. 5. Start.java dosyasını çalıştırın. 6. Start.java programı içinde gerekli değişikliği yaparak, Elma nesnesinin rengini komut satırından alabilecek duruma getirin. Programınıza komut satırından parametrelerini aşağıdaki pencereden vereceksiniz.

78 78 7. Eclipse debug perpective'i WSAD'daki debug perspectivine benzer. Start.class dosyasını debug edin. Start.java Yanıtlar class Start public static void main(string args[]) Elma e1; e1 = new Elma(); e1.setrenk("kırmızı"); String r = e1.getrenk(); System.out.println(r); Sun JDK 2 ayrı class Sun JDK başka dizinlerdeki class dosyalarını ancak CLASSPATH environment değişkeninde arar. JDK'nın Elma.class dosyasını bulabilmesi için CLASSPATH değişkenini aşağıdaki gibi set etmelisiniz. set CLASSPATH=.\;c:\java\lib Start.java (Komut Satırı kullanan versiyon) class Start public static void main(string args[]) Elma e1; e1 = new Elma(); e1.setrenk(args[0]); String r = e1.getrenk(); System.out.println(r);

79 79 Ek-D: JavaDoc JavaDoc Java API documentation yaratma aracıdır. Aşağıda Elma nesnesi için yaratılan HTML formatında API dokümanı görülmektedir. Eclipse içinden Javadoc u kullanabilirsiniz. 1. Eclipse içinde Window Preferences dialog penceresinde Java Javadoc seçeneğine gidin. Burada Javadoc komutunun yerini sormaktadır (Javadoc Command ). Javadoc.exe JDK 1.3 ya da 1.4 de bin dizinindedir. 2. Eclipse File Export menüsünden Javadoc Wizard ı tıklayın. Istediğiniz proje (ya da paketi) seçtikten sonra finish ile işlemi başlatın. 3. Console view dan javadoc un çalışmasını izleyin. Eğer kodlarınınzda hata yoksa Javadoc ilgili class lar için aynı proje içinde HTML dokümanları yaratacaktır. Örneğin Elma classı için üretilen API dökümanı (HTML formatında) aşağıdadır. 4. Javadoc ürettiği HTML kodu içindeki bilgileri nereden alır? Aslında bu bilgiler yazdığımız Java kodları içindeki comment satırlarıdır. Ancak sözkonusu comment satırları iki yıldız (/**) ile başlar. Bu comment satırları gibi alanlar javadoc tool unun tanıdığı alanlardır. /** Administrator * * To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ Package Class Use Tree Deprecated Index Help PREV CLASS NEXT CLASS FRAMES NO FRAMES All Classes All Classes SUMMARY: NESTED FIELD CONSTR METHOD DETAIL: FIELD CONSTR METHOD java.lang.object +--sib.interfacex.elma All Implemented Interfaces: IElma sib.interfacex Class Elma public class Elma extends java.lang.object implements IElma Author: Administrator To change the template for this generated type comment go to Window - Preferences - Java - Code Generation - Code and Comments Method Summary java.lang.string getrenk() void setrenk(java.lang.string r)

80 80 Methods inherited from class java.lang.object equals, getclass, hashcode, notify, notifyall, tostring, wait, wait, wait Method Detail public java.lang.string getrenk() Specified by: getrenk in interface IElma getrenk setrenk public void setrenk(java.lang.string r) Specified by: setrenk in interface IElma Package Class Use Tree Deprecated Index Help PREV CLASS NEXT CLASS FRAMES NO FRAMES All Classes All Classes SUMMARY: NESTED FIELD CONSTR METHOD DETAIL: FIELD CONSTR METHOD

81 81 Ek-E Eclipse Notları Eclipse 3.x Notları Template : Preferences Java Editor Template. Açılan bir süslü parantezin ( kod bloğu ) nerede kapandığını bulmak için; süslü parantezin bulunduğu satıra gidip çift tıklayın. Kod bloğunun kapandığı noktaya kadar taranacaktır.

82 82 Sibnet Java eğitimleri laboratuvar çalışması kitapçığıdır Sibnet Đletişim Bilgileri Tel : (pbx) Faks : Web :

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator Interface Comparator java.util Interface Comparator Kılgılayan sınıf: Collator Bildirimi: public interface Comparator Comparator arayüzü Java Collections Framework un bir üyesidir. Bir nesneler koleksiyonu

Detaylı

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

Yazılım Kodlama ve İ simlendirme Standartları v1.0 Yazılım Kodlama ve İ simlendirme Standartları v1.0 İçerik Yazılım Kodlama ve İsimlendirme Standartları... 2 1. Amaç... Hata! Yer işareti tanımlanmamış. 2. Kapsam... Hata! Yer işareti tanımlanmamış. 3.

Detaylı

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama İçerik Temel Kavramlar BBS-515 Nesneye Yönelik Programlama Geçen hafta: Nesneye yönelik programlama Ne demektir, nasıl ortaya çıkmıştır? Nesneye yönelik dil olarak JAVA ve ilişkili kavramlar Bu hafta:

Detaylı

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

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1 Görsel Programlama DERS 03 Görsel Programlama - Ders03/ 1 Java Dili, Veri Tipleri ve Operatörleri İlkel(primitive) Veri Tipleri İLKEL TİP boolean byte short int long float double char void BOYUTU 1 bit

Detaylı

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama Temel Kavramlar BBS-515 Nesneye Yönelik Programlama Ders #2 (2 Kasım 2009) İçerikç Geçen hafta: Nesneye yönelik programlama Ne demektir, nasıl ortaya çıkmıştır? Nesneye yönelik dil olarak JAVA ve ilişkili

Detaylı

Class LinkedHashMap. Class LinkedHashMap java.lang.object java.util.abstractmap java.util.hashmap java.util.linkedhashmap. Kılgıladığı arayüzler:

Class LinkedHashMap. Class LinkedHashMap java.lang.object java.util.abstractmap java.util.hashmap java.util.linkedhashmap. Kılgıladığı arayüzler: Class LinkedHashMap java.util Class LinkedHashMap java.lang.object java.util.abstractmap java.util.hashmap java.util.linkedhashmap Kılgıladığı arayüzler: Cloneable, Map, Serializable Bildirimi: public

Detaylı

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

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar Nesneler ve Türler Sınıflar ve Yapılar Arasındaki Farklılıklar Sınıf Üyeleri Değer ve Referans Türde Olan Aktarımlar Yapıcılar ve Statik Yapıcılar Read-Only Statik Sınıflar Object Sınıfı Sınıflar Sınıflar

Detaylı

MOBIL UYGULAMA GELIŞTIRME

MOBIL UYGULAMA GELIŞTIRME MOBIL UYGULAMA GELIŞTIRME PELIN YILDIRIM FATMA BOZYIĞIT YZM 3214 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Bu Derste Java Programlama (Crash Course) Class, Nesne, Metodlar, Overloading,

Detaylı

BMH-303 Nesneye Yönelik Programlama

BMH-303 Nesneye Yönelik Programlama BMH-303 Nesneye Yönelik Programlama Kurucu metotlar (constructors) ve statik deyimi Dr. Musa ATAŞ Siirt Üniversitesi Bilgisayar Mühendisliği Kurucu Metotlar (Constructors) Kurucu metot çeşitleri Varsayılan

Detaylı

// hataları işaret eden referans

// hataları işaret eden referans System sınıfı java.lang.object java.lang.system public final class System extends Object System sınıfı, java.lang paketi içindedir. Platformdan bağımsız olarak sistem düzeyindeki eylemleri belirleyen dingin

Detaylı

NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE YÖNELİK PROGRAMLAMA NESNEYE YÖNELİK PROGRAMLAMA Metotlar Şu ana kadar yaptığımız örneklerde hep önceden hazırlanmış ReadLine(), WriteLine() vb. gibi metotları kullandık. Artık kendi metotlarımızı yapmanın zamanı geldi. Bilmem

Detaylı

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util.

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util. Class PriorityQueue java.util Class PriorityQueue java.lang.object java.util.abstractcollection java.util.abstractqueue java.util.priorityqueue Parametre tipleri: E - the type of elements held

Detaylı

Bir c sınıfının doğal sıralaması ile tutarlı olması (be consistent with equals) demek, c sınıfı içindeki her e1 ve e2 nesnesi için

Bir c sınıfının doğal sıralaması ile tutarlı olması (be consistent with equals) demek, c sınıfı içindeki her e1 ve e2 nesnesi için Interface Comparable java.lang Interface Comparable Altarayüzleri Delayed, Name, ScheduledFuture Kılgılayan Sınıflar: Authenticator.RequestorType, BigDecimal, BigInteger, Boolean, Byte, ByteBuffer,

Detaylı

Sunum İçeriği. Programlamaya Giriş 22.03.2011

Sunum İçeriği. Programlamaya Giriş 22.03.2011 Programlamaya Giriş Nesne Tabanlı Programlamaya Giriş ve FONKSİYONLAR Sunum İçeriği Nesne Tabanlı Programlama Kavramı Fonksiyon tanımlama ve kullanma Formal Parametre nedir? Gerçel Parametre nedir? Fonksiyon

Detaylı

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

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız. 1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız. [10 puan] int param = 30; int result = 300; if (param > 45) result

Detaylı

İlgili Konular: Object.equals(java.lang.Object), Object.hashCode(), rehash(), Collection, Map, HashMap, TreeMap, Serialized Form

İlgili Konular: Object.equals(java.lang.Object), Object.hashCode(), rehash(), Collection, Map, HashMap, TreeMap, Serialized Form Class Hashtable java.util Class Hashtable java.lang.object java.util.dictionary java.util.hashtable Kılgıladığı Arayüzler: Serializable, Cloneable, Map Altsınıfları: Properties, UIDefaults

Detaylı

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1 BÖLÜM - 5 Nesneye Yönelik Programlamaya Giriş Bu

Detaylı

Java Class Yapısında Finalize Metotunun Kullanımı

Java Class Yapısında Finalize Metotunun Kullanımı Java'da finalize() Metodu: Java dili kullanılmayan nesneleri silmek için arka planda çalışan bir sisteme sahiptir. Bu yüzden C++ gibi dillerde dinamik nesne tanımlarında mutlaka yer alması gereken nesneyi

Detaylı

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

Java ile Nesneye Yönelik Programlama (Object Oriented Programming) Java ile Nesneye Yönelik Programlama (Object Oriented Programming) Giriş Yrd. Doç. Dr. Aybars UĞUR Örnek 1 Bir Yolcu sınıfı, yolcu1 nesnesi oluşturulması ve kullanılması class Yolcu String ad; String soyad;

Detaylı

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

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Fonksiyon Tanımlamak Java da Döngüler Java da Şart İfadeleri Uygulamalar Java da Fonksiyon Tanımlamak JAVA DA FONKSİYON TANIMLAMAK 4 Fonksiyonlar;

Detaylı

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

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism ) Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism ) BBS-515 Nesneye Yönelik Programlama Ders #9 (16 Aralık 2009) Geçen ders: Java Applet lerde bileşen yerleştirme türleri ( applet layouts

Detaylı

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ Java programlama dili, Java SUN bilgisayar şirketi tarafından 1991 yılında geliştiril Program bloklar halinde yazılır ve bloklar { } ile oluşturulur. Komutlar aynı satıra

Detaylı

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR KUYRUKLAR QUEUES Doç. Dr. Aybars UĞUR Giriş Bu bölümde gerçek yaşamdaki kuyrukların bilgisayardaki gösterimleri üzerinde durulacaktır. Kuyruklar, eleman eklemelerin sondan (rear) ve eleman çıkarmaların

Detaylı

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

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/ Ana Main Kodları /*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/ package javaapplication1; public class JavaApplication1 public static void

Detaylı

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

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır. Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır. Örneğin; bir öğrenci, sıra, çember, bir buton birer nesnedir. Bir

Detaylı

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

Öğr. Gör. Musa AYDIN Fatih Sultan Mehmet Vakıf Üniversitesi Öğr. Gör. Musa AYDIN Fatih Sultan Mehmet Vakıf Üniversitesi İÇİNDEKİLER Değişken Nedir? Değişken kullanımı faydaları. Değişken türleri Değişken görünürlüğü (scope) Değişken türleri arası dönüşümler Örnek

Detaylı

İki Yöntem. Komposizyon (Composition) Kalıtım (Inheritance)

İki Yöntem. Komposizyon (Composition) Kalıtım (Inheritance) İki Yöntem Komposizyon (Composition) Kalıtım (Inheritance) Komposizyon(Composition) class Meyva { } //... class Elma { } private Meyva m = new Meyva(); //... Komposizyon - UML Örnek Motor.java AileArabasi.java

Detaylı

Sınıfların Tekrardan Kullanılması. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1

Sınıfların Tekrardan Kullanılması. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1 Sınıfların Tekrardan Kullanılması Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1 İki Yöntem Komposizyon (Composition) Kalıtım (Inheritance) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı

Detaylı

Cybersoft Bilişim Teknolojileri Sunucu Tarafı Programlaması Kursu Final soruları. Tarih: 27 Kasım 2010 Saat: 13:30 Süre: 3 saat

Cybersoft Bilişim Teknolojileri Sunucu Tarafı Programlaması Kursu Final soruları. Tarih: 27 Kasım 2010 Saat: 13:30 Süre: 3 saat Cybersoft Bilişim Teknolojileri Sunucu Tarafı Programlaması Kursu Final soruları. Tarih: 27 Kasım 2010 Saat: 13:30 Süre: 3 saat 1. Kısım Çoktan Seçmeli (48 puan) 1) Aşağıdaki JAVA kod parçası çalıştırıldığında

Detaylı

Kılgıladığı arayüzler: Serializable, Cloneable, Map<K,V>, NavigableMap<K,V>, SortedMap<K,V>

Kılgıladığı arayüzler: Serializable, Cloneable, Map<K,V>, NavigableMap<K,V>, SortedMap<K,V> Class TreeMap java.util Class TreeMap java.lang.object java.util.abstractmap java.util.treemap Parametre tipleri: - the type of keys maintained by this map V - the type of mapped values ılgıladığı

Detaylı

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

Java da, tüm değişkenlerin kullanılmadan önce tanımlanması edilmesi gerekir. Bir değişken tanımlamanın temel gösterimi bu şekildedir: BÖLÜM 4 Değişken Tipleri Java da, tüm değişkenlerin kullanılmadan önce tanımlanması edilmesi gerekir. Bir değişken tanımlamanın temel gösterimi bu şekildedir: type identifier [ = value][, identifier [=

Detaylı

Class HashMap. Class HashMap java.lang.object java.util.abstractmap java.util.hashmap. Kılgıladığı Arayüzler: Cloneable, Map, Serializable

Class HashMap. Class HashMap java.lang.object java.util.abstractmap java.util.hashmap. Kılgıladığı Arayüzler: Cloneable, Map, Serializable Class HashMap java.util Class HashMap java.lang.object java.util.abstractmap java.util.hashmap Kılgıladığı Arayüzler: Altsınıfları Bildirimi: Cloneable, Map, Serializable LinkedHashMap, PrinterStateReasons

Detaylı

Bölüm 24. Java Ağ Uygulamaları 24.1 Java Appletleri. Bir Applet in Yaşam Döngüsü:

Bölüm 24. Java Ağ Uygulamaları 24.1 Java Appletleri. Bir Applet in Yaşam Döngüsü: Bölüm 24 Java Ağ Uygulamaları 24.1 Java Appletleri Applet, Web tarayıcısında çalışan bir Java programıdır. Bir applet, Java uygulaması için tamamen fonskiyonel olabilir çünkü bütün Java API ye sahiptir.

Detaylı

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

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır. Ders İçeriği An introduction to Object-oriented programming with Java Third Edition Update Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır. Nesneye Yönelik Öğr.

Detaylı

Đlgili konular: Collection, Set, HashSet, Comparable, Comparator, TreeMap, Collections.synchronizedSortedSet(SortedSet), Serialized Form

Đlgili konular: Collection, Set, HashSet, Comparable, Comparator, TreeMap, Collections.synchronizedSortedSet(SortedSet), Serialized Form Class TreeSet java.util Class TreeSet java.lang.object java.util.abstractcollection java.util.abstractset java.util.treeset Kılgıladığı arayüzler: Cloneable, Collection, Serializable, Set, SortedSet Bildirimi:

Detaylı

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu SORU 1 Dünyanın en uzun beş nehrini öğeleri olarak kabul eden bir yığıt (stack) yaratınız. Yığıtın üçüncü öğesini bulunuz. Yığıtın üstündeki öğeyi bulunuz ve

Detaylı

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

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi Görsel Programlama Metot Yeniden Tanımlama, Metot Aşırı Yükleme, Dinamik Metot Yükleme, Soyut Sınıflar, Soyut Metotlar, Arayüzler, Çoklu Kalıtım, Anonim Sınıflar ve java.lang.object Sınıflar Programcı

Detaylı

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2 NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2 JAVA DA PROGRAM DENETİMİ VE OPERATÖRLER Java programlama dilinde temel tipleri ve nesneleri yönlendirmek ve değiştirmek için operatörler kullanılır. Atamalar sağ taraftaki

Detaylı

İÇİNDEKİLER VII İÇİNDEKİLER

İÇİNDEKİLER VII İÇİNDEKİLER İÇİNDEKİLER VII İÇİNDEKİLER 1 JAVA 8 NEDİR? 1 Java Nasıl Çalışır? 3 HOTSPOT Teknolojisi Nedir? 5 Çöp Toplayıcı (GarbageCollector) Nedir? 5 Jar Nedir? 6 Java Geliştirme Ortamı 7 Açıklama Satırıları 8 Nesnel

Detaylı

BİL132 Bilgisayar Programlama II

BİL132 Bilgisayar Programlama II BİL132 Bilgisayar Programlama II 8. Olağandışı durumlar (exceptions) Hacettepe Üniversitesi Bilgisayar Mühendisliği Bölümü Yüksel Tarhan Olağandışı durum Kütük bulunamadı Diskte yer kalmadı Nesne referans

Detaylı

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN TEMEL AMAÇLAR Bir dairenin yarıçapını kullanıcıdan alarak dairenin alanını hesaplamak istediğimizi düşünelim. Eğer girilen değer

Detaylı

ArrayList Uygulamaları

ArrayList Uygulamaları ArrayList Uygulamaları Aşağıdaki program önce boş bir ArrayList yaratıyor. Sonra sırasıyla şu işleri yapıyor: Listenin boş olup olmadığını yaz. Ambara üç tane öğe ekle. İndisi 2 olan yere bir öğe sokuştur.

Detaylı

BİL-141 Bilgisayar Programlama I (Java)

BİL-141 Bilgisayar Programlama I (Java) 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,

Detaylı

Nesneler için torbalar (Collections) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 12 1

Nesneler için torbalar (Collections) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 12 1 Nesneler için torbalar (Collections) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 12 1 NESNELER İÇİN TORBALAR Torbalar birden çok nesneyi aynı çatı altında toplamak için kullanılır. Bunun faydası

Detaylı

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

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2 1 Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2 Eclipse Mimarisi 4 Java Teknolojisine Genel Bir Bakış 6 Taşınabilirlik 6 Java Derleyicisi ve Bytecode 6 Java Sanal Makinası (Java Virtual Machine - JVM)

Detaylı

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

Nesneye yönelik: Javada herşey bir nesnedir. Java nesne yönelimli olduğu için kolayca geliştirilebilir. BÖLÜM 1 Java Programlamaya Giriş Java programlama dili ilk olarak başında James Gosling`n bulundugu Sun Microsystems tarafından 1995 yılında, Sun Java Platformunun ana unsuru olarak geliştirilmeye başlandı.

Detaylı

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

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi Görsel Programlama Kalıtım, Temel/Alt Sınıf, Temel/Alt Sınıf Tip Dönüşümleri, Temel Sınıf Yapıcıları, super Anahtar Kelimesi, Sınıf Üyesi Görünürlüğü, Statik Üyeler ve Final Üyeler Sınıflar Programcı tarafından

Detaylı

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

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2. İçerik Geçen ders: Kalıtım ( inheritance ) Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama Ders #5 (18 Kasım 2009) Bu ders: Kalıtım ( inheritance ) tekrar ziyaret Java da super kullanımı

Detaylı

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

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say İÇİNDEKİLER 1. Bilgisayarın Yapısı Ve Programlama Dilleri Giriş 1 Bilgisayar ve Programlamanın Kısa Bir Tarihçesi 2 Donanım ve Yazılım Kavramları 3 Bilgisayarın Donanımsal yapısı 4 Giriş Birimi (Input

Detaylı

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ C# Yazım Kuralları 1 İçindekiler C# Yazım Kuralları Veritipleri Değişkenler Operatörler Sınıflar Nesneler, Özellik, Metot ve Olay Bileşenler 2 C# yazım kuralları Deyimlerde büyük küçük harf yazıma uyulmalı

Detaylı

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü BM-209 Nesne Yönelimli Programlama Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü Java Programlama Dili Java bayt kodları Java Sanal Makineleri üzerinde

Detaylı

CharArrayReader. Kılgıladığı Arayüzler: Bildirimi: Değişkenleri (fields): java.io.reader Sınıfından Kalıtsal Gelen Değişken:

CharArrayReader. Kılgıladığı Arayüzler: Bildirimi: Değişkenleri (fields): java.io.reader Sınıfından Kalıtsal Gelen Değişken: CharArrayReader java.lang.object java.io.reader java.io.chararrayreader Kılgıladığı Arayüzler: Closeable, AutoCloseable, Readable Bildirimi: public class CharArrayReader extends Reader Karekter giriş akımı

Detaylı

BTEP243 Ders 3. class Yazım Kuralı:

BTEP243 Ders 3. class Yazım Kuralı: BTEP243 Ders 3 Sınıflar ve Nesneler Nesne tabanlı programlamada, programlamanın temeli sınıflardır (class). Nesnelerin yaratılmasında taslak (blueprint) görevi görür. Sınıflar; o Nesnelerin özelliklerinin

Detaylı

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 2 DERSİ LAB. ÖDEVİ

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 2 DERSİ LAB. ÖDEVİ İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 2 DERSİ LAB. ÖDEVİ AD SOYAD : TESLİM TARİHİ : OKUL NO : TESLİM SÜRESİ : 1 hafta Ödev No : 2 (İlk 2 soru el yazısı ile çıktı alınarak

Detaylı

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

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Kapsülleme (Erişim Denetleyiciler) Java da Sınıf Oluşturmak Java da Nesne Oluşturmak Java da Constructor Kavramı Java da This Kavramı Java da Constructor

Detaylı

Java, java.util paketi içinde mevcut olan Date sınıfını sağlar, bu sınıf güncel tarih ve zamanı kapsüllemektedir.

Java, java.util paketi içinde mevcut olan Date sınıfını sağlar, bu sınıf güncel tarih ve zamanı kapsüllemektedir. PART 13 13. Tarih & Zaman Java, java.util paketi içinde mevcut olan Date sınıfını sağlar, bu sınıf güncel tarih ve zamanı kapsüllemektedir. Date sınıfı 2 adet constructor destekler. İlk constructor, güncel

Detaylı

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

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama Bölüm 39 Binary Search (Yarılama) 39.1 Dizide Bir Öğe Arama İkil aramayı (yarılama yöntemi) sıralı veri kümelerinde sık sık kullanırız. Örneğin, sözlükte bir sözcüğü ararken, sözlüğün bütün sayfalarını

Detaylı

Calistir diye normal bir java classı ekleyelim.aynı pakete ekleyelim.public ve main metodu ekleyelim.

Calistir diye normal bir java classı ekleyelim.aynı pakete ekleyelim.public ve main metodu ekleyelim. Calistir diye normal bir java classı ekleyelim.aynı pakete ekleyelim.public ve main metodu ekleyelim. KopekEkranı çalıştırmak için kullanacaz. KopekEkran dan obje üretiyoruz. Swing programlarda ekranın

Detaylı

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

Klavyeden Basit Giriş/Çıkış İşlemleri Klavyeden Basit Giriş/Çıkış İşlemleri Klavyeden veri girilmesi, girilen verilere çeşitli işlemler uygulandıktan sonra ekrana yazdırılması ya da herhangi bir yazıcıdan çıktı alınması gibi işlemlerdir. Javada

Detaylı

BİL-142 Bilgisayar Programlama II

BİL-142 Bilgisayar Programlama II BİL-142 Bilgisayar Programlama II (C/C++) Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Konular Giriş Sınıflar, Nesneler, Fonksiyon ve Veri Üyeleri Sınıf ve Fonksiyon Üyeleri

Detaylı

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak:  Published by Juan Soulié Kullanılacak kaynak: http://www.cplusplus.com/doc/tutorial/ Published by Juan Soulié C++ Nedir? Arttırılmış C demektir ve C dilinin geliştirilmiş halini yansıtır. C++ öğrenmeden önce herhangi bir programlama

Detaylı

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

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama Ders #5 (18 Kasım 2009) İçerik Geçen ders: Kalıtım ( inheritance ) Bu ders: Kalıtım ( inheritance ) tekrar ziyaret Java da super kullanımı

Detaylı

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

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ Amaçlar: 1- Arayüzler (Interfaces) 2- Soyut Sınıflar ve Metotlar(Abstract classes and methods) Uygulama-1: interface:cihaz ac() kapat() goster(string) class: TV class: LCD class: Projector... Cihaz adındaki

Detaylı

Java Programlamada Paket Yapısı Ve Import

Java Programlamada Paket Yapısı Ve Import Java programlamada paket yapısı ve import Java Programlamada Paket yapısı ve Java programları paketlerden oluşmaktadır. Paketlerin içinde sınıflar ve arayüzler bulunur. İstenirse var olan paketlerden başka

Detaylı

Nesne Yönelimli Programlama

Nesne Yönelimli Programlama 1 Nesne Yönelimli Programlama Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Not: Bu dersin sunumları, Java Programlama Dili ve Yazılım Tasarımı, Altuğ B. Altıntaş, Papatya

Detaylı

JAVADA DİZİ İŞLEMLERİ

JAVADA DİZİ İŞLEMLERİ JAVADA DİZİ İŞLEMLERİ Javada diziler nesnedirler, cdeki gibi hafızada yer kaplayan pointer değillerdir. Javada diziler, cye göre daha güvenilirdir. Dizilerin elemanlarına gelişigüzel değerler atayamazsınız.

Detaylı

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

Mantıksal İşlemler. 7.1 true, false, nil 7 Mantıksal İşlemler 7.1 true, false, nil Doğru ya da Yanlış değer alan önermelere (ifadelere) mantıksal (logic) deyimler ya da boolean deyimler denilir ([5]). Bir çok dilde mantıksal işlemler true ve

Detaylı

Class HashSet. Metotlar. Class HashSet java.lang.object java.util.abstractcollection java.util.abstractset java.util.hashset

Class HashSet. Metotlar. Class HashSet java.lang.object java.util.abstractcollection java.util.abstractset java.util.hashset Class HashSet java.util Class HashSet java.lang.object java.util.abstractcollection java.util.abstractset java.util.hashset Kılgıladığı arayüzler: Cloneable, Collection, Serializable, Set Altsınıfları:

Detaylı

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş Kurulum için ilk önce Sun Microsystems in sitesinden uygun J2SE sürümünü indirin. Ben J2SE v1. 4. 2_16 Windows Installer paketini kullandım J2SE SDK Kurulumu aşağıdaki gibi başlayacaktır. 1 Kurulum tamamlandıktan

Detaylı

Dağıtık Sistemler CS5001

Dağıtık Sistemler CS5001 Dağıtık Sistemler CS5001 Th. Letschert Çeviri: Turgay Akbaş TH Mittelhessen Gießen University of Applied Sciences İstemci-Sunucu Uygulamaları: Aktive Monitörler Pasif monitörden(paylaşılan durum) aktif

Detaylı

Programlama Dillerinde Kullanılan Veri Tipleri

Programlama Dillerinde Kullanılan Veri Tipleri Programlama Dillerinde Kullanılan Veri Tipleri Taban/Biçim Basic Paskal C/C++/C#/Java 10 (Decimal ) - - - 16 (Hexadecimal) &hsayı veya &Hsayı $sayı 0xsayı veya 0Xsayı Üstel eüs veya Eüs eüs veya Eüs eüs

Detaylı

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

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance Önemli noktalar Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance public class Test { // çalışır İnsan insan = new Çiçekçi();

Detaylı

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı 2012 2013 Đlkbahar Dönemi 13 Nisan 2013. Ad, Soyad Öğrenci No.

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı 2012 2013 Đlkbahar Dönemi 13 Nisan 2013. Ad, Soyad Öğrenci No. Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü BLGM 318 Ara Sınavı 2012 2013 Đlkbahar Dönemi 13 Nisan 2013 Ad, Soyad Öğrenci No. : : Öğretim Üyesi: Doç. Dr. Zeki BAYRAM Süre: 100 dakika Talimatlar:

Detaylı

I Java Veri Yapıları 1

I Java Veri Yapıları 1 İçindekiler Önsöz xix I Java Veri Yapıları 1 1 Giriş 3 1.1 Veri Nedir?............................... 3 1.2 Algoritma Nedir?............................ 4 1.3 Veri Yapıları..............................

Detaylı

public static int Toplam int x, int y

public static int Toplam int x, int y static Kavramı 1 İçinde bulunduğu sınıftan nesne oluşturulmadan veya hiç bir nesneye referans olmadan kullanılabilen üyeler static olarak nitelendirilir. Metotlar ve alanlar static olarak tanımlanabilir.

Detaylı

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

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş Yard. Doç. Dr. Alper Kürşat Uysal Bilgisayar Mühendisliği Bölümü akuysal@anadolu.edu.tr Ders Web Sayfası: http://ceng.anadolu.edu.tr/ders.aspx?dersid=101

Detaylı

HB2001: JAVA PROGRAMLAMA (32 saat)

HB2001: JAVA PROGRAMLAMA (32 saat) Sayfa: 1 / 7 HB2001: JAVA PROGRAMLAMA (32 saat) Eğitimin Amacı Bu eğitim Java programlama dilinin özelliklerini öğretmeyi amaçlar. Java programlamaya girişle başlayan eğitim, object-oriented programming

Detaylı

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

BBS515 Nesneye Yönelik Programlama. Ders 2 Zümra Kavafoğlu BBS515 Nesneye Yönelik Programlama Ders 2 Zümra Kavafoğlu https://zumrakavafoglu.github.io/ Bu derste neler öğreneceğiz? IntelliJ ile proje oluşturma Yorum satırları Sınıf deklarasyonu İsimlendirme kuralları

Detaylı

Java String İşlemleri

Java String İşlemleri Java String İşlemleri Karakterler (Characters) "char" kelimesi bir karakter tanımlamak için kullanılır. Karakter tek tırnak içine alınmalıdır. Bir char'ın aralığı 0 ile 65536 arasındadır. Char türü işaretsiz

Detaylı

Yığıtın en üstündeki öğeyi değer olarak alır; ama onu yığıttan almaz, yerinde bırakır.

Yığıtın en üstündeki öğeyi değer olarak alır; ama onu yığıttan almaz, yerinde bırakır. Stack Sınıfı (yığıt) java.util Class Stack java.lang.object java.util.abstractcollection java.util.abstractlist java.util.vector java.util.stack Stack (yığıt) sınıfı nesnelerin LIFO (last-input-first-output)

Detaylı

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 8. Yrd.Doç.Dr.Hacer Karacan

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 8. Yrd.Doç.Dr.Hacer Karacan NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 8 Yrd.Doç.Dr.Hacer Karacan İçerik İstisna Yönetimi (Exception Handling) İstisna Nedir? İstisna Yakalama Mekanizması İstisna İşleme Modeli İstisnaların Listesi İstisna

Detaylı

Java Programlama Giriş

Java Programlama Giriş Java Programlama Giriş 2013-2014 Bahar Dönemi Mehmet Akif Ersoy Üniversitesi Teknik Bilimler Meslek Yüksekokulu Burdur 2014 Muhammer İLKUÇAR 1 Neden Java Programlama Platformdan bağımsızdır

Detaylı

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

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi 5.HAFTA Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi Sınıf Kavramı: Sınıf (class) soyut bir veri tipidir. Nesne (object) onun somutlaşan bir cismidir. Java da sınıf (class) kavramını

Detaylı

7. HAFTA. Erişim Belirleyiciler

7. HAFTA. Erişim Belirleyiciler 7. HAFTA Erişim Belirleyiciler Java dilinde 4 tür erişim belirleyicisi vardır; bunlar friendly, public, protected ve private dir. Bu erişim belirleyiciler global alanlar (statik veya değil) ve yordamlar

Detaylı

C#(Sharp) Programlama Dili

C#(Sharp) Programlama Dili Değişkenler C#(Sharp) Programlama Dili Program yazarken her zaman sabit verilerle çalışmayız, çoğu zaman programımızda bir verinin kullanıcının davranışına göre değişmesi gerekir. Kullanıcıdan bir metin

Detaylı

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

Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir: Programın Akışının Denetimi Bir program komutların yazıldığı sırada akar. Ama çoğunlukla, bu akışı yönlendirmek gerekir. Bu iş için denetim yapılarını kullanırız. Bunlar iki gruba ayrılabilir: Yönlendiriciler

Detaylı

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler BMÜ-111 Algoritma ve Programlama Bölüm 5 Tek Boyutlu Diziler Yrd. Doç. Dr. İlhan AYDIN 1 Problem 100 adet sayı okumak istediğimizi düşünelim. Bu sayıların ortalaması hesaplanacak ve sayıların kaç tanesinin

Detaylı

BBS515 Nesneye Yönelik Programlama. Ders 2 Zümra Kavafoğlu https://zumrakavafoglu.github.io/

BBS515 Nesneye Yönelik Programlama. Ders 2 Zümra Kavafoğlu https://zumrakavafoglu.github.io/ BBS515 Nesneye Yönelik Programlama Ders 2 Zümra Kavafoğlu https://zumrakavafoglu.github.io/ print metodu System.out.print imleci aynı satırda tutar, System.out.println imleci bir alt satıra indirir Tamsayı

Detaylı

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

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI BLG339 PROGRAMLAMA DİLLERİ KAVRAMI Hafta 4 Ders 2 Yrd. Doç. Dr. Melike Şah Direkoğlu Alındığı kaynak: Addison-Wesley s Programming Language Concepts slaytları ve Prof. Dr. Tuğrul Yılmaz ın ders notlarından

Detaylı

Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals

Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals The European Union s Making the Labour Market more Inclusive III programme For North Cyprus Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals Module

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları DİZİLER Bellekte ard arda yer alan aynı türden nesneler kümesine dizi (array) denilir. Bir dizi içerisindeki bütün elemanlara aynı isimle ulaşılır. Yani dizideki bütün elemanların isimleri ortaktır. Elemanlar

Detaylı

Kılgılayan Sınıflar: AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap

Kılgılayan Sınıflar: AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap Map Arayu zu java.util Interface Map Altarayüzleri: SortedMap Kılgılayan Sınıflar: AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap Map, Java Collections

Detaylı

Veri Yapıları ve Algoritmalar 2006-2007 2.dönem

Veri Yapıları ve Algoritmalar 2006-2007 2.dönem Veri Yapıları ve Algoritmalar 2006-2007 2.dönem Öğretim Elemanları: Dr. A. Şima Etaner-Uyar Dr. Gülşen Cebiroğlu-Eryiğit Dersle ilgili bilgiler Ders Kitabı Data Structures and Algorithms in Java, 4th Ed.,

Detaylı

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

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58; BTEP212 Java DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI Lab7 bazen bir metodun içinde o metodun ait olduğu sınıftan yaratılacak nesneyi veya o nesnenin bir alt

Detaylı

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1 BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1 Ekrana Metin Yazdırmak Ekranda metin yazdırmak istendiğinde print komutu kullanılır. Kullanımı aşağıda verilmiştir. Parantez içinde

Detaylı

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

Karşılaştırma İşlemleri ve Koşullu İfadeler Karşılaştırma İşlemleri ve Koşullu İfadeler BİL131 - Bilişim Teknolojileri ve Programlama Hakan Ezgi Kızılöz Karşılaştırma İşlemleri Java'da sayısal veri tiplerinin karşılaştırılması için aşağıdaki karşılaştırma

Detaylı

BMM3101 PROGRAMLAMA DİLLERİ

BMM3101 PROGRAMLAMA DİLLERİ 2017-2018 Güz Yarıyılı Balıkesir Üniversitesi Bilgisayar Mühendisliği Bölümü BMM3101 PROGRAMLAMA DİLLERİ Yrd. Doç. Dr. İbrahim KÜÇÜKKOÇ Web: http://ikucukkoc.baun.edu.tr Email: ikucukkoc@balikesir.edu.tr

Detaylı

ByteArrayOutputStream

ByteArrayOutputStream ByteArrayOutputStream java.io java.lang.object java.io.outputstream java.io.bytearrayoutputstream Kılgıladığı Arayüzler: Closeable, Flushable, AutoCloseable public class ByteArrayOutputStream extends OutputStream

Detaylı

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

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java Veri Tipleri ve Özelilkleri Değişken Tanımlama Kuralları Değişken Veri Tipi Değiştirme (Type Casting) Örnek Kodlar Java Veri Tipleri ve Özelilkleri

Detaylı

Programlama Dilleri 3

Programlama Dilleri 3 Diziler (Arrays) 1 Dizi Kavramı Bellekte ard arda yer alan aynı türden nesneler kümesine dizi (array) denilir. Bir dizi içerisindeki bütün elemanlara aynı isimle ulaşılır. Yani dizideki bütün elemanların

Detaylı