ana sayfa : araştırma : java uygulamaları : java [ 4 / 12 ] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GERİ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4.
JAVA
APPLET: HotJava veya
Internet Explorer gibi Java’ya uygun web gezginleri tarafından açılabilen,
web sayfalarından interaktif olarak çalıştırılabilen programlar,
Applet olarak adlandırılır. JAVA: Sun Microsystem (www.javasoft.com)
tarafından geliştirilmiş nesneye yönelik bir programlama dilidir. Java genelde Hotjava veya
İnternet Explorer, Mosaic gibi diğer web gezginleri ile beraber anılır.
Appletlerin görünüş açısından imajlardan hiçbir farkı yoktur. Fakat appletler, imajlardan
farklı olarak dinamik ve interaktiftirdirler. Bu nedenle appletler
animasyon ve kullanıcıdan gelebilecek isteklere cevap verebilecek alanların
veya şekillerin tasarımında kullanılabilirler. Hotjava, Java desteği sağlayan
ilk web gezgini olmasına rağmen Java desteği kısa sürede diğer web
gezginleri tarafından da sağlanmaya başlandı. Buna en güzel örnek MS
İnternet Explorer gösterilebilir. Applet tasarlamak için önce
Java dilinde program yazılır, derlenir ve HTML web sayfasında bu applet gösterilir.
Oluşturulan HTML ve Java dosyaları Web sayfasında HTML ve imaj dosyaları
ile aynı biçimde görünürler. Herhangi bir kullanıcı Java desteğine
sahip bir Web gezgini ile bu sayfayı incelediğinde, sisteme otomatik
olarak applette yüklenecek ve çalışacaktır. Kullanıcı istediğinde
Web sayfası ile interaktif olarak haberleşecektir. Eğer kullanıcının
elindeki web gezgini, Java desteği sağlamıyorsa yazılar ve imajlar
statik olarak ekrana gelecektir. Java’da anlaşılması
gereken önemli bir nokta da Java’nın sadece applet yazmak için
tasarlanmadığıdır. Java bir programlama dilinin tüm özelliklerine ve
yeteneklerine sahiptir. C veya Pascal’da çözülebilen bütün
problemler, yaratılan tüm uygulamalar Java ile de yapılabilir. Örnek
vermek gerekirse Unix işletim nasıl C dili kullanılarak yazılmışsa,
Hotjava web gezgini de Java kullanılarak yazılmıştır. 4.1
Java Programlama Ortamı ve Kullanılan Araçlar
Java
ortamları;
Ayrıca program yazmak için
herhangi bir text editörüne ihtiyaç vardır. Bu editör, örneğin
DOS’taki Edit, Windows’daki Notepad v.b. editör olabileceği gibi Java
için geliştirilmiş özel bir editör (örn. Textpad, Winedi v.b...) de
olabilir. Jbuilder, VJ++ gibi Java derleyicilerinin editörleri kullanıcıya
kolaylık sağlamaktadır.(Keskinkılıç,1999) Çeşitli Java
derleyicileri mevcuttur. SUN’in JDK (Java Development Kit),
Micdrosoft’un VJ++,
Borland’in Jbuilder,.. v.b. Burada temel
olması bakımından jdk 1.1.2. anlatılacaktır. Tarayıcı olarak Java’nın
ilgili sürümünü destekleyen bir WEB tarayıcısı kullanılmalıdır. Örneğin
Netscape 4.x, IE 4.x, Sun’ın Hotjava 1.1 gibi. Kaynak kodları .Java uzantılıdır.
Bu kodun derlenmesi sonucunda .Class uzantılı “byte Code” lar elde
edilir. Applet uygulamalarında Java’yı destekleyen tarayıcının açacağı
.html uzantılı dosyada “applet” etiketinin bulunması gerekir. Burada
tarayıcı applet etiketinde belirtilen .class uzantılı “Byte Code”
unu çalıştırmaktadır. Java programları uzun
dosya adlarına sahiptirler. Örneğin welcomeapplet.java gibi. Eğer JDK
dizini kullanılıyorsa, jdk\bin dizini de CLASSPATH2de tanımlanmış olamlıdır. Program komut satırından
veya editörden çalıştırılmalıdır. Edit veya notebook gibi genel amaçlı
bir editörde Merhaba.java programı yazılıdığında programı DOS komut
satırında derlemek için Javac merhaba.java Girilir, daha sonra çalıştırmak
için Java merhab.class Girilir. Javac, Java derleyicisi, .java
uzantılı dosyayı derleyip .class uzantılı “byte code” u çalıştırır. Özel editörlerde , örneğin
TextPad’de, program editörün içindeyken derlenir ve çalıştırılır.
TextPad editöründe Tools menüsünden Java Compiler seçilirse (veya
alt-0’a basılırsa) o andaki Java dosyası derlenir; Run Java seçildiğinde
de (alt-1) bu derlenen program çalıştırılır. Appletviewer, appletleri
test etmek için kullanılan bir programdır. Hazırlana applet’in nasıl
olduğunu görmek için Dos komut satırında şu iki satırın girilmesi
yeterlidir: Javac Merhaba.java Appletviewer Merhaba.html Appletviewer Merhab.html
dosyasında “applet” etiketini arar ve orda belirtilen applet’i
çalıştırır. Java küçük büyük
harflere duyarlı bir programlama dilidir; bu nedenle programın adı,
derlenirken ve çalıştırırken doğru olarak yazılmalıdır. Java derleyicisi 16
MB’dan daha az bir bellekte iyi çalışmayabilir, bu durumda bellek
yetersiz cevabı verebilir. 4.2
Java’da Programlama
4.2.1
Java’nın sentaksı
/* Basit Bir Java Programı*/ public class Ornek1 { public static void main(String[] args)
{ System.out.println(“ilk java Programı!”); }
} Bu program basit bir şekilde “ ” işaretleri
arasındaki yazıyı DOS ekranında gösterir. Java büyük küçük harfe duyarlıdır, yani örneğin
main yerine Main girilirse derleyici hata verir. Bu konuya dikkat
edilmelidir. Örnekteki Public terimi, bu kodu diğer kısımlardaki
hangi kodların kullanabileceğini belirleyen bir erişim niteleyicisidir.
Public bu sınıf paketi dışındaki tüm programların da bu kodu
kullanmalarına izin verir. Java’da her şey sınıf olarak tanımlandığından
class terimi her zaman kullanılacaktır. Bu terimden sonra sınıfın adı
gelmektedir. .java uzantılı bu dosyanın adı ile aynı olmalıdır. Bu
nedenle örnekteki dosyanın adı örnek1.java, derlenen dosyanın adı da
örnek1.class’ dır. Burada “{“ ve “}” karakterleri C/C++ ‘de
olduğu gibi blok baişı ve sonunu göstermektedir. Java uygulamalarında (application), örnekteki gibi
main metodunun mutlaka bulunması gerekir. Java ve C++ sınıfları benzer olmalarına rağmen
bazı önemli farklar mevcuttur. Java’da bütün fonksiyonlar bir sınıfın
üyesidir, üye fonksiyonları yerine metod olarak geçerler. Bu nedenle her
main fonksiyonu bir sınıfın içinde olmalıdır. C++ 2’deki static üye
fonksiyonları nesneler üzerinde
işlem yapmayan fonksiyonlardır, Java’da main her zaman static olarak tanımlanır.
C/C++’da olduğu gibi void terimi fonksiyonun geriye değer döndürmediğini
ifade eder.(Tanyeri,1997) Java’da her ifadenin sonunda “;” ve ancak bu işaret
ile sonlanır. Bu örnekte biz System.out nesnesini ve onun println
metodunu kullanıyoruz. Java’da metodların 0.1 veya daha fazla parametresi
olabilir. Metodun hiç parametresi olabilir. Metodun hiç parametresi olmasa
bile parantez yazılmalıdır. 4.2.2
Açıklamalar
C/C++ ile benzer şekilde bir satırlık açıklama için
satırın başında // kullanılabileceği gibi, birden fazla satır süren
açıklamaların başına /* ve sonuna */ yazılır. Java’da bunlara ek olarak /** ile başlayan ve */
ile biten bir açıklama türü geliştirilmiştir. Bu iki karakter katarı
arasındaki açıklamalar o programın dökümantasyonda otomatik olarak yer
alır. 4.2.3
Veri yapıları
Değişkenler, hafıza da değerlerin saklanabileceği
yerleri ayarlamak için kullanılır. Değişken kullanılmadan önce
bildirilmelidir. Bildirimi yapıldıktan sonra değer ataması yapılabilir. Java’da üç değişik türde değişken vardır:
örnek değişkeni, sınıf değişkeni, lokal değişken. Örnek değişkeni,
sıfat tanımlamada veya bir nesneye ait davranışın tanımlanmasında
kullanılır. Sınıf değişkenleri de örnek değişkenlerine benzer.
Aralarındaki tek fark sınıf değişkenlerinin değerlerinin o sınıf içindeki
tüm nesneler için geçerli olmasıdır. Lokal değişkenler metodların içinde tanımlanır
ve orada kullanılırlar. Benzer şekilde blok içinde de tanımlanıp
kullanılırlar. Blok sonuna ulaşıldığında lokal değişken artık tanımlı
değildir ve yoktur. Bir çok programlama dilinin aksine Java’da global
değişken yoktur. Örnek ve sınıf değişkenleri, nesneler arası iletişim
amacıyla kullanılabilirler. 4.2.4
Değişken tipleri
Değişken tanımlanırken, değişken adına ek
olarak tipi de belirtilmelidir. Değişkenler aşağıdaki gibi olabilirler: ·
sekiz
temel tipten biri ·
Sınıf
veya aryüz adı ·
Dizi Java’da 8 tip veri vardır. Bunun altı tanesi sayısal
veri tipleridir;
Tipi
Büyüklüğü
İnt
4 byte
Short
2 byte
Long
8 byte
Byte
1 byte
Float
4 byte
Double 8 byte 16 tabanlı tamsayıların başına 0x gelir (örn.
0xCAFE). Long integer olarak tanımlanan sayıların sonuna da L gelir (örn.
4000000L). Kayan noktalı sayılarda ise sayının sonuna F
gelirse float tipinden, gelmezse double tipinden bir veridir. Örneğin
4.201f float, 4.201 ise double’dır. Bool tipinde ise iki değer sözkonusudur; true ve
false. C’nin aksine bool tipi nümerik değildir ve bu şekilde de düşünülemez. Java’da değişkenler belli sınıflardan örnek
alma amacıyla da tanımlanabilirler. Java’da, C’de olduğu gibi typdef yoktur. Yeni değişken
tanımlamak için, yeni sınıf tanımlamak gerekir. Karakter tipi verilerin başında ve sonunda “ ‘
“işareti vardır. Karakterler Umicode karakter setinden seçilir. Umicode
uluslar arası dillerin tüm karakterlerini içeren ve her karakteri için 2
bayt uzunluğundaki bir kodlama yöntemidir. \u ile bir karakterin
“umicode” u yazıldığında o karakter elde edilir. Ascii karakter seti
umicode’un ilk 255 karakterine karşılık
düşer. Bazı tuşlar için tanımlanmış kısa ifadeler
mevcuttur, örneğin : \b
backspace
\u0008 \t
tab
\u0009 \n
satır sonu
\u000A \r
enter
\u000D \”
çift tırnak
\u0022 \’
tek tırnak
\u0027 \\
backslash
\u005C 4.2.4.2
Boolean (mantıksal tip) Mantıksal veriler False veya True değeri alırlar.
C’de olduğu gibi 0 False, 0 harici true gibi bir dönüşüm yoktur. Java’da değişken isimleri sınırlı değildir.
Değişken tanımlanması şu şekilde olur:
Değişken_tipi değişken_adı Örneğin: İnt a, b; 4.2.5
Atamalar ve başlangıç değerlerinin atanması
Değişken tanımlandıktan sonra = operatörü
kullanarak değer ataması yapılabilir. Java’da üç değişik türde yorum bulunur. /* ve
*/ arasında kalan metin derleyici tarafından görülmez. Çok satırlı
yorumlarda bu teknik kullanılır. Bu teknikte iç içe yorum metni mümkün
değildir. //arka arkaya iki bölüm işareti ise başladığı yerden satırın
sonuna kadar olan kısmın derleyici tarafından görülmemesini sağlar. /** ile başlayıp */ ile biten yorumlar ise java.doc
tarafından kullanılır. Char ch; Ch=’a’; İnt i=10; // C/C++’dan
gelen bir özellik, değişkene başlangıç değerinin atanmasını ifade
eder. 4.2.6
Sayısal literaller
Değişik tipte tamsayı literalleri vardır.örneğin
4 sayısı onluk tamsayı literaldir. Yeterince küçük olduğu için short
veya byte türünde literal olarak da değerlendirilebilir. İnteger aralığından
büyük her onlu tamsayı otomatik olarak long kabul edilebilir. Ayrıca
onluk sayının sonuna L harfi konursa daha küçük sayılarda long olarak
kabul edilirler. Örneğin 4L gibi tam sayılar aynı zamanda 16lık veya
8lik olarak da gösterilebilirler. Sayının başına konan 0 8lik 0x ise
16lık gösterimi ifade eder. Kayan noktalı sayılarda iki kısım vardır. Tamsayı
kısım ve ondalık kısım olarak ifade edilen kayan noktalı sayılar
kesinlikten bağımsız olarak çift duyarlılık (double) biçiminde saklanırlar.
Ayrıca sayının arkasına F eklenerek sayının kayan noktalı biçimde gösterimi
sağlanır. Kayan nokta gösteriminde, tamsayı kısmının arkasına E veya
e konularak üstel ifadeleri de göstermek mümkündür. 4.2.7
Sayısal tipler arasında dönüşüm
İkili işlemlerdeki değişkenler için değişkenlerden
birinin tipi diğerinin tipini kapsıyorsa kapsayan tip kabul edilir. Örneğin
biri double ise diğeri de double kabul edilir, aksi halde biri float ise diğeri
de float kabul edilir.(Grup Java,2000) C’deki tip zorlaması (Type casting) Java’da da
vardır. Örneğin : Double x = 2.333; İnteger nx=(int) x; 4.2.8
String literaller
Karakterlerin her hangi bir kombinasyonuna string
denir. Stringler Java’da string sınıfının birer elemanıdırlar.
C’de olduğu gibi stringler dizi olarak kabul edilemezler. String literalleri çift tırnak içerisinde
bulunurlar. Ayrıca basılmasına olanak bulunmayan \n gibi karakterler de
stiring literallerinin içinde bulunabilirler. Java programında string literal kullanıldığında
Java otomatik olarak string sınıfında girilen değere sahip bir örnek
oluşturur. Bu noktada stringler diğer literallerden ayrılırlar. Normalde
yeni nesne oluştururken ilgili sınıfında programcı tarafından oluşturulması
gerekir. 4.2.9
Sabitler
Java’da yerel sabit yoktur, global sabitlerde şu
şekilde tanımlanabilir: Public static final double max = 100; Yalnız bu satır
sınıf içinde olmalı ; fakat hiçbir metodun içinde olmamalıdır. O
zaman o sınıf içindeki bütün metodlar bu sabiti kullanabilir. İfadeler geriye değer döndürürler. Operatörler ise bu esnada kullanılan
sembollerdir. Örnek olarak aritmetik işlemler amacıyla yapılan karşılaştırmalar
gösterilebilir. Tablo
4.1 java’da kullanılan operatör ve ifadeler.
Java’da temel işlemler için beş operatör vardır. Tablo 4.2 Java’da kullanılan aritmetik işaretler.
Her operatör için her biri birere tarafta olmak üzere
iki operand gereklidir. Çıkarma operatörü için ise tek operandla kullanıldığında
operandın tümleyenini alır. Tamsayı olarak tanımlanan sayıların bölümünde
sonuç yine tam sayı olur. Her iki operanddan en az biri uzun tamsayı(long)
tipindeyse sonuç uzun tamsayı olur. Operandlar dan biri tamsayı (integer)
diğeri ondalıklı (float) ise sonuç ondalıklıdır (floatdır). (Grup
Java,2000) Değişkenlere değer atama da bir ifadedir. Bir
atama değerle sonuçlandığında aşağıdaki gibi ifadelerde Java’da mümkündür. A=b=c=d=x=y=z=9; Bu örnekte bütün değişkenlerin değeri 9 olmuştur.
Tablo
4.3 Java’da kullanılan operatör ve ifadelerin anlamları.
C’de ki gibi ++ ve – operatörleri Java’da da
geçerlidir. Ve aynı işi yaparlar. ++ ile operandın değeri bir arttırılırken
– ile operandın değeri bir eksiltilir. Aynı zamanda C’de olduğu gibi
atanmadan önce veya atanmadan sonra artırma veya eksiltme yapılabilir. Y=X++
Y=++X
Bu iki kod arasında oldukça önemli farklar vardır.
İlkinde önce x artırılır, ve yeni değer y’ye aktarılır. İkinci
komutta ise önce X artırılır ve yeni X değeri Y’ye atanır. Java’da eşitlikleri ve büyüklükleri test etmek
için birkaç değişik teknik vadır. Tablo
4.4 Java’da kullanılan karşılaştırma ifadeleri.
4.2.10.5
Mantıksal operatörler Bool değişkeni olarak sonuç veren java
ifadelerinde AND OR XOR NOT lojik operatörleri kullanılabilir. And için
kullanılan karakter & veya && şeklindedir. & ve &&
arasındaki asıl fark & operatöründe her iki tarafta değerlendirilirken
&& operatöründe ise öncelikle sol taraf değerlendirilir. Sonuç
false ise ifadenin ikinci tarafı değerlendirmeye alınmaz.(Grup Java,2000) OR operatörü I ve II karakterleri kullanılarak gerçekleştirilir.
OR operatörü operandlardan her hangi biri true ise sonuç true olur. I
veya II operatörleri arasındaki fark & veya && arasındaki
farka benzer şekildedir. Yalnız false yerine işlemler true değeriyle yapılır.
XOR operasyonunda ise her iki operand birbirinden
farklıysa sonuç true’dur. Kullanılan operatör ise ^ dır. Genel olarak && ve II operatörleri lojik işlemlerde
kullanılır. &, I ve ^
operatörleri ise bit operasyonlarında kullanılır. NOT içinse kullanılan operatör !
şeklindedir. Diğer operatörlerin aksine NOT için tek bir operand
kullanılır. Örnek olarak !x operasyonun sonucu x true ise false
; x false ise true şeklindedir. Bu operatörler aynen C’deki gibidir. Ve integerların
her bir biti üzerinde operasyon gerçekleştirmek için kullanılırlar.
Bit operatörlerinin listesi aşağıda verilmiştir. Tablo
4.5 Java’da kullanılan bit işlem operatörleri.
Operatör önceliği ifadeler işlenirken hangi operatörün hangi sırada işleneceğini gösterir. Örneğin : y=6+4/2 Burada 6+4=10 10/2=5 şeklinde mi yoksa 4/2=2 6+2=8 şeklinde mi işlem yapılacağı operatör önceliği göz önüne alınarak saptanır. Genel olarak artırma ve eksiltme operatörleri aritmetik operasyonlardan önce karşılaştırma operasyonları ise bit operasyonlarından önce işleme alınırlar. Şekil
4.6 Operatör öncelik tablosu
Daha aşağıdaki bir operasyonun daha öncelikli
olması istenirse parantez kullanılır. Java’da +operatörünün özel kullanım alanlarından
birisi de stringleri birbirine bağlamaktır. Örnek: sistem.out.prntln(“sayın” +isim); Burada ekranda sayın ve ardından isin değişkeninde
o an bulunan string görünür. + operatörü içinde string ve diğer operatörlerin
bulunduğu bir yapıda kullanılırsa string olamayan karakterleri ve operatörleri
de stringe çevirir. Herhangi bir nesne veya başka tipteki bir değişken
tostring() ile de stringe çevrilir. 4.2.11
Veri tipleri arasında dönüşüm
Veri tiplerini birinden diğerine çevirmeye veri dönüşüm
(casting) denir. Örneğin, standart
veri giriş fonksiyonu sistem.in.read ile bir değer alındığında,
karakter tipine dönüştürüldükten sonra bir karakter değişkene
atanabilir. Cahar c= (char) System.in.read(); Tablo
4.7 Veri kaybı olamayan veri tipi dönüşümleri
4.2.12
Karakter katarları
String anahtar kelimesi kullanılır. + operatörü
ile katarım sonuna ekleme yapılabilir. String message=”merhaba” +”!”; Katarın içinde bir alt katar seçmek için
substring metodu kullanılır. String greeting= “hello”; string s=greeting.substring(0,4); // s=”hello”
dir. İlk parametre başlangıç
pozisyonunu belirtir. Katarın ilk harfinin pozisyonu 0 dır. 4.2.13
Katarların karşılaştırılması
Bunun için equals metodu kullanılır. s.equals(t) Dönüş değeri olarak true veya false gelir. = = operandının kullanılması yanlış olur; çünkü
bu operand sadece iki katarın aynı yerde olup olmadığına bakar. Mantıksal değerler ile sayısal değerler arasında
işlem yapılamaz. 4.2.14
Katar fonksiyonları
Char charAt(int index) İnt comporeTo(String anotherString) Bolean endsWith(String suffix) Boolean equals(Object anObject) Boolean equalsignoreCase(StringanotherString) İnt indexOf(string str) İnt indexOf(String str, int fromindex) İnt lastindexOf(String str) İnt lastindexOf(String str, int fromindex) İnt length() String replace(char oldChar, char newChar) Boolean startsWith(String prefix) String substeing(int beginindex) String substring(int beginindex, int endindex) String toLowerCase() String toUpperCase() String trim() 4.2.15
Veri okumak
ReadDoubleTest.java double bir sayının nasıl
okunacağı gös-terilmiştir. Örnek: ReadDoubleTest.java İmport java.io.*; İmport java.text; Public class readdoubletest
// shows how to read a double the hard way { public static void main(string[] args) { system.out.println
(“enter a number, l’ll add two to it.”); double
x; // the number we wish to read try { İnputStreamReadder isr
=new İnputStreamReader(System.in); bufferedreader br
= new BufferedReader(isr);
string s=br.readln(); decimalFormat df= new decimalFormat(); number n= df.parse(s); x= n.doubleValue(); } catch(IOException e) { x=0; } catch(ParseException e) { x=0; } system.out.println(x+2); } } console sınıfının 3 tane metodu (fonksiyonu) vardır:
Sayısal verilerin çıkış formaı için Java.text
paketinin 3 metodu kullanılabilir. NumberFormat.getNumberİnstance() // sayı değeri Number Format.getCurrencyInstance()// para birimi ile
birlikte çıkış. Number Format.getPercente()// 100’e bölünüp, %işareti
ile çıkış. Çıkış almak için sayı karakter katarı olarak
saklanır. Bunun için format metodu kullanılır. Örnek: Double x=10000.0/3.0; NumberFormat nf=NumberFormat.getNumberInstance(); String fx=nf.format(); System.Out.println(fx); (Grup
Java,200) U.S. veya Alman veya başka standartlara görede sayılar
formatlanabilir. Bunun için Localae tipi kullanılır. Örneğin Alman
formatında elde etmek için NumberFormat nf=NumberFormat.getNumberInstance(Locale.German); Kendi formatınızı oluşturmak için Decimal Format
tanımlanabilir: DecimalFormat df=DecimalFormat(“0.######”); System.out.printle(sdf.format(x)); Buradaki semboller ve anlamları aşağıda verilmiştir. Tablo
4.8 Çıkış formatında
kullanılan sembollerin anlamları.
Aşağıdaki Mortgage.java örneğinde CoreJava’nın
console sınıfı kullanılmıştır. Mortgage.java İmport corejava.*; İmportjava.text.*; Public class Mortgage { public static void main(String[] args) {double principal; double yearlyInterest; int years; principal = Console.readDouble (“Loan amount (no commas):”); yearlyInterest = Console.readDouble (“Interest rate in % (ex:use
7.5for7.5%):”)/100; years = Console.readlnt(“The number of years:”); double monthlyInterest = yearlyInterest / 12; double payment = principal * monthlyInterest / ( 1- (Math.pow(1/(1 + monthlyInterest), years * 12))); System.out.println(“Your payment is “); Number Format
nf = Number Format.getCurrencyInstance() System.out.println(nf.format(payment)); } } |