• Tidak ada hasil yang ditemukan

Bilge adam java.pdf

N/A
N/A
Protected

Academic year: 2021

Membagikan "Bilge adam java.pdf"

Copied!
228
0
0

Teks penuh

(1)YAZILIM VE VERİTABANI. C# ve T-SQL Geliştiriciler için Java ve Oracle Yalçın Kaya. Editör C. Banu Üçüncüoğlu. 19-0.

(2) C# ve T-SQL Geliştiriciler için Java ve Oracle Yalçın Kaya. Editör: C. Banu Üçüncüoğlu Kapak Tasarımı: Melih Sancar Grafik Tasarım: Tuna Erkan Grafik Uygulama: Soner Işık Genel Yayın Yönetmeni: Mehmet Çömlekçi. 1. Basım: Şubat 2008 Bilge Adam Yayınları: 21 Eğitim Yayınları Dizisi: 21 ISBN: 978-605-5987-19-0. Copyright © 2007, Bilge Adam Bilgisayar ve Eğitim Hizmetleri San. ve Tic. A.Ş. Eserin tüm yayın hakları Bilge Adam Bilgisayar ve Eğitim Hizmetleri San. ve Tic. A.Ş.’ye aittir. Yayınevinden yazılı izin alınmadan kısmen ya da tamamen alıntı yapılamaz, hiçbir şekilde kopya edilemez, çoğaltılamaz ve tekrar yayımlanamaz. Bilge Adam’ın öğrencilerine ücretsiz armağanıdır, para ile satılamaz.. Bilge Adam Bilgisayar ve Eğitim Hizmetleri San. ve Tic. A.Ş. 19 Mayıs Mahallesi, 19 Mayıs Caddesi, UBM Plaza, No: 59-61, Kat: 4-7; Şişli, İstanbul Telefon: (212) 272 76 00 – (212) 217 05 55 Faks: (212) 272 76 01 www.bilgeadam.com - info@bilgeadam.com. Tanıtım nüshasıdır, para ile satılamaz..

(3) İçindekiler Java’ya Giriş��������������������������������������������������������������������������������������������������������������������������������3 Java Nedir?����������������������������������������������������������������������������������������������������������������������������� 3 Windows Ortamında Java Kurulumu������������������������������������������������������������������������������3 Java Uygulamaları Nasıl Çalışır?�������������������������������������������������������������������������������������������� 7 Basit Veri Tipleri���������������������������������������������������������������������������������������������������������������������� 9 Ondalıklı Tipler�������������������������������������������������������������������������������������������������������������11 Mantıksal Tip����������������������������������������������������������������������������������������������������������������11 Karakter Tipi�����������������������������������������������������������������������������������������������������������������11 Aritmetik İşlemler ve Taşma�����������������������������������������������������������������������������������������11 Java’da Operatörler��������������������������������������������������������������������������������������������������������������� 14 Kaydırma (Shift) İşlemleri���������������������������������������������������������������������������������������������15 İşlemlerde Parantez Kullanımı�������������������������������������������������������������������������������������16 Karar Vermek ve Koşullu İfadeler��������������������������������������������������������������������������������16 Döngüler�������������������������������������������������������������������������������������������������������������������������������������23 While Döngüsü���������������������������������������������������������������������������������������������������������������������� 23 do Döngüsü��������������������������������������������������������������������������������������������������������������������������� 24 for Döngüsü��������������������������������������������������������������������������������������������������������������������������� 24 break ve continue Deyimleri������������������������������������������������������������������������������������������������� 25 Niteleyiciler (Modifiers)�������������������������������������������������������������������������������������������������������������29 Access Modifiers (Erişim Niteleyicileri)���������������������������������������������������������������������������������� 29 Niteleyicilerde Metod Ezme (Access Modifiers Overriding) ����������������������������������������30 Diğer Niteleyiciler ��������������������������������������������������������������������������������������������������������30 Casting ve Conversion�������������������������������������������������������������������������������������������������������������35 Basit Tiplerde Conversion����������������������������������������������������������������������������������������������������� 36 Basit Tiplerde Conversion: Atama��������������������������������������������������������������������������������36 Basit Tiplerde Conversion: Metod Çağırma�����������������������������������������������������������������38 Basit Tiplerde Conversion: Aritmetik Yükseltme ���������������������������������������������������������38 Basit Tiplerde Casting��������������������������������������������������������������������������������������������������39 Referans Tiplerde Conversion ���������������������������������������������������������������������������������������������� 40 Referans Tiplerde Conversion: Atama ������������������������������������������������������������������������40 Referans Tiplerde Csonversion: Metod Çağırma ��������������������������������������������������������41.

(4) IV. İçindekiler. Yapısal Programlama����������������������������������������������������������������������������������������������������������������45 Yapısal Programlama Nedir?������������������������������������������������������������������������������������������������ 45 Nesne Yönelimli Programlamanin Temel Bileşenleri���������������������������������������������������45 Nesne Yönelimli Programlamanın Temel Kavramları����������������������������������������������������������� 51 Kapsülleme (Encapsulation) ���������������������������������������������������������������������������������������51 Swing������������������������������������������������������������������������������������������������������������������������������������������67 Swing’e Giriş������������������������������������������������������������������������������������������������������������������������� 67 JButton�������������������������������������������������������������������������������������������������������������������������68 JLabel���������������������������������������������������������������������������������������������������������������������������69 JTextField���������������������������������������������������������������������������������������������������������������������70 Event Handling Mekanizması���������������������������������������������������������������������������������������71 JTextArea���������������������������������������������������������������������������������������������������������������������74 JOptionPane����������������������������������������������������������������������������������������������������������������75 JCheckBox�������������������������������������������������������������������������������������������������������������������77 JRadioButton����������������������������������������������������������������������������������������������������������������79 JComboBox������������������������������������������������������������������������������������������������������������������81 JList �����������������������������������������������������������������������������������������������������������������������������83 Mouse Event’lerinin Yönetilmesi:���������������������������������������������������������������������������������89 Klavye Event’lerinin Yönetilmesi������������������������������������������������������������������������������������������� 94 JDBC�����������������������������������������������������������������������������������������������������������������������������������������103 Veritabanı Bağlantısının Kurulması������������������������������������������������������������������������������������� 108 Veri Değiştirme Komutları (insert, update, delete)�������������������������������������������������������������� 109 Veri Sorgulama Komutları (Select)�������������������������������������������������������������������������������������� 110 Parametreli SQL İfadelerinin Çalıştırılması����������������������������������������������������������������112 Stored Procedure’lerin Çalıştırılması�������������������������������������������������������������������������113 JSP��������������������������������������������������������������������������������������������������������������������������������������������123 JSP Teknolojisinde Kullanılan Etiketler������������������������������������������������������������������������������� 128 JSP Direktifleri������������������������������������������������������������������������������������������������������������128 JSP Script Etiketleri����������������������������������������������������������������������������������������������������129 Form Verilerinin Kullanılması���������������������������������������������������������������������������������������������� 129 Durum Yönetimi ������������������������������������������������������������������������������������������������������������������ 131 JAVA I/O ����������������������������������������������������������������������������������������������������������������������������������143 Dosyalar ve Dizinler ����������������������������������������������������������������������������������������������������������� 143.

