Java Programlama Dili - 01 Tek Class ile Programlama BU-SWE 510 Fall 2003 Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.tr meraklisina.com © 2000-2003 Haluk Bingöl v2.23 İçerik • Kaynaklar • Java genel bakış • Tek Class ile Java programlama – Temel Tipler – Operatörler – Değişkenler – Akış kontrolu – Temel Nesneler meraklisina.com 3 Java Genel Bakış meraklisina.com 4 Java nedir? Java is a • • • • • simple, object oriented, distributed, interpreted, robust, • • • • • • secure, architecture natural, portable, high-performance, multithreaded, dynamic language. meraklisina.com 5 Java nedir? ... • Sun geliştirdi (James Gosling) – 1991 Embedded sistemler – 1995 web • Bir programlama dili – Nesneye dayalı – Concurrent • Thread • Synchronization • Standart class kütüphaneleri • JVM-Java Virtual Machine meraklisina.com 6 çalışma geliştirme Java Çalışma Ortamı Java Kaynak Kodu Java Byte-Code JVM İşletim Sistemi javac Java Byte-Code Java Byte-Code JVM Browser meraklisina.com 7 Java Artılar • Platformdan bağımsız – Windows, Unix, Mac – Internet Explorer, Netscape Navigator • Standart kütüphaneler – Grafik Kullanıcı Arayüzü – Resim ve ses – JDBC – Network – ... meraklisina.com 8 Java Artılar ... • Tasarım olarak internete hazır – "Canlı" Web sayfaları – FTP clients, POP mail clients – HTTP – RMI-Remote Method Invocation – Güvenlik – ... meraklisina.com 9 JIT Derleyiciler • Just In Time (JIT) – byte-code -> makine kodu – istemci tarafında derleme – sadece kullanılan kısmın derlenmesi Java Byte-Code JVM Makine Kodu meraklisina.com 10 Java ve C++ Karşılaştırması • pointer • struct, union, enum • çoklu kalıtım • preprocessor meraklisina.com 11 Java ve C++ Karşılaştırması ... • Byte-code • String ve diziler birer nesne • otomatik garbage collection meraklisina.com 12 JDK Araçları • Java Development Kit (JDK) – javac • Java derleyicisi – appletViewer • appletlerin çalıştığı ortam – java • uygulamaların çalıştığı ortam – javadoc • /** … */ belgelemesi www.java.sun.com meraklisina.com 13 Entegre Geliştirme Ortamları • eclipse (www.eclipse.org) • JEdit (www.jedit.org) • Visual Age for Java -> WebSphere • Forte -> SunONE • JBuilder • ... meraklisina.com 14 Tek Class ile Java Programlama meraklisina.com 15 Merhaba Dünya public class HelloWorld { public static void main(java.lang.String[] args) { System.out.println("Merhaba Dunya"); } } Kernighan & Ritchie The C Programming Language 1978 • Unicode Merhaba Dunya – 16 bit – www.unicode .org out meraklisina.com 16 Consol I/O public class ConsolIO { • public static void main(java.lang.String[] args) throws java.io.IOException { • System.out.println("Lütfen bir sayı girin: "); • int i = System.in.read(); • System.out.println("i: " + i); • } } Kernighan & Ritchie The C Programming Language 1978 • Unicode Lütfen bir sayı girin: 34 i: 51 – 16 bit – www.unicode .org consol meraklisina.com 17 Comment /* Bu bir açıklamadır */ /* Şimdi diziyi ters çevirelim * Son değere dikkat */ /** Bu bir belgeleme açıklamasıdır */ /** * Geçilebilir */ static final int GEÇ = 1; • çok satır • tek satır • belgeleme – javadoc // Bu bir açıklamadır int sayı = 0; // ilk değeri koy meraklisina.com 18 Comment ... /** * Fibonacci serisi * f(0) = 1 * f(1) = 1 * f(n) = f(n-1) + f(n-2) */ public class Fibonacci { static final int MAX=9; public static void main(String[] args) { // başlangıç değerler int nm2 = 1; /* int nm1 = 1; • // ve /* kullanımı // diğer değerler System.out.println("1: " + nm2); for (int i = 2; i <= MAX; i++) { System.out.println(i + ": " + nm1); nm1 = nm2 + nm1; nm2 = nm1 - nm2; } */ } } meraklisina.com 19 Temel Tipler meraklisina.com 20 Temel Veri Tipleri public void initVariables() { byte byA; byA = 5; short shA; shA = 7; int intA; long lgA; lgA = 45L; float ftA; ftA = 1.2F; ftA = 1.2f; • • • • byte short int long double dbA; dbA = 1.2D; dbA = 1.2d; dbA = 1.2; dbA = .12e1; dbA = .12E1; • float • double char chA; chA = '\n'; // diger \b, \t, \n, \f, \r, \", \', \\ chA = '\uffff'; // ffff hex chA = 'A'; • char • boolean boolean boA; boA = true; boA = false; } meraklisina.com 21 Temel Veri Tipleri … Büyüklükler Tip integer byte short int long Uzunluk (bit) 8-bit 2's 16-bit 2's 32-bit 2's 64-bit 2's Varsayılan Değer 0 0 0 0 reel float double 32-bit IEEE754 64-bit IEEE754 0 0 diğer char boolean 16-bit unicode true/false \u0000 False • • • • byte short int long • float • double • char • boolean meraklisina.com 22 Temel Veri Tipleri … Type Wrappes • • • • byte short int long • • • • java.lang.Byte java.lang.Short java.lang.Integer java.lang.Long • float • double • java.lang.Float • java.lang.Double • char • boolean • java.lang.Character • java.lang.Boolean meraklisina.com 23 Temel Veri Tipleri … Tipler Arası Çevrim public void casting() { System.out.println("\nTipler arasi cevrim"); double dbD = 7.99; long lgL = (long) dbD; System.out.println("dbD: " + dbD + "\tlgL: " + lgL); short shS = -134; byte byB = (byte) shS; System.out.println("shS: " + shS + "\tbyB: " + byB); String strI = "-134"; int intI = Integer.parseInt(strI); System.out.println("strI: " + strI + "\tintI: " + intI); Tipler arasi cevrim dbD: 7.99 lgL: 7 shS: -134 byB: 122 strI: -134 intI: -134 strF: 7.99 flF: 7.99 String strF = "7.99"; float flF = Float.parseFloat(strF); System.out.println("strF: " + strF + "\tflF: " + flF); } out meraklisina.com 24 Operatörler ve İşlem Sırası meraklisina.com 25 Operatorler ve İşlem Sırası Gruplama Postfix Unary Creation, cast Multiplicative Additive Shift Relational Equality Bitwise AND Bitwise EXOR Bitwise OR Logical AND Logical OR Conditional Assignment Operatorler [] . (params) exp++ exp-++exp --exp +exp -exp ~ ! new (type)exp * / % + << >> >>> < > <= >= instanceof == != & ^ | && || ?: = *= /= %= += -= >>= <<= >>>= meraklisina.com &= ^= |= 26 Operatorler ve İşlem Sırası … Postfix ve Prefix public void operators() { int count = 0; // postfix System.out.println("postfix "); count = 0; do { System.out.println(count); } while (count++ < 4); // prefix System.out.println("prefix "); count = 0; do { System.out.println(count); } while (++count < 4); } int j = 16; System.out.println(++j + " " + j++ + " " + j); meraklisina.com 27 Operatorler ve İşlem Sırası … Postfix ve Prefix ... public void operators() { int count = 0; // postfix System.out.println("postfix "); count = 0; do { System.out.println(count); } while (count++ < 4); // prefix System.out.println("prefix "); count = 0; do { System.out.println(count); } while (++count < 4); } int j = 16; postfix System.out.println(++j + " " + j++ + " " + j); 0 1 2 3 4 prefix 0 1 2 3 out meraklisina.com 28 Operatorler ve İşlem Sırası … Postfix ve Prefix ... public void operators() { int count = 0; // postfix System.out.println("postfix "); count = 0; do { System.out.println(count); } while (count++ < 4); // prefix System.out.println("prefix "); count = 0; do { System.out.println(count); } while (++count < 4); } int j = 16; System.out.println(++j + " " + j++ + " " + j); meraklisina.com 29 Operatorler ve İşlem Sırası … Postfix ve Prefix ... public void operators() { int count = 0; // postfix System.out.println("postfix "); count = 0; do { System.out.println(count); } while (count++ < 4); // prefix System.out.println("prefix "); count = 0; do { System.out.println(count); } while (++count < 4); 17 17 18 } int j = 16; System.out.println(++j + " " + j++ + " " + j); out meraklisina.com 30 Örnek /** * Fibonacci serisi * f(0) = 1 * f(1) = 1 * f(n) = f(n-1) + f(n-2) */ public class Fibonacci { static final int MAX=9; public static void main(String[] args) { int nm2 = 1; int nm1 = 1; System.out.println("1: " + nm2); for (int i = 2; i <= MAX; i++) { System.out.println(i + ": " + nm1); nm1 = nm2 + nm1; nm2 = nm1 - nm2; } 1: 1 } 2: 1 } 3: 2 4: 3 5: 5 6: 8 7: 13 8: 21 9: 34 out meraklisina.com 31 Değişkenler meraklisina.com 32 İdentifiers • Adlandırma – başlangıç • harf • _ • para: $,£,¥ • Tanımlanmış – değişken – sabit – etiket – geri kalan • harf • rakam • Örnek counter String açı_2 çarpışmaKatsayısı meraklisina.com 33 Değişkenler • İçeriği • Saklama – basit tipin değeri – local değişken – nesne referansı – instance değişkeni – class değişkeni • Otomatik garbage collection meraklisina.com 34 Değişkenler ... Adlandırma • Değişken adı – unicode dizisi – keyword olmamalı – aynı scope da aynı ad olmamalı • Convansiyon – küçük harfle başla isVisible meraklisina.com 35 Değişkenler ... Scope • Member • Yerel • Metod • Exception meraklisina.com 36 Değişkenler ... Ad Uzayı // The Java Programming Language, 3ed // Arnold, Gosling, Holmes // pp.153 package Reuse; class Reuse { Reuse Reuse(Reuse Reuse) { Reuse: for (;;) { if (Reuse.Reuse(Reuse) == Reuse) break Reuse; } return Reuse; } } • Sıralama – – – – – – package type field method local variable label • Java da da okunmaz kod yazılabılır meraklisina.com 37 Değişkenler ... İlk değer Değişken Member Local Method Exception İlk değer varsayılan / atanan varsayılan / atanan yok yok • Derleyici değişkenin değer verilmeden kullanılmasını engeller // hatalı int a, b; boolean flag = true; if (flag ){ a = 2; } b = a; meraklisina.com 38 Akış Kontrolu meraklisina.com 39 Akış Kontrolu … if Karar /* *********** * if */ boolean flagKapi = true; boolean girilebilir = false, girilemez = false; // giriş kontrol if (flagKapi == ACIK) { girilebilir = true; } if (flagKapi == ACIK) { girilebilir = true; } else { girilemez = true; } if (condition) { statements; } if (condition) { statements; } else { statements; } meraklisina.com 40 Akış Kontrolu … Karar ... switch /* *********** * switch */ // asansör hangi katta int asansorunOlduguKat = 2; String kat; switch (asansorunOlduguKat) { case 1 : kat = "Giriş Katı"; break; case 2 : kat = "Satış Katı"; break; case 4 : case 5 : kat = "Muhasebe Katı"; break; default : kat = "Girilmez"; break; } switch (value) { case value1: statements; break; case value2: statements; break; default: statements; break; } meraklisina.com 41 Akış Kontrolu … for Döngü /* *********** * for */ // 1'den 100'e kadar sayıları topla int toplam = 0; for (int i = 0; i <= 100; i++) { toplam += i; } for (initialize; test; increment) { statements; } meraklisina.com 42 Akış Kontrolu … Döngü ... do /* *********** * do */ // adım atarak yaklaş int araMesafe = 20; do { //etrafaBak(); araMesafe -= 10; } while (araMesafe != 0); do { statements; } while(condition); meraklisina.com 43 Akış Kontrolu … Döngü ... while // tartı while(terazi.dengelendimi()) { terazi.agirlikEkle(10); } while(condition){ statements; } meraklisina.com 44 Diğer break, continue Akış Kontrolu … atla: while(ulasilmadi) { mesafe++; if (cokHafif) { continue atla; } if (cokAgir) { break disari; } agirlik += 10; disari: tamam = true; } • break, goto değil break label; continue label; meraklisina.com 45 Temel Nesneler meraklisina.com 46 Temel Nesneler ... Diziler // basit tiplerin dizileri int[] aylar = new int[12]; for (int i = 0; i < 12; i++) { aylar[i] = i; } // Nesne dizileri Hesap[] musteriler = new Hesap[200]; for (int i = 0; i < musteriler.length; i++) { musteriler[i].setBakiye(0D); } • Diziler nesne olarak kabul edilir – Basit tiplerin dizisi – Nesnelerin dizisi • Dizi sınırları kontrol edilir • .length • indexler – ilk 0 – son length-1 meraklisina.com 47 Temel Nesneler ... Dizi dizileri // matrix float[][] mat; mat = new float[4][5]; setupMatrix(mat); for (int y = 0; y < mat.length; y++){ for (int x = 0; x < mat[y].length; x++){ System.out.print(mat[y][x] + " "); } System.out.println(); } • En sol boyut mutlaka tanımlanmalı // çok boyutlu diziler float[][] mat = new float[4][]; mat[0] = new float[2]; mat[1] = new float[10]; mat[2] = new float[300]; mat[3] = new float[5]; // ilk değerler String[] tatilGünleri = { "Cumartesi", "Pazar"}; // paskal üçgeni int[][] pascalsTriangle = { {1}, {1, 1}, {1, 2, 1}, {1, 3, 3, 1} }; meraklisina.com 48 Temel Nesneler ... String // tanımla String sA = "Ali"; • String bir nesnedir // uzunluğu int uzunluk = sA.length; // birleştir String sB = sA + " topu at"; // karşılaştırma if ( sA == sB) { // aynı nesneyi gösteriyorlarsa } if ( sA.equals(sB)) { // eşit içerikleri gösteriyorlarsa } int i = 3; System.out.println("i= " + i); meraklisina.com 49 Örnek Muhasebe Hesabı public class Hesap { private double bakiye; private long ID; private static long lastID = 0; /* default constructor */ public Hesap() { this(0.0); } public Hesap(double acilisBakiyesi) { bakiye = acilisBakiyesi; ID = newID(); } /* para yatti */ public void bakiyeArttir(double yatan) { bakiye += yatan; } /* para cekildi */ public void bakiyeAzalt(double cekilen) { bakiye -= cekilen; } /* para cekildi */ public double getBakiye() { return (bakiye); } /* use static variable for ID */ public long newID() { lastID++; return (lastID); } } • İlk program segmenti meraklisina.com 50 Özet • Java genel • Değişkenler • Java - C++ • Dizi • Consol I/O • String • Comment • Akış kontrol • Temel veri tipleri • Operatörler ve İşlem Sırası • Lab Tek class (+ dizi + String) ile program yazabilir hale geldik meraklisina.com 51 Kaynaklar • The Java Programming Language, 3e Arnold, Gosling, Holmes Addison-Wesley, 2000 • The Java Tutorial Object-Oriented Programming for the Internet Campione, Walrath Addison-Wesley, 1996 • The Java Tutorial, 3e A Short COurse on the Basics Campione, Walrath Addison-Wesley, 2001 • Java How to Program, 4e Dietel & Dietel Prentice Hall, 2002 • www.java.sun.com/docs/books/tutorial meraklisina.com 52