(5) İçindekiler. FilterInputStream Sınıfları������������������������������������������������������������������������������������������145 FileInputStream ve FileOutputStream Sınıflarının Kullanımı�������������������������������������146 Reader ve Writer Sınıfları: �����������������������������������������������������������������������������������������150 Standart Giriş-Çıkış Biriminin Kullanılması:���������������������������������������������������������������154 Java ile Ağ Programlama: �������������������������������������������������������������������������������������������������� 155 Oracle Veritabanı Ailesi����������������������������������������������������������������������������������������������������������161 Oracle Üzerinde Uygulama Geliştirme�������������������������������������������������������������������������������� 161 Oracle Veri Tabanı Sisteminin Kurulması������������������������������������������������������������������161 Tablespace�����������������������������������������������������������������������������������������������������������������167 Undo Tablespace�������������������������������������������������������������������������������������������������������167 Oracle’da Veri Tabanı Oluşturmak�����������������������������������������������������������������������������168 Temel Veri Tipleri�������������������������������������������������������������������������������������������������������179 Oracle’da Kullanıcı Yönetimi ve Güvenlik������������������������������������������������������������������179 Oracle Üzerinde Programlama�����������������������������������������������������������������������������������������������185 PL/SQL Nedir?�������������������������������������������������������������������������������������������������������������������� 185 SQL Plus��������������������������������������������������������������������������������������������������������������������185 TOAD�������������������������������������������������������������������������������������������������������������������������187 PL/SQL ile Programlama�������������������������������������������������������������������������������������������189 PL/SQL’de Kontrol Yapıları����������������������������������������������������������������������������������������191 PL/SQL’de Alfanümerik Tipler������������������������������������������������������������������������������������201 PL/SQL’de Mantıksal Tipler���������������������������������������������������������������������������������������207 PL/SQL’de Tarih ve Zaman Tipleri�����������������������������������������������������������������������������207 Referans Tipleri����������������������������������������������������������������������������������������������������������213 LOB (Large Object) Tipleri�����������������������������������������������������������������������������������������216 PL/SQL’de Döngü Yapıları�����������������������������������������������������������������������������������������216. .

(6)

(7) 1. Java’ya Giriş.

(8) 1 Java’ya Giriş • Java Nedir? • Java Uygulamaları Nasıl Çalışır? • Basit Veri Tipleri • Java’da Operatörler.

(9) Java’ya Giriş Bölüm Hedefleri: . Java platformu üzerinde Java diliyle basit uygulamalar yazmak.. . Temel veri tiplerini tanımak.. Java Nedir? Java, işlemci mimarisinden ve işletim sisteminden bağımsız olarak tasarlanmış bir platformdur. Aynı zamanda da bu platform üzerinde uygulama geliştirilen dilin adıdır. Microsoft .NET platformuyla karşılaştırdığımızda .NET platformuna karşılık gelen yapının adı Java olduğu gibi C# .NET, Visual Basic .NET gibi .NET dillerine karşılık gelen dilin adı da Java’dır. Bu açıklamadan anlaşılacağı gibi Microsoft .NET platformundan farklı olarak Java platformunda uygulama geliştirilebilecek tek dil vardır. Java platformu pek çok yönden Microsoft .NET platformuna benzediği gibi Java dili de yetenekleri bağlamında C# diline çok benzer. Java platformu da Microsoft .NET platformu ve modern nesne yönelimli diller gibi geniş bir sınıf kütüphanesine sahiptir. Yine .NET platformuna benzer olarak bir Java uygulamasının çalışması için doğrudan işletim sistemi kullanılmaz. Bu sebeple bir Java uygulaması, işletim sistemine ve mimari platforma göre geliştirilmiş olan JVM (Java Virtual Machine) aracılığıyla çalıştırılır. Java ile uygulama geliştirme için kullanılan ortamlar (IDE – Integrated Development Environment), .NET için kullanılan ortamlara göre çok daha fazla sayıdadır ve kolaylık olarak farklılık gösterir. Yaygın olarak kullanılan bütünleşik geliştirme ortamlarından (IDE) biri Eclipse’tir. Eclipse’i http:// www.eclipse.org adresinden indirebilirsiniz. Kitaptaki örnekleri gerçekleştirmek için herhangi bir bütünleşik geliştirme ortamı indirmenize gerek yoktur, bütün örnekleri Windows üzerinde Notepad ya da herhangi bir metin editörü ile gerçekleştirebilirsiniz.. Windows Ortamında Java Kurulumu Java platformunu Windows işletimi üzerinde kurmak ve uygulamaları yazabilir hale gelmek için öncelikle Java Development Kit’i (JDK) bilgisayarınızda kurmalısınız. JDK’nın sürümlerini http:// www.javasoft.com adresinden indirebilirsiniz. İndirdiğiniz dosyayı Windows’un tüm sürümlerinde kurabilirsiniz. Kurulumu gerçekleştirdikten sonra Windows ortamında çevre değişkenleri (environment variables) üzerinde işlem yapmamız gerekir. Komut satırında herhangi bir noktadan derleme ve çalıştırma programlarını kullanabilmek için Path değişkenine Java’yı kurduğumuz dizinin içindeki bin dizinini eklemelisiniz..

(10) . Bölüm 1. Uygulama 1.1: Windows XP: 1� Şekil 1’de gösterilen, Bilgisayarım (My Computer) ikonunu sağ tıklayın. Açılan menüde Özellikler (Properties) öğesini seçin.. Şekil 1. 2. Şekil 2’de gösterildiği gibi, açılan pencerede Gelişmiş (Advanced) sekmesini tıklayın. 3� Şekil 2’de gösterildiği gibi, gelen pencerede Çevre Değişkenleri (Environment Variables) butonuna tıklayın.. Şekil 2. 4. Şekil 3’te gösterilen, Sistem Değişkenleri (System Variables) içinde Path’i bulun ve en sonuna “;” ekleyin..

(11) Java’ya Giriş. Şekil 3. 5. Şekil 4’te olduğu gibi, sonuna da <Java’yi kurduğunuz yer>\<JDKxxx>\bin yazın.. şekil 4. Windows Vista: 1� Şeki 5’daki gibi, Bilgisayarım (My Computer) ikonunu sağ tıklayın. Açılan menüde Özellikler (Properties) öğesini seçin.. Şekil 5. .

(12) . Bölüm 1. 2. Şekil 6’de gösterilen, Tasks bölümünden Advanced System Settings link’ine tıklayın.. Şekil 6. 3� Şekil 8’de gösterildiği gibi, gelen pencerede Çevre Değişkenleri (Environment Variables) butonuna tıklayın.. Şekil 7.

(13) Java’ya Giriş. 4. Şekil 8’da gösterildiği gibi, Sistem Değişkenleri (System Variables) içinde Path’i bulun ve en sonuna “;” ekleyin.. Şekil 8. 5. Şekil 9’daki gibi, sonuna da <Java’yi kurduğunuz yer>\<JDKxxx>\bin yazın.. Şekil 9. Java Uygulamaları Nasıl Çalışır? Bir Java uygulamasının makinenizde çalışması için JVM’in kurulu olması gerekir. JVM Microsoft .NET platformunun IL (Intermediate Language - MSIL) üzerinden çalışması mantığına benzer bir mantıkla çalışır. Java tarafında IL’e karşılık gelen yapı bytecode’dur. JVM sadece bytecode üzerinden çalışır. Bu sebeple yazmış olduğunuz Java kaynak kodunu öncelikle Java derleyicisiyle derleyerek bytecode’a çevirmelisiniz. Bununla birlikte dikkat edilmesi gereken bir nokta da bir Java sınıfının derlenebilmesi için kaynak kodu tutan .java uzantılı dosyanın adının, içindeki public sınıfın adıyla aynı olması gerektiğidir. Örnek Uygulama 1.1: 1 public class IlkJavaUygulamasi 2 { 3 . public static void main( String[] args). 4 . {. 5 . 6 . }. 7 }. System.out.println(“Ilk Java Uygulamasi”);. .

(14) . Bölüm 1. İşlem adımları: Örnekleri kolaylık açısından Windows’ta oluşturacağınız bir dizin içinde toparlamanız faydalı olacaktır. 1� Yukarıdaki kodu herhangi bir metin editöründe yazın ve “IlkJavaUygulamasi.java” adıyla kaydedin. 2. Command Prompt’u açın. 3� Dosyayı kaydettiğiniz dizine girin. 4. javac IlkJavaUygulamasi.java ifadesini çalıştırın. 5. Eğer hata almazsanız IlkJavaUygulamasi.class dosyasının kaynak kodla aynı yerde oluştuğunu görmelisiniz. 6. Java IlkJavaUygulamasi ifadesini çalıştırdığınızda komut satırında “Ilk Java Uygulamasi” ifadesini görmelisiniz. Uygulamanın açıklaması: 1 numaralı satırda C#’ta olduğu gibi IlkJavaUygulamasi adında bir sınıf tanımlanır. Java dilinde de, C#’ta olduğu gibi kod blokları sınıfların içinde yer almalıdır. 2 numaralı ve 4 numaralı satırlarda “{“ (küme parantezi, curly brace) işareti aynen C#’ta olduğu gibi blok başı işaretidir. 2 numaralı satırdaki “{“ sınıf için tanımlanan bloğun başlangıcıyken 4 numaralı satırdaki “{“ işareti de main metodunun başlangıcıdır. 6 numaralı ve 7 numaralı satırlardaki “}” işareti blok sonu işaretidir. 6 numaralı satırdaki “}” işareti main bloğunun sonuyken, 7 numaralı satırdaki “}” işareti sınıf için açılan bloğun sonudur. Blok başı ve blok sonu ifadelerinde dikkat etmeniz gereken en önemli nokta son açılan blok her zaman ilk kapatılan bloktur ve her açılan blok mutlaka kapatılmalıdır. 3 numaralı satırda aynen C#’ta olduğu gibi main metodunun tanımını görebilirsiniz. public static void ifadelerinin anlamları C# ile aynı olmakla birlikte daha sonra detaylı olarak incelenecektir. Main metodunun parametresi olan String[] args de metodun parametre olarak bir String dizisi aldığını belirtir. Main metodu, Java’da da konsol uygulamalarının otomatik olarak çalışan ilk metodudur. 5 numaralı satırda main metodu çalıştığında ne yapacağını gösterir. System.out.println(); ifadesi C#’taki Console.WriteLine() ifadesine karşılık gelir. Burada System.out standart çıktı birimini temsil eder. Varsayılan olarak kullandığınız ekrandır. println() metodu, kendisine parametre olarak verilen ifadeye yazar ve sonundaki “ln” (line) kısmından dolayı bir satır aşağıya geçer. İfadenin sonundaki “;” işareti Java’da da C#’taki her ifadenin sonunda mutlaka bulunması gereken satır sonlandırıcısıdır. Bu basit uygulamaya bakarak C# dili ile Java dilinin birbirine pek çok noktada benzediğini görebilirsiniz. Bundan sonraki pek çok aşamada C# dili ile Java dili arasındaki benzerliklere tanık olacaksınız. İlk uygulamada konsola System.out.println() yazdırdığımız ifadeyi bir mesaj kutusunda yazdırmak istersek bir miktar değişiklik yapmamız gerekecektir. Örnek Uygulama 1.2a: 1 public class MesajKutusu 2 { 3 public static void main( String[] args) 4 { 5 6 } 7 }. javax.swing.JOptionPane.showMessageDialog(null, “Ilk Java Uygulamasi”);.

(15) Java’ya Giriş. Uygulamanın açıklaması: Bu uygulamanın 5 numaralı satırı dışındakiler önceki uygulamadan farklı değildir. 5 numaralı satırda da C#’taki MessageBox.Show() metodunun Java’daki benzeri olan JoptionPane.showMessageDialog() metodu kullanılmıştır. Bu kodun başındaki javax.swing de JOptionPane sınıfının içinde bulunduğu pakettir. Java’daki paketleri .NET’teki assembly’ler gibi düşünebilirsiniz. Dolayısıyla C#’taki using ifadesinin karşılığı olarak import ifadesini kullanarak kodumuzu aşağıdaki şekilde güncelleyebiliriz. Örnek Uygulama 1.2b: 1 import javax.swing.JOptionPane; 2 public class MesajKutusu 3 { 4 . public static void main( String[] args). 5 . {. 6 . 7 . }. JOptionPane.showMessageDialog(null, “Ilk Java Uygulamasi”);. 8 } Bu örnekte 1 numaralı satırdaki import ifadesi javax.swing paketindeki JOptionPane sınıfının yüklenmesini sağlar. Bir kere yüklendikten sonra tekrar paket adının kod içinde kullanmamıza gerek kalmaz. Burada yapılan yükleme işlemi, .NET’teki gibi, yüklenen paketin içerdiği kodu, oluşturulan .class dosyasının içine eklemez, sadece o pakete erişimi sağlayacak kodu oluşturur. Uygulama 1.2b’deki 6 numaralı satırda JOptionPane sınıfının showMessageDialog metodunun ilk parametresi swing paketinin detaylarına gelene kadar sürekli null olarak kullanılacaktır. 2. parametre de tahmin edebileceğiniz gibi mesaj kutusunda yazdırılacak ifadedir.. Java’da comment’lerin kullanımı C# ile aynıdır. // Satır comment. /* */ Blok comment.. Basit Veri Tipleri Java’daki basit (primitive) veri tipleri .NET’teki basit veri tipleriyle çok benzerdir. Herhangi bir veri tipinin tanımlanması C#’takinden farklı değildir. Bununla birlikte Java’daki sayısal tiplerin hepsi işaretlidir (signed – hem negatif hem de pozitif sayıları tutar), işaretsiz veri tipi yoktur. Öncelikle tam sayısal veri tiplerinden başlayalım: byte: Adından da anlaşılabileceği gibi 1 byte’lık, tam sayı tutan veri tipidir. C#’ta sbyte’a, .NET CTS’te System.SByte’a karşılık gelir. Herhangi bir byte değişken tanımlaması aşağıdaki şekillerde yapılabilir: byte yas; //ilk değer verilmeden. byte yas = 67; //ilk değer verilerek. short: 2 byte’lık, tam sayı tutan veri tipidir. C#’ta short’a, .NET CTS’te System.Int16’ya karşılık gelir. Herhangi bir short değişken tanımlaması aşağıdaki şekillerde yapılabilir: short derinlik; //ilk değer verilmeden. short derinlik = 23245; //ilk değer verilerek. int: 4 byte’lık, tam sayı tutan veri tipidir. C#’ta int’e, .NET CTS’te System.Int32’ye karşılık gelir. Herhangi bir int değişken tanımlaması aşağıdaki şekillerde yapılabilir:. .

(16) 10. Bölüm 1. int sayi; //ilk değer verilmeden. int sayi = 12; //ilk değer verilerek. long: 8 byte’lık, tam sayı tutan veri tipidir. C#’ta long’a, .NET CTS’te System.Int64’e karşılık gelir. Herhangi bir long değişken tanımlaması aşağıdaki şekillerde yapılabilir: long GNP; //ilk değer verilmeden long GNP = 1234567890; //ilk değer verilerek Bunların dışında basit veri tipi olmamakla birlikte şu aşamada bilmeniz gereken bir veri tipi daha var: String. String tipi referans üzerinden çalışan bir veri tipidir. Yani, aslında basit veri tiplerinden farklı olarak bir nesne üzerinden çalışırlar; fakat tanımlaması şu ana kadar bahsedilen veri tiplerinden farklı değildir. String’in detaylarına ilerleyen bölümlerde değineceğiz. Burada dikkat etmemiz gereken nokta Java’da küçük harf “s” ile başlayan string tanımının olmamasıdır. Herhangi bir String veri tanımlaması aşağıdaki şekillerde yapılabilir: String Ad; //ilk değer verilmeden String Ad = “Yalcin”; //ilk değer verilerek Artık kullanıcıdan 2 sayı alıp bunları matematiksel herhangi bir işlem içinde kullanabilecek hemen her şeye sahibiz. Tek eksiğimiz bu sayıları kullanıcıdan nasıl alacağımız. Matematiksel işlemlerin nasıl yapıldığına gelirsek, ileride farklılıklarına değineceğemizi belirterek C#’taki yazılışlarından şu an için hiçbir farkı yoktur diyebiliriz. Şimdi bunu örnekleyelim: Örnek Uygulama 1.3: 1 import javax.swing.JOptionPane; 2 public class MesajKutusu 3 { 4 . public static void main( String[] args). 5 . {. 6 . String birinciSayi, ikinciSayi;. 7 . int toplam, sayi1, sayi2;. 8 . birinciSayi = JOptionPane.showInputDialog(“Birinci sayiyi giriniz:”);. 9 . ikinciSayi = JOptionPane.showInputDialog(“Ikinci sayiyi giriniz:”);. 10. sayi1 = Integer.parseInt(birinciSayi);. 11. sayi2 = Integer.parseInt(ikinciSayi);. 12. toplam = sayi1 + sayi2;. 13. JOptionPane.showMessageDialog(null, toplam);. 14. }. 15} Kod Açıklaması: 6 numaralı satırda String tipinde 2 değişken tanımlanmıştır. Unutmayın ki bu 2 değişken de basit veri tipi değil referans tipli değişkenlerdir. Bu değişkenler JOptionPane sınıfının showInputDialog metodunun döndürdüğü değerleri tutmak için kullanılmıştır. 7 numaralı satırda 3 tane tam sayı tanımlanmıştır. toplam adlı değişken JOptionPane.showInputDialog() metoduyla aldığımız değerlerin sayıya dönüştürülmüş hallerini toplamak için kullanılmıştır. sayi1 ve sayi2 değişkenleri de JOptionPane.showInputDialog() metoduyla aldığımız.

(17) Java’ya Giriş. değerlerin sayıya dönüştürülmüş hallerini tutacaktır. 8 ve 9 numaralı satırlarda JOptionPane. showInputDialog() metodlarıyla, yukarıda tanımladığımız String’lerin içine, kullanıcının gireceği değerler alınmaktadır. Burada dikkat etmemiz gereken nokta, rakamlar dışında değerler girdiğimizde 10 ve 11 numaralı satırlarda dönüştürme hatasıyla karşılaşma durumumuzdur. Bu satırlarda kullanıcı tarafından girilmiş olan String’ler Integer sınıfının parseInt() aracılığıyla int’e çevrilmeye çalışılır. Integer sınıfı .NET’teli System.Int32 sınıfına karşılık gelen sınıftır ve terimsel olarak wrapper class olarak geçer. parseInt() metodu da Int32 sınıfının Parse() metoduyla aynı şekilde çalışır. Eğer kendisine gönderilen parametre int’e çevrilemiyorsa “NumberFormatException” oluşturur. Bunun için de C#’taki gibi istisna yönetimi (exception handling), yani try-catch-finally bloklarını kullanabiliriz. 10 ve 11 numaralı satırlarda eğer herhangi bir exception oluşmazsa, yani bir int’in alabileceği değer aşılmazsa 12 numaralı satır çalışır. Eğer 2 değerin toplamı bir int’in alabileceği en büyük değeri aşıyorsa toplam değişkeninin alacağı değer negatif bir sayıya dönecektir. Çünkü Java, C geleneğinden dolayı sayıları kontrol etmez. Bu durumu daha küçük bir tam sayı tipi olan byte üzerinden Uygulama 1.4’te açıklayacağım. 13 numaralı satırda bir önceki örnekte kullandığımız JOptionPane.showMessageDialog() metoduyla toplam değişkeninin değerini yazdırıyoruz. Sınıf adıyla kullanılması sebebiyle showMessageDialog() metodunun JOptionPane sınıfının static bir metodu olduğunu anlayabilirsiniz.. Ondalıklı Tipler double: 8 byte’lık ondalıklı veri tipidir. Tanımlandığı standart (IEEE 754) çerçevesinde yüksek doğruluk isteyen işlemlerde kullanılmamalıdır; ancak ondalıklı kısımda yüksek yoğunluk çok önemli değilse kullanılabilir. C#’ta float’a, .NET CTS’te System.Single’a karşılık gelir. float: 4 byte’lık ondalıklı veri tipidir. Hem tanımlandığı standart çerçevesinde hem de double veri tipine göre daha küçük bir veri tipi olması sebebiyle yüksek doğruluk isteyen işlemlerde kullanılmamalıdır; ancak ondalıklı kısımda yüksek yoğunluk çok önemli değilse kullanılabilir. Eğer bellek yetersizliği ile ilgili bir problem yoksa float yerine double tercih edilmelidir. C#’ta double’a, .NET CTS’te System.Double’a karşılık gelir. Her 2 ondalıklı veri tipinin yerine java.math paketinde bulunan BigDecimal sınıfı kullanılabilir.. Mantıksal Tip boolean: true ya da false değerlerinde birini taşıyabilen basit veri tipidir. Taşıdığı veri sadece 1 bit ile gösterilebiliyor olsa da kapladığı alan 1 bit değildir. C#’ta bool’a, .NET CTS’te System.Boolean’a karşılık gelir.. Karakter Tipi char: 2 byte’lık Unicode karakter olarak herhangi bir karakter bilgisini tutmak için kullanılır. C ailesi geleneğinden dolayı işaretsiz tam sayısal veri tipi olarak değerlendirilebilir. C#’ta char’a, .NET CTS’te System.Char’a karşılık gelir.. Aritmetik İşlemler ve Taşma Java’da tam sayısal aritmetik işlemler, işleme giren değerlerin tipleri eğer birer int değilse int’e dönüştürülerek yapılır. Eğer işleme giren tiplerden en az biri long ise long’a dönüştürülerek yapılır. Eğer tipler ondalıklı ise işlemler, işleme giren tipler double’a dönüştürülerek yapılır. Dolayısıyla aşağıdaki örnekleri dikkatle incelemek gereklidir:. 11.

(18) 12. Bölüm 1. Örnek Uygulama 1.4a: 1 public class TipDonusumleri1 2 { 3 . public static void main( String[] args). 4 . {. 5 . byte sayi1 = 120;. 6 . byte sayi2 = 110;. 7 . byte toplam = sayi1 + sayi2;. 8 . }. 9 } Bu örnekte 7 numaralı satırda sayi1 + sayi2 ifadesi, işlem int üzerinden yapıldığından çalışacaktır; ancak toplam değişkeninin tipi byte olduğu için derlenemeyecektir ve possible loss of precision (değer kaybı ihtimali) hatası verecektir. Bunun sebebi toplanan byte tipindeki değişkenlerin değerlerinin toplamının, byte tipindeki bir alana sığmaması değildir. (120 + 110 = 230, byte tipinin alabileceği en büyük değer ise 127’dir). Bunu sayi1’in değerini 12, sayi2’nin değerini 11 yaparak görebilirsiniz. Possible loss of precision hatasını bu durumda da alacaksınız. (12 + 11 = 23, byte tipinin içine sığar). Dolayısıyla bu hatanın sebebi, sayi1 + sayi2 işleminin int üzerinden yapılmasıdır. Bunu anlamak için 7 numaralı satırda tanımlanan toplam değişkeninin tipini byte’tan short’a çevirip tekrar derleyerek de görebilirsiniz. Bu durumda 120 ile 110’un toplamı olan 230 değeri short tipine sığacak bir değer olmasına rağmen possible loss of precision hatasını yine alırsınız; ancak toplam değişkeninin değerini int ya da long yaparak bu hatadan kurtulabilirsiniz. Uygulama 1.4a örneği üzerinde düşündüğümüzde yapılan işlem anormal gelmemelidir. Çünkü burada 2 tane byte tipli değişkenin toplamının değerinin byte tipine sığmaması ihtimali yüksektir. Bu durumda, eğer bu işlemi byte tipi üzerinden gerçekleştirmek istersek ne yapmalıyız? Bunun cevabını da Uygulama 1.4b’de görebilirsiniz. Örnek Uygulama 1.4b: 1 public class TipDonusumleri2 2 { 3 . public static void main( String[] args). 4 . {. 5 . byte sayi1 = 12;. 6 . byte sayi2 = 11;. 7 . byte toplam = (byte)(sayi1 + sayi2);. 8 . System.out.println(toplam);. 9 . }. 10} Örnek Uygulama 1.4b’de 7 numaralı satırda yaptığımız işlem bir explicit cast (göstererek dönüştürme) işlemidir. Uygulama 1.4a’da int’e dönüştürme ise implicit cast (gizli dönüştürme) işlemi olarak adlandırılır. Daha sonra bu işlemleri farklı isimlerle tekrar değerlendireceğiz. Burada sayi1 + sayi2 işlemi önce yine int üzerinden yapılır ve sonra byte’a dönüştürme yapılır. Bu şekilde 12 ile 11’in toplamı olan 23 değerini byte olarak elde edebilirsiniz. Buraya kadar herşey güzel; ancak bu noktada Uygulama 1.3’deki taşma problemimize geri dönelim ve 5 ve 6 numaralı satırlarda tanımladığımız byte tipli değişkenlerimizin değerlerini sırasıyla 120 ve 110 yapalım. Yeni değerlerin her ikisi de byte tipine sığabilirler; fakat toplamları olan 230 değeri byte tipine.

(19) Java’ya Giriş. sığmaz. Java uygulaması bu durumda hata vermeyecektir ve 8 numaralı satırdaki System.out. println()’den dolayı konsola -26 yazacaktır. Bunu detayıyla şu şekilde açıklayabiliriz: Bildiğiniz gibi güncel bilgisayar sistemleri 2’lik (binary) sistemle çalışırlar, yani herşey 1 ve 0 ile ifade edilir. Dolayısıyla sayi1 ve sayi2 değişkenlerimizin 2’lik sistemdeki karşılıkları şu şekildedir: sayi1 = 120 = (01111000)2 sayi2 = 110 = (01101110)2 Sayıların 2’lik sistemdeki karşılıklarının başındaki 0, byte tipinin 1 byte’lık yani 8 bitlik olmasından dolayı sayıyı 8 bite tamamlamak içindir; ancak en başa eklediğimiz bu 0’ın taşıdığı çok daha farklı bir anlam vardır, Bu ilk değer sayının pozitif ya da negatif olmasını belirler. Eğer 0 ise arkasından gelen tüm bitler pozitif sayıya göre yorumlanacaktır, eğer 1 ise negatif sayıya göre yorumlanacaktır. Şimdi de sayıları toplayalım: sayi1 + sayi2 = 120 + 110 = 230 sayi1 + sayi2 = (01111000)2 + (01101110)2 = (11100110)2 toplam = (11100110)2 Az önce bahsettiğimiz işaret biti durumundan dolayı 2’lik sayının en başındaki değer olan 1, gerisindeki 7 bitin negatif sayıya göre yorumlanacağını gösterir. Dolayısıyla Java’da tamsayıların tümünde sayı değeri en soldaki bitin pozitif ya da negatif olması durumu netleştikten sonra ortaya çıkar. Örnek olarak şu sayıları ele alalım: 5 = (00000101)2 En baştaki 0 sayının pozitif olduğu anlamına gelir. Devamındaki 0000101’de de ilk 1’e kadar olan 0’ların bir anlamı yoktur. Böylece elimizde (101)2 kalır. Bunun da karşılığı 10’luk sistemde 5’tir. Açılımı ise şu şekildedir. 1 x 20 = 1 0 x 21 = 0 1 x 22 = 4 1 + 0 + 4 = 5 Bu noktadan sonra eğer sayımız negatif ise durumun değiştiğini göreceğiz. Örnek olarak -1’i ele alacağız. Eğer 1 = (00000001)2 ise; -1 = (11111110)2 + (00000001)2’dir. Yani (11111111)2’dir. Bu yönteme 2’nin tamlayanı yöntemi denir. (11111110)2 de (00000001)2’nin bire tamlayanıdır. Burada niçin bu kadar dolandırılmış diye düşünebilirsiniz; ancak unutmayın ki gündelik hayatta kullandığımız gibi bir “-” işaretine sahip değiliz. Bu durumu -1 ile 1’i toplayarak deneyelim: (00000001)2 + (11111111)2 = (100000000)2 Elimizde 9 bitlik bir veri oluştu; ancak byte veri tipi 8 bitlik bir veri tipiydi. Bu durumda en baştaki 1 değeri hiçbir değerlendirmeye katılmadan son 8 bit değerlendirilir; yani (00000000)2 değeri kullanılır. Burada ilk bit 0 olduğu için sayı pozitiftir diyebiliriz. Geri kalan 7 bit de 0 olduğu için sayı 10’luk sistemdeki 0’a karşılık gelir. Bu durumda aklınıza takılabilecek olan soru 0’ın pozitifliği ya da negatifliği olabilir. 0 sayısı matematikte ne pozitif tam sayılar kümesinin ne de negatif tamsayılar kümesinin bir üyesidir; ancak programlama dillerinde 0 değeri pozitiftir.. 13.

(20) 14. Bölüm 1. Sonuç olarak bilgisayar için negatif bir sayının 2’lik sistemde nasıl yazıldığını bulmak istiyorsak şu şekilde bir işlem gerçekleştirmeliyiz: Sayıyı 2’lik sistemde pozitif olarak yazın. Oluşan sayıdaki 0’ları 1, 1’leri 0 yapın. Sayıya 2’lik sistemde 1 ekleyin. Örnek olarak -5’e ulaşmaya çalışalım: 5 = (00000101)2 1’ e tamlayan = (11111010)2 2’ye tamlayan = (11111011)2 Böylece Uygulama 1.4b’nin açıklamasında elde ettiğimiz (11100110)2 değerini irdeleyebilir duruma geldik. Yukarıdaki işlemi tersten yaptığınızda da sayıya ulaşabilirsiniz. (11100110)2 – (00000001)2 = (11100101)2 1’e tamlayan = (00011010)2 (00011010)2 = 26 Dolayısıyla elimizdeki sayı 10’luk sistemdeki -26’ya karşılık gelir. Bu detayları bilmemeniz halinde basit bir sayısal problem üzerinde çok zaman harcayabilirsiniz. Çünkü gördüğünüz şekilde Java aritmetik işlemlerde taşan sayılar için hata vermez.. Java’da Operatörler Java’da tipler üzerinde işlem yapmak için pek çok operatör bulunur. Bu operatörlerin çoğu C#’ta da aynı şekilde mevcuttur.. Öncelik Sırası Öne gelen (prefix). ++ifade, --ifade. Sona gelen (postfix). ifade++, ifade--. Tek ifade alan. +ifade, -ifade, ~, !. Çarpımsal. *, /, %. Toplamsal. +, -. Kaydırma. <<, >>, >>>. İlişkisel. <, >, <=, >=, instanceof. Eşitlik. ==, !=. Bit üzerinde (bitwise) VE (AND). &. Bit üzerinde özel VEYA (EX-OR). ^. Bit üzerinde VEYA (OR). |. Mantıksal VE (AND). &&. Mantıksal VEYA (OR). ||. Üçlü ifade alan (ternary) operatör. ?:. Atama. =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=.

(21) Java’ya Giriş. Gördüğünüz gibi Java’daki birkaç operatör dışında hemen hemen tüm operatörler C# ile aynıdır. Bit üzerinde işlem yapan operatörler kestirmeli (shortcut) operatörlerdir. Yani operandlarından (işleme giren değerlerinden) biri işlemin sonucunu kesin olarak ortaya koyuyorsa işlemin devamındaki operand değerlendirilmez. Örnek Uygulama 1.5a: 1 public class Operatorler1 2 { 3 . public static void main( String[] args). 4 . {. 5 . int sayi, sonuc;. 6 . sayi = 5;. 7 . sonuc = sayi++ + ++sayi;. 8 . System.out.println(sonuc);. 9 . System.out.println(sayi);. 10. }. 11} Bu uygulamada 8 ve 9 numaralı satırlar işlendiğinde ekranda yazacak değerlerin ne olduğunu ve 7 numaralı satırın nasıl işlediğine bakalım. 6 numaralı satırda sayi değişkeninin değeri 5 yapıldıktan sonra 7 numaralı satırda sonuc = sayi++ + ++sayi; ifadesi işletilmektedir. Bu satırı daha detaylı inceleyelim: sonuc = sayi++ + ++sayi; ifadesinde önce ++sayi ifadesi çalışacaktır ve sayi değişkenine 1 ekleyerek değerini 6 yapacaktır. Daha sonra sayi++ işlemeden sayi değeri ile artırılmış sayi değerleri toplanarak sonuc değişkenine atama yapılacaktır. Böylece 6 + 6 = 12 değeri sonuc değişkeninin değeri olur. Bu atama yapıldıktan sonra sayi değişkenine sayi++’dan dolayı tekrar 1 eklenecektir ve sayi değişkeninin değeri 7 olacaktır.. Kaydırma (Shift) İşlemleri Kaydırma işlemleri genellikle sistem programlama, oyun programlama gibi uzmanlık gerektiren alanlarda kullanılır. Değerimizi temsil eden 2’lik sayı sistemindeki değeri sağa ya da sola belirtilen bit sayısı kadar kaydırır ve kaydırılan alanlara 0 değerini koyar. İşaret bitiyle ilgili detayları da vardır. Bu sebeple bir örnekle gösterip detaylı olarak anlatmayacağım. Örnek Uygulama 1.5b: 1 public class Operatorler2 2 { 3 . public static void main( String[] args). 4 . {. 5 . int sayi;. 6 . sayi = 5;. 7 . sayi <<= 2;. 8 . System.out.println(sayi);. 9 . }. 10} Bu örnekte 7 numaralı satırda sayi değişkeninin bitleri 2 kademe sola kaydırılmaktadır. Bu işlem nasıl yapılıyor inceleyelim:. 15.

(22) 16. Bölüm 1. int 32 bit (4 byte) olduğu için 2’lik sayı sisteminde aşağıdaki gibi gösterilir. sayi = 5 = 00000000 00000000 00000000 00000101 Bu değer sola 1 bir kaydırıldığında; sayi = 0 00000000 00000000 00000000 00001010 = 10 değeri elde edilir. En baştaki 0 düşen bittir, ve en sondaki 101 değerleri sola kaydırılarak en sona da 1 tane 0 eklenmiştir. sayi <<= 2 ifadesi sola doğru 2 bitlik kaydırma işlemi olduğu için sayi 1 bit daha sola kaydırılmalıdır. sayi = 00 00000000 00000000 00000000 00010100 = 20 Böylece sayi değişkeninin değeri 20 olur. Dikkat ederseniz sola kaydırma 2 ile çarpma gibidir.. İşlemlerde Parantez Kullanımı Matematiksel ya da mantıksal işlemlerde parantezlerin içine alınan ifadelerin önceliği ilk sıraya çıkar. Matematik bilgimizden tek farkı kullandığımız tek işaretin sadece normal parantez olmasıdır, köşeli parantez ya da küme parantezi kullanılmaz. Örnek: Bu ifadeyi matematiksel olarak yazmak istediğimizde eğer; d = m * P / n * r * T; şeklinde yazarsak çarpma ve bölmenin önceliklerinin aynı olması sebebiyle işlem soldan sağa sırayla gerçekleşecektir. Böyle olunca m ile P çarpıldıktan sonra n ile bölünecek, bunun sonucu da r ile T’nin çarpımıyla çarpılacaktır. Oysa ifadenin gösterdiği m ile P’nin çarpımının n, r ve T’nin çarpımına bölünmesi şeklindedir. Bu sebeple bu matematiksel ifadeyi; d = m * P / (n * r * T); şeklinde yazmalıyız.. Karar Vermek ve Koşullu İfadeler Java’da da C#’taki gibi karar verme ve koşullu ifade yazmak için 2 ifade ve 1 operatör söz konusudur. Bunlar: 1� if...else 2. Üçlü ifade alan operatör (? :) 3� switch...case. if...else Yapısı if... else yapısı Java’da da aynen C#’taki gibi kullanılır. En basit yapısı sadece if’in kullanıldığı şeklidir. Koşullu ifadelerde dikkat edilmesi gereken nokta koşulun sonucunun true ya da false, yani boolean bir ifade üretmesi gerekliliğidir. Bu yönüyle C geleneğiyle farklılaşır..

(23) Java’ya Giriş. Örnek Uygulama 1.6a: 1 import javax.swing.JOptionPane; 2 public class Kosul1 3 { 4 . public static void main( String[] args). 5 . {. 6 . . int sayi1 = Integer.parseInt(JOptionPane. showInputDialog(“Birinci sayıyı giriniz”));. 7 . . int sayi2 = Integer.parseInt(JOptionPane. showInputDialog(“Ikinci sayıyı giriniz”));. 8 . if( sayi1 < sayi2). 9 . {. 10. JOptionPane.showMessageDialog(null, sayi1 +. . “ kucuktur “ + sayi2);. 11. }. 12. }. 13} 8 numaralı satırda yapılan karşılaştırmanın sonucu, yani sayi1 değişkeninin değerinin sayi2 değişkeninin değerinden küçük olma durumu true ya da false, daha genel bir ifadeyle boolean bir sonuç üretir. Eğer karşılaştırmanın sonucu true ise if bloğunun içi çalıştırılır, if bloğu sonlandığında da akış kaldığı yerden devam eder; aksi takdirde if bloğunun içi çalıştırılmadan programın akışı if bloğu yokmuş gibi çalışmaya devam eder. Koşullar gibi bir sonraki bölümde inceleyeceğimiz döngü ve tekrarlı yapılarda da kodun okunurluğunu artırmak için if bloğunun içi tek ifadeden oluşsa bile blok parantezlerini, tek ifade için şart olmamasına rağmen kullanmayı alışkanlık haline getirin. Örnek Uygulama 1.6b: 1 import javax.swing.JOptionPane; 2 public class Kosul2 3 { 4 . public static void main( String[] args). 5 . {. 6 . . int sayi1 = Integer.parseInt(JOptionPane. showInputDialog(“Birinci sayıyı giriniz”));. 7 . . int sayi2 = Integer.parseInt(JOptionPane. showInputDialog(“Ikinci sayıyı giriniz”));. 8 . if( sayi1 < sayi2). 9 . {. 10. JOptionPane.showMessageDialog(null, sayi1 +. . “ kucuktur “ + sayi2);. 11. }. 12. else if( sayi1 > sayi2). 13. {. 14. JOptionPane.showMessageDialog(null, sayi1 +. . “ buyuktur “ + sayi2);. 15. }. 16. }. 17}. 17.

(24) 18. Bölüm 1. Bu örnekteki çalışma şekli Uygulama 1.6a’dakiyle aslında aynı şekildedir. Eğer 8 numaralı satırdaki karşılaştırma true sonuç vermezse akış 12 numaralı satırdan devam edecektir. Bu blok da else bloğudur. else bloğu aslında if bloğundan sonraki akışın ilk parçasıdır. else bloğunda bir karşılaştırma daha yapılmaktadır. Bu karşılaştırmada da aynen 8 numaralı satırdaki if bloğu gibi bir çalışma mekanizması söz konusudur. Eğer karşılaştırma sonucu true ise else bloğu çalışır; aksi takdirde else bloğundan sonraki noktadan; yani 16 numaralı satırdan itibaren çalışma devam eder. Bu uygulamada, Örnek Uygulama1.6a’ya göre farklılaşan tek nokta eğer 8 numaralı satırdaki karşılaştırma true sonuç üretirse 12 numaralı satırdaki else bloğu, her ne kadar kendinden sonra gelen ilk ifade olsa da çalışmaz. Örnek Uygulama 1.6c: 1 import javax.swing.JOptionPane; 2 public class Kosul3 3 { 4 . public static void main( String[] args). 5 . {. 6 . . int sayi1 = Integer.parseInt(JOptionPane. . showInputDialog(“Birinci sayıyı giriniz”));. 7 . . int sayi2 = Integer.parseInt(JOptionPane. . showInputDialog(“Ikinci sayıyı giriniz”));. 8 . if( sayi1 < sayi2). 9 . {. 10. JOptionPane.showMessageDialog(null, sayi1 +. . “ kucuktur “ + sayi2);. 11. }. 12. else if( sayi1 > sayi2). 13. {. 14. JOptionPane.showMessageDialog(null, sayi1 +. . “ buyuktur “ + sayi2);. 15. }. 16. else. 17. {. 18. JOptionPane.showMessageDialog(null, sayi1 +. . “ esittir “ + sayi2);. 19. }. 20. }. 21} Bu uygulamada değişen tek nokta 16 numaralı satırdaki koşulu olmayan else bloğudur. Böylece sayi1 değişkenin değeri ile sayi2 değişkeninin değeri arasında yapılan karşılaştırmada durum ne olursa olsun, bir exception üretilmediği sürece, bu 3 bloktan birinin çalışması kesindir. 16 numaralı satırdaki else bloğunun çalışması için 8 ve 12 numaralı satırlardaki karşılaştırmalardan false üretilmesi gerekir. Bu örnekte bu durum 2 sayıyı karşılaştırırken, iki sayının birbirine eşit olması durumudur. Bu bloklardan hangisi çalışırsa çalışsın, akış 20 numaralı satırdan devam edecektir..

(25) Java’ya Giriş. Örnek Uygulama 1.6d: 1 import javax.swing.JOptionPane; 2 public class Kosul4 3 { 4 . public static void main( String[] args). 5 . {. 6 . . int sayi1 = Integer.parseInt(JOptionPane. . showInputDialog(“Birinci sayıyı giriniz”));. 7 . . int sayi2 = Integer.parseInt(JOptionPane. . showInputDialog(“Ikinci sayıyı giriniz”));. 8 . if( sayi1 < sayi2). 9 . {. 10. JOptionPane.showMessageDialog(null, sayi1 +. . “ kucuktur “ + sayi2);. 11. }. 12. else if( sayi1 < sayi2). 13. {. 14. JOptionPane.showMessageDialog(null, sayi1 +. . “ buyuktur “ + sayi2);. 15. }. 16. }. 17} Bu uygulamalarda göstermek istediğim durum 8 ve 12 numaralı satırlardaki karşılaştırmaların aynı olmasıdır. Bu durumda eğer 8 numaralı satırdaki karşılaştırma true üretirse 12 numaralı satır, aynı karşılaştırmayı yapmasına rağmen çalışmayacaktır. Eğer 8 numaralı satırdaki karşılaştırma false üretirse 12 numaralı satırdaki aynı karşılaştırma tekrar yapılacaktır ve doğal olarak o da false üreteceğinden else bloğu da çalışmayacaktır. Bunun da anlamı uygulamada durum ne olursa olsun hiçbir zaman else bloğunun çalışmayacağıdır. Sayısal karşılaştırmalardan sonra şimdi mantıksal işlemlere bakalım. Mantıksal işlemler sayısal ifadelerden farklı olarak zaten boolean sonuç üretir. Mantıksal işlemler AND (VE), OR (VEYA), EX-OR (ÖZEL VEYA), NOT (DEĞİL) işlemleridir. Mantıksal işlemlerin kestirmeli ve kestirmesiz olmak üzere 2 şekli vardır. Kestirmeli (short-circuited) işlemler doğruluğu kontrol edilecek ifadenin içinde bulunan ifadelerden herhangi biri bütün ifadenin sonucunu belirlediği anda diğer ifadeler kontrol edilmez. Kestirmeli (short-circuited) işlemlerde, bir ifadenin içinde bulunan bütün ifadelerin doğruluğu kontrol edilir, sonuç belirlense bile işlem sona ermez.. 19.

(26)

(27) 2. Döngüler.

(28) 2 Döngüler • While Döngüsü • do Döngüsü • for Döngüsü • break ve continue Deyimleri.

(29) Döngüler Birçok programlama dilinde olduğu gibi, Java dilinde de döngüler önemli bir yere sahiptir. Döngüler, yinelenen işlemler için oluşturulan kod bloğunun, belirli bir koşula bağlı olarak tekrarlanmasını sağlayan yapılardır. Java dilinde 3 tip döngü mevcuttur. Bunlar; . while. . do. . for. döngüleridir. Oluşturulan döngü yapıları birkaç farklılık dışında, içinde bulunan kod parçacığını baştan belirlenen ya da program akışı içerisinde belirlenen sayıda tekrarlanmasını sağlar. Döngüler belirli sayıda işlenmek üzere kurulabileceği gibi kod bloğu içerisinde gerçekleştirilecek bir koşul sağlanana kadar tekrarlanmak üzere de gerçekleştirilebilir. Döngülerin oluşturulması sırasında dikkat edilmesi gereken en önemli noktalardan biri, döngü içerisinde işlenecek kod parçacığının işlem sayısıdır. Belirli bir sayı ya da bir kontrol koşulu ile kurulmayan döngüler, program akışının sürekliliğini bozarak çalışan kodu sonsuz döngüye sokabilir. Bir döngünün işlenmesi sırasında ya da sonsuz döngü durumunda, kod bloğunun içerisinde müdahaleler gerekli olabilir. Bu müdahaler de break ve continue yapıları ile sağlanmaktadır.. While Döngüsü while döngüsünün genel yapısı aşağıdaki gibidir. while( boolean_kontol_ifadesi) { Tekrarlanan_Ifade(ler) ; } Bu ifadede yer alan boolean_kontol_ifadesi kontrolu sonrasında boolean bir sonuç veren herhangi bir ifade olabilir. Tekrarlanan_Ifade(ler) ise yinelenmesi istenen kod bloğudur. C ve C++ dillerinde farklı veri tipleri ile kontrol yapılabilirken, Java da farklı olarak buradaki kontrol boolean bir ifade ile yapılabilir. While döngüsünde yineleme, belirlenen koşulun sağlanmasına kadar devam edecektir. Yineleme kontrolu çevrimin başında yapılır. Kontol ifadesinin sağlanmaması halinde, döngü içerisinde tekrarlanması istenen kod parçacığı hiç çalışmayabilir. Örnek uygulama 2.1: 1 . int sayac=0;. 2 . while (sayac++ < 5) {. 3 . system.out.println(“Merhaba Dünya”). 4 } Uygulama 2.1’ i incelediğimizde, ilk satırda, sayac adlı bir değişken tanımlanarak 0 değeri atanmıştır. Kontrol ifadesi, sayac++ ifadesiyle artırılan sayac değeri 5’ten küçük olduğu sürece “Merhaba Dünya” ifadesi yazdırılacaktır. Bu örnekte “Merhaba Dünya” ifadesi 5 kez yazılacaktır..

(30) 24. Bölüm 2. do Döngüsü Genel yapısı, do { Tekrarlanan_Ifade (ler) ; } while (boolean_kontol_ifadesi) şeklindedir. do döngüsü işleyiş biçimi olarak while döngüsüne benzer. Benzer şekilde bu yapıda da boolean bir koşul ile döngünün yinelenmesi kontrol edilmektedir. do döngüsünün en önemli farkı, kontol ifadesi başta değil sonda yapıldığından tekrarlanan ifade(ler) en azından bir kere işlenecektir.. for Döngüsü Birçok programlama dilindeki temel gereksinimlerden biri olan, bir değişkenin belirli bir aralıkta artırılması ile kurulan döngü yapılarının en çok kullanılanı for döngüsüdür. Genel yapısı; for(ifade; booelan_kontrol_ifadesi ; deyim) { tekrarlanan_ifade(ler) } şeklindedir. ifade olarak adlandırılan kod, sıra döngünün işlenmesine geldiğinde ilk olarak çalışan ifadedir. Henüz döngü içerisindeki kod parçacığı çalışmaya başlamadan bir defaya mahsus olarak çalışacak, sonraki iterasyonlarda bu ifade çalışmayacaktır. Çoğunlukla döngüde kullanılacak değişkenin başlangıç değer atamasında kullanılır. boolean_Kontrol_ifadesi doğru değerini verdiği sürece döngünün yinelenmesini sağlayan kontrol ifadesidir. while döngüsünde olduğu gibi koşulun sağlanmaması durumunda for döngüsü de hiç çalışmayabilir. deyim ise döngü bloğunun sonunda çalışır. Çoğunlukla kullanılan değişkenin arttırımı bu bölümde yazılan kod ile sağlanır. Örnek Uygulama 2.2: 1 For(int x=0; x < 10; x++) { 2 . System.out.println(“Değer=” + x );. 3 } Uygulama 2.2’de, döngüde kullanılan sayısal bir x değişkeni ilk ifadede tanımlanmış ve 0 değer ataması yapılmış, deyim bölümünde ise arttırımı gerçekleşmiştir. Kontrol ifadesi x değişkeninin 10’ dan küçük olduğu tüm değerler için doğrulanacak ve döngü aşağıdaki sonucu üretecektir: Değer=0 Değer=1 ..... Değer=8 Değer=9.

(31) Döngüler. for döngülerinde genellikle döngünün sayılması için kullanılan bir değişken ihtiyacı oldduğundan, ifade bölümünde değişken tanımlamasına ve değer atamasına izin verilmektedir. Burada tanımlanan değişken, sadece for döngüsü içinde geçerlidir. Böylece diğer kısımlarda tanımlanan değişkenler ile çakışma ihtimali engellenmektedir. Döngü bloğu (scope) içerisinde kullanılacak başka değişkenler de yine ifade olarak adlandırılan bölümde tanımlanabilir. Bu işlem Örnek Uygulama 2.3’de belirtildiği gibi, tanımlanacak değişkenler arasına virgül konularak yapılır. Örnek Uygulama 2.3: 1 int j,k; 2 For(j = 3, k = 6; j + k < 20 ; j++, k +=2 ) { 3 . System.out.println(“ j değeri=” + j +” k değeri= “ + k);. 4 }. break ve continue Deyimleri break ve continue deyimleri Java’da da C#’ ta olduğu gibi kullanılır. Döngü yapıları içerisinde zaman zaman kod bloğunun işlenmesi ile ilgili müdahale ihtiyaçları ortaya çıkabilir. Belirli bir noktada döngüden çıkmak ya da o anda işlenen çevrimin sonlandırılması istenebilir. Bu ihtiyaçlar break ve continue deyimleri ile sağlanır. break deyimi, kod bloğunda kullanıldığı yerde döngünün tamamen sonlandırılmasını sağlar. Ancak dikkat edilmesi gereken en önemli nokta, içiçe (nested) yapılar kullanıldığında break sadece bulunduğu döngü bloğunun sonlandırılmasını sağlar, bir üst döngü işlenmeye devam edecektir.. 25.

(32)

(33) 3. Niteleyiciler (Modifiers).

(34) 3 Niteleyiciler (Modifiers) • Access Modifiers (Erişim Niteleyicileri) • Niteleyicilerde Metod Ezme (Access Modifiers Overriding) • Diğer Niteleyiciler.

Gambar

Şekil 4.2: Tekli  operators + - ++ -- ~ Binary  operators + - * / % &gt;&gt; &gt;&gt;&gt; &lt;&lt; &amp; ^ |38Bölüm 4
Şekil 13: Buton aktif değil. Şekil 14: Buton aktif.
Şekil 16: ButtonGroup nesnesi kullanılmadığında  herhangi bir zamanda iki JRadioButton bir arada  seçilebilir.
Şekil 6106Bölüm 7
+7

Referensi

Dokumen terkait

Bentuk aktifitas penerjemahan kata per kata dari bahasa Jepang ke dalam perkataan yang mempunyai arti yang sama/mirip ke dalam bahasa Indonesia seperti yang dilakukan

Menerapkan sifat cahaya dalam merancang dan membuat suatu karya/model Dari pengetahuan kita mengenai sifat-sifat cahaya yang telah. dipelajarisebelumnya, kita dapat membuat

Efektivitas Menulis Terbimbing (Guided Writing) Pada Pembelajaran Menulis Laporan (Penelitian Eksperimen Kuasi Siswa Kelas V Sekolah Dasar Kecamatan Karanganyar.. Tesis,

Bit rele spesial ini adalah bit yang digunakan untuk fungsi-fungsi khusus seperti untuk flags(misalnya, dalam opersi penjumlahan terapat kelebihan digit, maka carry flag akan

Pada kotak dialog yang baru muncul ini, tekan tombol “Change filename” yang terdapat di sebelah kanan frame “Output BLN file” untuk menentukan nama output file dalam format

Evaluasi yang dapat disimpulkan pada keempat uji coba tersebut adalah diperoleh akurasi tertinggi 100% untuk testing data sama dengan training data dan 78,26% untuk

Dengan melihat alasan yang mendasarinya, dapat kita asumsikan bahwa sebenarnya kelompok ini juga punya potensi untuk menerima pemberian uang/barang dari calon/partai politik,

Penelitian yang dilakukan pada fermentasi angkak menggunakan strain Monascus purpureus ko-kultur dengan Endomycopsis burtonii, diperoleh hasil peningkatan produksi