|
Java nedir ?Java
™ platformu
, ağ(network) ‘nın önemi hesaba katılarak ve aynı yazılımın
birçok değişik bilgisayar ortamında veya değişik tür
makinalarda çalışması fikri ile geliştirilmiş yeni bir
teknolojidir.Java teknolojisi kullanılarak aynı uygulamayı değişik
ortamlarda çalıştırabiliriz – örneğin Pc lerde , Macintosh
bilgisayarlarda , hatta cep telefonlarında . Java
yı hem programlama dili , hemde bir ortam olarak düşenebiliriz .
Programlama dili olarak , açık , nesneye yönelik (object-oriented)
, güvenli , sağlam , internet için elverişli bir teknoloji
diyebiliriz . Ortam olarak da işletim sistemi , veri tabanı
(database) , ve
orta katman (middleware) teknolojileri
bulmak mümkündür. Gerek Java , gerekse Java’ya bağlı alt teknolojiler , VB veya Borland Delphi gibi sadece belli bir firma tarafından geliştirilmiş olan başlı başına ürünler değillerdir . Java ve Java’ya bağlı alt teknolojiler , Sun Microsystems tarafından verilmiş açıklamalardan (specifications) oluşmaktadır . Bu açıklamalara (specifications) sadık kalan her yazılım fırması JVM(Java Virtual Machine = Java) veya Java’ya bağlı alt teknolojiler yazabilir/gerçekleştirebilir (implement) . Eğer bu açıklamalara (specifications) sadık kalmayıp , standart dışı bir JVM veya Java’ya bağlı alt teknoloji yazmaya/gerçekleştirmeye kalkarsanız hukuki bir suç işlemiş olursunuz(Microsoft firmasının yaptığı gibi). Şu anda en yaygın kullanılan JVM ler , IBM’in ve Sun Microsystems ın üretmiş olduklarıdır, ayrıca HP , Apple ve daha bir çok firmanın üretmiş oldukları JVM ler bulunmaktadır . Java
ile ne yapılabilir ?
Java
Programlama dili ile projelerimizi diğer programlama dillerine göre
daha kolay ve sağlıklı bir şekilde yapmanız mümkündür . Kısaca
göz atacak olursak , Java ile ; ·
GUI (graphical user interface , grafiksel kullanıcı ara yüzü)
uygulamaları , appletler. ·
Distributed components (ör . EJB, RMI, CORBA). ·
Servlet , Jsp (web tabanlı uygulamalar). ·
Veri tabanlarına erişim ile alakalı uygulamalar. ·
Cep telefonları , Smart kart lar için uygulamalar . ·
Ve daha niceleri …. için uygulamalar yazmamız mümkünkür.
Java
nasıl çalışır ?
Java uygulamaları JVM (Java Virtual Machine) tarafından yorumlanır( interpreted ).JVM , işletim sisteminin en tepesinde bulunur.Bu sayade yazımış olan Java uygulamaları değişik işletim sistemlerinde , herhangi bir değişiklik yapmadan çalışabilir, Java nın felsefesi olan “bir kere yaz heryerde çalıştır” sözü gerçekleştirilmiştir.
Şekil-Java-1 Aşağıdaki
şekillerde , javanın kaynak kodundan , çalışmasına kadar olan
evreleri gösterilmektedir.
Şekil-Java-2 Byte
koduna çevrilen kaynak kod , JVM tarafından yorumlanır ve uygulama
çalıştırılmış olur. Ufak
bir Java uygulaması örneği , bu örneği birazdan detaylı olarak
inceliyeceğiz: ilk-ör-1
Yukarıda yazılan kodumuzu şekil üzerinde anlatırsak ;
Yazılan java kaynak kodlarımız ilk önce derlenir daha sonra ise çalıştırırız. Java kaynak kodunda belirttiğimiz her sınıf (class) için fiziksel olarak bir class dosyası oluşturulur.
KategorilerJava
platformu ana gruba ayrılır.
Yukarıdaki
kategorileri açacak olursak ;
Gelişim
Evreleri
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
String kumanda; // kumanda referansı şu an için String bir objeye bağlı değil. |
|
|
|
|
Şekil-ho-2
gösterim-2
| örnek-1 |
String kumanda= new String("Selamlar") ;
|
gösterim-3
| örnek-2 |
String kumanda="Selamlar" ;
|
Yukarıda yaptığımız (Şekil-ho-2
inceleyiniz), referanslara obje bağlama örneklerinin birbirlerinden farkları
yoktur. Sonuçta her iki gösterimde referanslara objeleri bağlar.Ama
javada String objelerinin özel bir yeri vardır , String
objeleri çok kullanılan objeler oldukları için örnek-2 deki gösterimde
doğru ve bir nevi kısa yoldur .
Class ve Obje i bir benzetme ile açıklamak en kolayı herhalde ..
Sabun fabrikasında yeni bir sabun dizaynı üzerinde çalıştınız ve ortaya bir kalıp çıkartdınız artik üretim aşamasına geçmek istiyorsunuz.Bu kalıpda sabun un hangi boyutlarda olucağı, hangi renkde olucağı , nasil kokucaği vb.. gibi bilgiler hepsi sizin tarafınızdan tespit edilmişdir.Üretim aşamasına geçildiğinde hep aynı sabun kalıbını kullanarak yeni sabunlar üretmeniz mümkün olacaktır , sabun kalıbının tasarımı bir kere yapıldı ama o kalıpdan yola çıkarak n tane sabun objesi üretmeniz mümkün olmaktadır. Bu örnekden yola çıkarak , kalıp'ı class a , sabunları ise objelere benzetebiliriz.
![]() |
Şekil-class-obje
Depo,
toplam 6 alandan oluşur , Bu 6 alanı açıklarsak :
Register : En hızlı alan burasıdır .Bu alan Cpu nun içinde bulunur , ve derleyicinin(compiler) ihtiyaclarına gore pay edilir . Bu alanda bizim direk bir kontrolumuz yoktur.
Stack : Bulunduğu nokta RAM (random-access memory) dır . Bu alanda bulunan “stack pointer” ına direk olarak Cpu dan destek vardır . Stack pointer aşağıya inince yeni bir hafiza alanı oluşturur , yukarı kalkınca ise hafızayı alanını bırakır(release) . Java derleyicisi programı oluşturmadan evvel , stack üzerinde oluşturulacak olan verilerin boyutlarını ve ömürlerini (lifetime) bilmek zorundadır çünkü stack pointer i aşağı ve yukarı hareket ettirecek olan kodu oluşturması gerekmektedir . Stack üzerinde referansların kendileri bulunur.
Heap : Burası genel amaçlı bir hafıza havuzudur . Stack alanının tersine , derleyici burada ne kadar hafıza pay edileceğini bilmek zorunda değildir .Bu büyük bir rahatlık getirmektedir çünkü ne zaman bir obje yaratmak istersek sadece new anahtar kelimesini kullanarak bu alanda bir yer kendimize tahsis etmiş oluruz .Bu kadar rahatlığın karşılığında ise ödenmesi gereken fatura hızdır . Heap de yer ayırmak icin harcanan zaman , stack alanında yer ayırmaktan daha fazladır.Heap de objelerin kendisi durur.
Statik Alan : Bu alanda RAM de bulunur.Statik alanda yer alan veriler , programın çalışması süresince orada yaşarlar . Tüm objeler bu statik verileri görebilirler , ortak bir alan gibi düşünebiliriz . Veriyi statik yapmak icin static kelimesini değişkenin önüne getirmemiz yeterli olur . Objelerin kendileri bu alanda yer almazlar.
Sabit Bellek : Programın içindeki sabit değerlerin içinde bulundukları yerdir . Tercihen ROM(read only memory) da da yer alabilirler .
Non-RAM Belek : Bazı durumlarda uyguların içersinde oluşturduğumuz objelerin,uygulama sonlandıktan sonra bile varlıklarını sürdürmelerini isteriz.
1 ) Akışkan Objeler (streamed objects) : Bu objeler , genellikle ağ(network) üzerindeki başka bir makinaya gönderilmek üzere byte akıntılarına dönüştürülürler.
2
) Kalıcı Objeler ( persistent objects) : Bu objeler
kendi durumlarını(state) saklarlar ve diskimizde saklanırlar
. Kendi durumlarını saklamaktan kasıt ise özelliklerinin(attribute)
değerlerinin korunmasıdır.
Java
da bulunan özel bir grup daha vardır . Bu grup a ilkel (primitive)
tipler denir. Bu tipleri uygulama yazarken çok kez kullanırız. Bu
sebepten bu ilkel tipleri heap alanında new anahtar
kelimesi ile oluşturmak pek de avantajlı olmamaktadır . Bunun
yerine bu ilkel tiplerin stack alanında saklanması çok iyi
performans vermektedir .Yanlız buradaki espiri , her ilkel değişken
bir referans değildir , bu ilkel tipler değerlerini kendi üzerlerinde
taşırlar.
|
Boyut
|
Minimum
|
Maximum
|
Sarmalıyıcı tip
|
boolean
|
—
|
—
|
—
|
Boolean
|
char
|
16- bit
|
Unicode 0
|
Unicode 216- 1
|
Character
|
byte
|
8- bit
|
-128
|
+127
|
Byte
|
short
|
16- bit
|
-2 15
|
+2 15—1
|
Short
|
int
|
32- bit
|
-2 31
|
+2 31—1
|
Integer
|
long
|
64- bit
|
-2 63
|
+2 63—1
|
Long
|
float
|
32- bit
|
IEEE754
|
IEEE754
|
Float
|
double
|
64- bit
|
IEEE754
|
IEEE754
|
Double
|
void
|
—
|
—
|
—
|
Void
|
gösterim-4
|
char c = 'x' ; // ilkel tip |
|
Character C
= new Character(c);
|
Bir
çok programlama dilinde değişkenlerin geçerlilik alanı kavramı
bulunur.Java , C ve C++ dillerindeki değişkenlerin geçerlilik
alanlarını örnekler ile göstermeye çalışalım.
gösterim-6
{
int x = 12;
/* sadece x mevcut*/
{
int q = 96;
/* x ve q mevcut */
}
/* sadece x mevcut */
/* q “geçerlilik alanının dışına çıktı ” */
}
|
Bir
değişken sadece kendi geçerlilik alanının sonunda kadar geçerli
olur .
gösterim-7
{ // dış alan
int x = 12;
{ // iç alan
int x = 96; /* java için illegal ama C ve C++ doğru*/
} // iç alanın sonu
} //dış alanın sonu
|
gösterim-8
if (true){
String s = new String("Selamlar");
} /* geçerlilik alanının sonu*/
|
Java da kendimize özgü nasıl bir sınıf oluşturabiliriz sorusuna yanıt olarak aşağıdaki örnek iyi bir cevap olmayacaktır . Gayet ilkel ve gereksiz bir sınıf (class) oluşturduk ,hiç bir fonksiyonelitesi olmayan bir sınıf . Bu sınıfımızı ilerleyen safhalarda geliştireceğiz .
gösterim-10
|
Bir sınıf(class) tanımladığımız zaman , bu sınıfımızın üzerinde iki sey yapabiliriz.
1 ) Alanlar (field) tanımlarız . Bunlar ilkel tipler (primitive) olabilirler veya bir obje ile iletişim kurabilmemiz için o obje tipindeki bir referans olabilirler. (Daha detaylı olarak açıklanacaktır, panik yok !! )
ör-1
class YeniBirSinif {
public int i;
public float f;
public boolean b;
}
|
ör-2
class YeniBirSinif {
public int i = 5 ;
public float f = 3.23;
public boolean b = true ;
}
|
Bu alanları(field) kullanmadan evvel onların ilk değerlerini almış (initialize)olmaları gerekmektedir.Peki ör-1 de biz herhangi bir ilk değer verme işlemi yapmadık ve java bize bu konuda kızmadı , neden ?
Bu sorunun cevabı yukarıdaki tabloda yatıyor
.Eğer bir sınıfın(Class) alanlarını oluşturup onlara ilk değerlerini
vermez isek -ki ör-1 de yaptığımız tamamen böyle bir
harekettir o zaman java bu sınıf alanlarına kendi mevcut-varsayılan
(default) ilk değerlerini verir , bu mevcut değerleri yukarıdaki
tablodan inceliyebilirsiniz .
İlkel Tip
Mevcut değer (Default value)
boolean
false
char
‘\u0000’ (null)
byte
(byte)0
short
(short)0
int
0
long
0L
float
0.0f
double
0.0d
(Not: obje referanslarına obje bağlanmamış ise o referansın değeri null dır )
Tekrardan YeniBirSinif örneğimize geri dönelim , bu sınıfda hala işe yarar bişeyler yok gibi sadece 3 adet alan tanımladık . Şimdi bu YeniBirSinif sınıfını obje haline dünüştürelim
gösterim-11
|
YeniBirSinif ybs = new YeniBirSinif(); |
ybs isimini verdiğimiz referansımız
heap alanındaki YeniBirSinif objesini göstermektedir.Eğer
biz heap alanındaki bu YeniBirSinif objesi ile temas kurmak
istersek ybs referansını rahatlıkla kullanabiliriz .
Objenin alanlarına ulaşmak için “.” (nokta kullanırız) (Not : Ulaşmak isteğimiz alan private ise o zaman o alana ulaşmanın hiçbir yolu yoktur , public , friendly , protected , private ilerideki konularda detaylı bir şekilde anlatılmaktadır , panik yok !! :P )
gösterim-12
ybs.i ; ybs.f ; ybs.b ; |
Eğer objemiz alanlarına ilk değerlerinden farklı değerler atamak istiyorsak ;
gösterim-13
ybs.i = 5; ybs.f = 5.3f; ybs.b = false; |
Objelerimizin alanları ilkel tipler olduğu zaman aşağı yukarı olayların nasıl geliştiğini hayal edebiliyoruz peki objemizin alanları ilkel tip degilde bir obje olsaydı , olaylar nasıl değişecekti?
ör- 3
class YeniBirSinif {
public int i;
public float f;
public boolean b;
public String aciklama = new String("objemizin aciklamasi");
}
|
Ör-3 deki örneğimizde YeniBirSinif objemizin alanlarından biri String objesi, ilkel tipteki bir alandan farkını aşağıdaki şekilde inceliyelim .
|
|
Şekildeki main() metodu java uygulamaları için başlama bölgesidir
, ilk örneğimizi yaparken daha iyi anlayacağız . YeniBirSinif
sınıfını obje haline dönüştürdüğümüzde görüyoruz ki aciklama
alanıda heap bölgesinde yerini alıyor, yani heap bölgesinde 2 adet
objemiz oluşmuş oluyor , biri YeniBirSinif objemiz , diğeri
ise String objemiz .
2 ) Metodlar , objelerimizin işe yarar hareketler yapmasına olanak veren kısımlar diye bir giriş yapsam sanırım yanlış olmaz . İşe yarar hareketlerden demek istediğim, objemizin canlı olması , yani ona bir soru sorduğumda bana cevap verebilmesi veya belli koşullarda kendisine önceden verilmiş kriterlere göre karar vermesini sağlamak.Metodları bu kadar cok abartı anlattıktan sonra biraz daha derinlemesine inceliyelim istersen.
|
dönüşTipi metodunİsmi( /* argüman listesi */ ) { /* Metod gövdesi */ }
|
dönüşTipi = Metodların iki şansı vardır , ya bir değer döndürürler veya hiçbirşey döndürmezler.Değerden kasıt ettiğim metodlar ya bir ilkel tip döndürebilirler (int , double,boolean) veya bir obje döndürebilirler (String , Double , Integer , YeniBirSinif). Eğer bir metod hiçbirsey döndürmüyorsa o zaman void ekini metodun başına yerleştiririz .
metodunİsmi = Javanın kendisine ait olan kelimeler(if , else , import , class , return..vb) ve türkçe krakterler hariçinde istediğiniz ismi kullanabilirsiniz ama metodlar bir eylem içerdikleri için , metod isimlerininde bir eylemi belirtmesi tercih edilir örneğin : sayiSirala() , enBuyukSayiBul(),sqlCalistir() gibi . Burada dikkat edecek olursanız , metod isimlerinin ilk harfleri küçük sonra gelen ek kelime ise büyüktür.
arguman listesi= Metod içersinde işlemler yapabilmek için gerekli olan parametreler.Bu parametreler ilkel tipte veya Obje olabilirler.
metod
gövdesi = Bu kısım kodu
yazan kişinin yaratıcılığına bağlı olarak değişmektedir.
Bu kadar açıklamadan sonra gerçek bir metod örneği verebiliriz .
gösterim-15
int boyutDondur(String kelime) {
return kelime.length() ; } // metodun sonu
|
boyutDondur() metodunu herhangi String objesini parametre olarak alıyor ve bu String objesinin boyutunu geri döndürüyor. Metodumuzun geri döndürdüğü değer ilkel bir tip olan int . Herhangi bir değer geri döndürebilmek için return anahtar kelimesini kullanmamız gerekli .
gösterim-16
String elmaHesapla( int elmasayisi) {
return new String(" toplam elma sayisi = " + elmasayisi*2);
} |
Metod-ör-2 de ise elmaHesapla() metodu int tipinde parametre alıyor , sonra yeni bir String objesi oluşturup bunu geri döndürüyor . Buradaki ilginç olabilecek olan husus , int olan bir değişkeni iki ile çarpıp sonradan + operatörü ile String in sonuna eklenmiş olması olabilir . Diğer dillerde bu işlem için belli bir çevirici fonksiyona ihtiyac duyardik , örneğin delphi de intToStr() fonksiyonunu çok kere kullandığımı hatırlarım , ama java da String bir ifadeden sonra gelen herhangi bir tipdeki değişken otomatik olarak String e çevrilir .
" toplam elma sayisi = " ifadesi String bir ifadedir ve bu ifadeden sonra gelecek olan her türlü tip (ilkel veya Obje) , otomatik olarak String dönüştürülürler. Eğer javanın yardım dokumanlarından Object tipine ait bilgilere bakarsanız , her objenin hali hazırda toString() metodunun var olduğunu görürsünüz . Eğer bir Obje otomatik veya değil String objesine dönüştürülmek istenirse bu objenin toString() metodu çağrılır . Bu konuya ilerleyen konularda daha detaylı bir şekilde göreceğiz , panik yok !!! .
gösterim-17
void hesapla(String kelime , int kdv ) {
int sondeger = 0; int kelimeboyut = 0 ; int toplamboyut ; // Hatalı !!!!!
kelimeboyut = kelime.length(); sondeger = kelimeboyut + kdv ; } |
Metod-ör-3 örneğimizde , hesapla() metodu iki adet parametre almaktadır ve geriye hiçbirşey döndürmüyeceğini bize açık açık void anahtar kelimesi ise söylemektedir. Bu örneğimizde dikkat etmemiz gereken ikinci nokta ise metodların içersinde tanımladığımız değişkenlerin ilk değerlerini kesinlikle ama kesinlikle bizim tarafımızdan belirtilmesi gerekmektedir.
Sınıf(Class) lara ait global değişkenlere (veya alanlarda diyebiliriz hepsi aynı anlamı taşımaktadır) ilk değerlerini vermediğimiz zaman java bu değişkenlere ilk mevcut - varolan değerleri kendi verir (bkz ) ,ama metod içersinde tanımlanan değişkenler için aynı durum söz konusu değil , bu sebepten dolayı toplamboyut değişkeninin tanımlanma şekli yanlıştır.
gösterim-18
void UniteKontrol(int deger) {
if (deger == 1 ) // eger deger 1'e esitse metod u terk et
{
return; }else {
// gerekli islemler
}
}
|
Metod-ör-4 , örneğinin ana fikri void ile return anahtar kelimelerinin aynı metod içinde kullanımını göstermektir. if - else kontrol mekanizmalarını henüz görmedik ama bu örnek için kullanılmaları gerekliydi . Buradaki return parametresi metodun acilen terk edilmesi gerektigini anlatır .
public class Selam {
public static void main(String args[])
{
System.out.println("Selamlar !");
}
}
|
İlk örneğimizi adım adım açıklayalım ; fakat şunu hemen belirtim , java büyük ve küçük harfe karşı duyarlıdır (case sensitive) . Yani public yerine PUBLIC yazarsanız hata ile karşılaşırsınız.
public class Selam :
Bu kısımda yeni bir sınıf oluşturuyoruz
public static void main(String args[]) :
Javada bir sınıfın tek başına çalışmasını istiyorsak (standalone) bu metodu yazmak zorundayız . Bu metodu sınıflar için bir başlagıç noktası olarak var sayabiliriz.Burada iki bilinmedik konuyu ele almak gereklidir, birincisi statik metodlar , ikincisi ise diziler (array).
statik metodlar : statik metodları , objeye bağımlı olmayan metodlar diye tanımlıyabiliriz.
Bu metodların kullanılması için objenin oluşturulmuş olması gerekmez . Ne demek istediğimi
örnekler ile açıklamak daha iyi olucağı kanaatindeyim.
ör-normal-1
public class TestNormal {
public void uyariYap() {
System.out.println("Dikkat Dikkat");
}
public static void main(String args[]) {
TestNormal tn = new TestNormal() ; //dikkat
tn.uyariYap();
}
}
|
normal-ör-1 de uyariYap() metodu statik bir metod değildir . Bu yüzden bu metodun çağrıla bilmesi
için TestNormal objesinin oluşturulması gerekmedir , bu kısıma dikkat lütfen .
Şimdi diğer örneğimize geçelim .
ör-static-1
public class TestStatik {
public static void uyariYap() {
System.out.println("Dikkat Dikkat statik metod");
}
public static void main(String args[]) {
TestStatik.uyariYap();
}
}
|
Bu örneğimizde tek değişen sey uyariYap() metodunun statik olmuş olmasi değildir , bu
metodun çağrılma şeklide değişmiştir. uyariYap() metodu artik TestStatik objesine bağlı bir metod
değildir , yani uyariYap() metodunu çağıra bilmemiz için TestStatik classını
oluşturmamız gerekmez. main() metodunda da işler aynıdır , fakat main() metodunun
java da çok farklı bir yeri vardır.main() metodu java uygulamaları için bir başlangıç noktasıdır .
Diziler (Arrays) : main() metodu parametre alarak String obje dizisi alır , bu String obje dizinin
içersinde konsoldan java uygulamasına gönderilen parametreler bulunur .
args[0] : konsoldan girilen 1. parametre değerini taşır ..
args[1] : konsoldan girilen 2. parametre değerini taşır ..
args[n] : konsoldan girilen n. parametre değerini taşır ..
Javada diziler sıfır dan başlarlar . Dizileri ilerliyen bölümlerde yoğun bir şekilde inceliyeceğiz .
System.out.println("Selamlar !") :
Bu komut satırı , bilgileri konsola(ekrana) basmamızı sağlar . Java nin dokümanlarına bakarsak ,
System sınıfınına ait static bir metod olan olan out methodunun var olduğunu görürüz. Bu yüzden System sınıfını oluşturmak zorunda degiliz (new System() gibi ). out methodu bize printStream
objesi oluşturur ve printStream objesinin println() methodu ile bilgileri konsola(ekrana) bastırırız.
JAVA 1.3.0 versiyonunun kurulumunu hem unix hemde windows sistemlerinde nasıl yapıldığına bakalım. JAVA 1.3.0 veya daha gelişmiş versiyonlarını http://java.sun.com adresinden indirebilirsiniz.
http://java.sun.com adresinden
sisteminize uygun olan java versiyonunu seçmeniz gerekmektedir.
Solaris ve Linux için değişik java versiyonları bulunmaktadır.
![]() |
İndirmiş olduğunuz java kurulum dosyasını , size uygun bir yere açın (örneğin /usr/java ) ,gunzip ve tar komutlarının örneği aşağıdaki gibidir ; |
Öncelikle sıkıştırılmış dosyayı açıyoruz ; bash# gunzip jsdk1.3.0.tar.gz daha sonra arşivlenmiş dosyanın içeliğini /usr/java dizinine çıkartıyoruz bash# tar xvf jsdk1.3.0.tar /usr/java
|
![]() |
/etc/profile dosyasının içersine bazı eklemeler yapmak gerekmektedir ;Bu dosya /etc/ dizinin altındaki profile dosyası olmayabilir . |
| unix sistemlerde her
kullanıcının kendisiine ait profile dosyaları vardır , bu yapılan
işlemler o dosyaların ,içersinede yapabilirsiniz , arasında
fark ise , eğer /etc/ dizinin altındaki profile dosyası tüm
kullanıcıların görebildiği bir dosyadır , bu dosya üzerinde
yapacağınız değişikler tüm kullanıcıları doğrudan
etkiliyecektir .
öncelikle PATH değişkenini değiştirmemiz gerekli ve sonradan CLASSPATH değişkenini tanımlamamız gereklidir.JAVA yı “/usr/java” dizinine kurduğunuzu varsayıyorum. PATH=”/usr/bin:/usr/local/bin:/usr/java/bin:.” Sadece bold olan yeri (/usr/java/bin) yeni ekledim ; /usr/java/bin içersinde çalıştırılabilir dosyalar bulunmaktatır.Şimdi sıre CLASSPATH de CLASSPATH=”/usr/java/src.jar:/ usr/java/lib/tools.jar:.” javada en temel ve en önemli kütüphaneler bu iki jar dosyasının içersinde saklıdır.Daha sonradan da CLASSPATH e eklemeler yapabilirsiniz , şimdilik bu iki önemli dosyayı CLASSPATH ekleyerek işe başlıyalım . JAR dosyalarını ilerleyen bölümlerde göreceğiz ( panik yok !! ). Dikkat ettiyseniz CLASSPATH tanımlarken en sona bir nokta koyduk , bu nokta hayati bir önem taşır. Bu noktanın anlamı , bulunulan dizindeki *.class dosyalarının görülebilmesini sağlamaktadır,böylece java komutunu çalıştırırken saçma hatalar almayız.
|
![]() |
Yaptığımız bu değişikliklerin etkili olabilmesi için aşağıdaki komutu yazıp enter tuşuna basmamız yeterli | ||||||
| .bash# ./etc/profile
--> en baştaki noktaya dikkat .
Yaptığımız işlemlerin etkili olup olmadağını ögrenmek için , sırasıyla aşağıdaki komutları deniyebilirsiniz
|
Windows : Javanın Windows versiyonu için hazır bir kurulum dosyası bulunur. Bu dosyaya çift click yapmanız işlerin büyük bir bölümünü gerçekleştirecektir ama hala yapmamınız gereken ufak tefek işler bulunmaktadır.
Windows 95-98 için autoexec.bat dosyasında aşağıdaki değişlikleri yapmanız yeterli olucaktır.
(Aşagıdaki PATH ve CLASSPATH değişkenleri benim bilgisayarmdan alintidir)
SET PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;C:\JDK1.3\BIN;C:\ultraedit;.
SET CLASSPATH=C:\JDK1.3\src.jar;C:\JDK1.3\lib\tools.jar;.
(Not : Tekrar oldu ama olsun çok önemli bir kısım : Dikkat ettiyseniz CLASSPATH tanımlarken en sona bir nokta koyduk , bu nokta hayati bir önem taşır. Bu noktanın anlamı , bulunulan dizindeki *.class dosyalarının görülebilmesini sağlamaktadır,böylece java komutunu çalıştırırken saçma hatalar almayız. )
Windows 2000 için PATH ve CLASSPATH tanımlarını Environment Variables kısmına ulaşarak yapabilirsiniz. Bu kısıma ulaşmak için Control Panel --> System --> Advanced --> Environment Variables yolunu izlemeniz yeterli.
System Variables veya User Variables bölümünde , PATH değişkenini değiştirmeniz ve "new" diyerek yeni bir CLASSPATH değişkeni tanımlamanız gerekmektedir (hiç CLASSPATH değişkeniniz olmadığını var sayıyorum) . PATH ve CLASSPATH değişkenlerini yukarıdaki gibi java ile ilgili parametreleri girerek kurulumu tamamlıyabilirsiniz .
Kurulum ilgili aklınızda daha birçok soru olabilir veya yolunda gitmeyen tanımlar olabilir , bunlar için Java ile beraber gelen kurulum hakkındaki dosyaları okumanızı şiddetle tavsiye ederim.
Elimizde
Selam.java (bkz) dosyasını nasıl derliyeceğiz
? Sorunun cevabı aşağıdaki komut satırında
$ javac Selam.java
Artık elimizde
Selam.class dosyası var olmuş oldu , şimdi sıra geldi bu
dosyayı çalıştırmaya
$ java Selam
Ekrana çıkan yazın :
Selamlar !
Ne yaptığımızı tekrarlarsak, Elimizde bulunan Selam.java kaynak dosyasını javac uygulamasını kullanarak derlenik ve Selam.class dosyamız oluşmuş oldu. Daha sonradan java uygulamasını kullanarak uygulamamızı çalıştırdık. Hepsi bu !!!! .
javanın komut satırından nasıl çalıştığını anladıktan sonra komut satırından java uygulamamıza parametere göndermeyi öğrenebiliriz.
işte ufak bir uygulama :
ör-args-1
public class ParametreUygulamasi
{
public static void main(String[] args)
{
System.out.println("Merhaba Girdiginiz Parametre = " + args[0]);
}
}
|
Daha evveldende belirtildiği gibi Java da diziler sıfır dan başlarlar (diziler ilerleyen bölümlerde detaylı olarak incelenecektir , panik yok !!) . Şimdi ParametreUygula.java kaynak dosyamızı derleyelim .
$ javac ParametreUygulamasi.java
Elimizde ParametreUygulamasi.class dosyamız oluşmuş oldu. Şimdi uygulamamızı çalıştırma zamanı ama farklı bir şekilde :P
$ java ParametreUygulamasi test
Uygulamamızı çalıştırma tarzımız değişmedi burada ki tek fark artık en sona yazdığımız test kelimesini java uygulamasına parametre olarak gönderebilmemiz . İşte programın çıktısı:
Merhaba Girdiginiz Parametre = test
Java uygulamasına birden fazlada parametre gönderebiliriz .
ör-args-2
public class ParametreUygulamasi2
{
public static void main(String[] args)
{
System.out.println("Merhaba Girdiginiz ilk Parametre = " + args[0]);
System.out.println("Merhaba Girdiginiz ikinci Parametre = " + args[1]);
}
}
|
Uygulamamızı öncelikle derliyelim :
$ javac ParametreUygulamasi2.java
şimdi çalıştıralım :
$ java ParametreUygulamasi2 Test1 Test2
Ekran çıktısı :
Merhaba Girdiginiz ilk Parametre = Test1 Merhaba Girdiginiz ikinci Parametre = Test2
Peki Bu uygulamaya hiç dışarıdan parametre girmeseydik ne olurdu ? deneyelim :
$ java ParametreUygulamasi
Sansürsüz şekilde karşılaştığım görüntü :
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException at ParametreUygulamasi2.main(ParametreUygulamasi2.java:5) |
Hımm , sorun nedir ? sorun şu , Java uygulamamız bizden kesin kez iki adet parametre girmemizi bekliyor. Beklediğini aşağıdaki kısımlarda görebiliyoruz :
gösterim-19
System.out.println("Merhaba Girdiginiz ilk Parametre = " + args[0]);
System.out.println("Merhaba Girdiginiz ikinci Parametre = " + args[1]);
|
args[0] ve args[1] , ancak biz dışarıdan iki adet parametre girersek bu dizinin ilk iki elemanı bilgi ile dolucaktır eğer dışarıdan parametre girmezsek dizinin birinci ve ikinci elamanları oluşmıyacaktır.Oluşmamış bir dizi elemanlarına ulaşmaya çalıştığımızda ise yukarıdaki hata ile karşılaşırız. Bu özellik diğer programla dillerinde bulunmayan bir özelliktir ve uygulamanın sağlamlığını arttırır .
Uygulamalar yazılırken büyük bir oranla dökümantasyon işi ikinci plana itilir veya unutulur hiç yapılmaz . Dökümantasyon kodu yazan kişiler için çok ağır işdir ( Bende bu fikri katılıyorum ). Java dökümanstasyon hazırla işini daha kolay ve sevimli bir hale getirmiştir . Bu özelliğe "JavaDoc" denir . JavaDoc olayının yaptığı iş , kodun içersine yazılmış olan yorum satırlarını alarak bunları HTML formata dönüştürmektir . Fakat yorum satırını yazarken bazı kurallara uymamamız gerekmektedir .
Sözdizimi Kuralları (syntax)
Bizim yazdığımız yorum satırlarının Javadoc tarafından dikkate alınması içinı
/** ile başlaması ve */ ile bitmesi gerekmektedir. Javadoc mekanızmasını kullanmanın iki etkili yolu vardir birincisi gömülü html (embedded html) , ikincisi ise doc tags .
Doc tag “@” ile başlarlar. sınıfa , metoda ve değişkenlere denk düşen üç adet yorum dökümantasyon tipi vardir.Aşağıdaki şablon örnek bunu açıklamaktadır.
gösterim-20
/** A sınıf yorumu */
public class DocTest {
/** A değişken yorumu */
public int i;
/** A metod yorumu */
public void isYap() {}
|
Unutulmaması gereken başka bir nokta ise Javadoc mevcut olarak(default) public ve protected olan üyelerin dökümanını üretir. private ve friendly üyelerin dökümantasyonu yapmaz , bunların sebeblerine ilerleyen konularda deyineceğiz . Eğer private üyelere ait bilgilerinde dökümante edilmesini istiyorsak o zaman komut satırından
$ javadoc a –private ……
ekini vererek bunu başarabiliriz. (daha fazla bilgi için komut satırından javadoc -help diyebilirsiniz)
Gömülü Html (embedded Html)
Javadoc mekanizmasında kendinize has HTML komutları kullanmanız mümkündür.
gösterim-21 :
/**
* <pre>
* System.out.println("Selamlar");
* </pre>
*/
|
gösterim-22
/**
* Çok güzel <em>hatta</em> liste bile yerleştirebilirsiniz:
* <ol>
* <li> madde bir * <li> madde iki * <li> Madde üç * </ol>
*/
|
<h1>
<hr> gibi etiketlerin (tag) kullanmayın çünkü Javadoc bunları sizin
yerinize zaten yerleştirmekte.
Gömülü HTML mantığı
sınıf ,değişken ve metodlar tarafından desteklenir.
Doc Tag
Ortak kullanılan yorum ekleri
@see : Başka bir
sınıfın , değişkenin veya metodun dökümantasyonunu göstermek için
kullanabilirsiniz.
(sınıf, değişken, ve metod) dökümantasyonlarında , @see etiketini (tag) kullanabilirsiniz.Bu etiketin anlamı , “ baska bir sınıf dökümantasyonuna gönderme yapıyorum” veya “başka bir metod dökümantasyonuna gönderme yapıyorum” veya “başka bir değişken dökümantasyonuna gönderme yapıyorum“ demekdir.
@see classismi
@see classismi#metod-ismi
|
Javadoc gönderme yaptığınız
sınıf/değişken/metod dökümantasyolarının var olup olmadığını
kontrol etmez.Bunun sorumluluğu size aittir.
Sınıflara ait
JavaDoc etiketleri
Sınıflara ait etiketler arayüzler(arayüzler) içinde kullanilabilir (arayüzleri ilerleyen bölümlerde göreceğiz , panik yok !!).
@version : Versiyon numaraları dökümantasyonlamada hayati bir rol aldığını düşünülecek olursa bu etiketin gerçekten önemli bir etiket olduğu anlaşılır. Version etiketinin görünmesini istiyosanız:
$ javadoc –version
parametresi ile calıştırmamız gerekmektedir . Version
etiketini kodumuza yerleştirmek için
gösterim-24
@version versiyon-bilgisi
|
@author : Sınıfı yazan yazar hakkında bilgi verir . author etiketi Javadoc tarafından dikkate alınmasını istiyorsanız
$ javadoc –author
parametresini koymanız
gerekir. Bir sınıfa ait birden fazla author etikeni yerleştirebilirsiniz.
Author etiketini kodumuza yerleştirmek için
gösterim-25
@author author-bilgisi
|
@since : Java kodunun belli bir tarihden itibaren geçerli olduğunu belirtmek için kullanılır .
since
etiketinikodumuza yerleştirmek için
gösterim-26
@since 05.03.2001
|
Değişkenlere
ait JavaDoc etiketleri
Değişkenlere ait dökümantosyonlarda sadece gömülü html (embedded html) veya @see etiketi kullanılabilir.
Metodlara ait JavaDoc
etiketleri
Metod dökümantasyonunda gömülü html ( embedded html) veya @see etiketini kullanabilirsiniz.Ayrıca aşagıdaki etiketleri kullanabilirsiniz.
@param: Metodun
aldığı
parametrenin açıklamasını belirtir. param etiketini kodumuza
yerleştirmek için
gösterim-27
@param parametre-ismi açıklaması
|
@return: Metodun döndürdüğü
değerin açıklamasınıi belirtir. return etiketini kodumuza
yerleştirmek için
@return aciklama
|
@throws: İstisnalar
(exception) ileryen
konularda gösterilecektir. İstisnalar kısa olarak , metodlarda hata
oluşursa cağrılan objelerdir. throws etiketini
kodumuza yerleştirmek için
@throws class-ismi açıklaması
|
@deprecated: Önceden yazılmış
fakat şimdi o metod yerine yenisi yazılmişsa eski metod
deprecated olur.deprecated metodu kullandığınız zaman derleyici tarafından uyarı alırsanız.Deprecated etiketini
kodumuza yerleştirmek için
Dökümantasyon örneği
/** Ilk Java Kodumuzun Dokumantasyonu * Ekrana Selamlar diyen bir uygulama * @author Altug B. Altintas (upux@yahoo.com) * @version 1.0 * @since 09.01.2002 */ public class SelamDoc { /**sayiyi artirmak icin , degiskenler icin bir ornek*/ public int sayac = 0 ; /** siniflarda & uygulumalarda giris noktasi olan metod * @param args disaradan girilen parameterler dizisi * @return donen deger yok * @exception Hic istisna firlatilmiyor */ public static void main(String[] args) { System.out.println("Selamlar !"); } } |
Oluşturmuş olduğumuz bu kaynak koduna ait döküman çıkartmak için komut satırına aşağıdaki yazıp enter tuşana basmak yeterli :
$ javadoc -d javadoc SelamDoc.java
Yukarıdaki komut sayesinde HTML dokumanları bulunduğumuz dizinin altındaki javadoc dizininin içinde oluşturulmuş oldu . Javadoc un komutları ile daha fazla bilgiyi
$ javadoc -help
yazarak ulaşabilirsiniz
Sınıf isimleri ve metod isimleri
Sınıf isimleri uzun
olursa alt çizgi ile ayrılmamalıdır. Sınıf isimleri fiil
cümlesi içermemelidir.
gösterim-30
public class EnKısaYolBulmaAlgoritması {
}
|
Metodlar fiil cümlesi içermelidirler. ilk kelime küçükharf ile başlamaldır.
gösterim-son
public void yolBul() {
}
|
Bu bölümde Javayı tanıyıp , Java ile nelerin yapılabileceğini gördük . Obje ile Sınıflar arasındaki farkdan bahsettik , Objelerin ve onlara ait referansların nelerde durduğu gördük . Javanın en önemli özelliklerinde biri çöp toplayıcısıdır bu sayade kodu yazan kişiler daha az risk üstlenir ve daha rahat ederler . Bu özellik diğer dillerde olmayan bir özelliktir fakat bu rahatlığında bir bedeli vardır , bu bedelin ne olduğunu ilerleyen bölümlerde göreceğiz .
Sorular :
İlkel tipler ile onlara ait sarmalıyıcı tipler arasında farkları açıklayınız .
Geçerlilik alanları ile ilgili birer örnek yapınız ?
İki adet yeni sınıf oluşturun , birinci sınıfın ismi : BankaA , digerinin ismi ise BankaB olsun.BankaA sınıfının içersinde ekrana "Selamlar Ben BankaA" basan bir statik olmayan metod yazın ve bu metodu BankaB nin içersinde Çagırın . Uygulama java BankaB diyince çalışssın .
örnek 4 ün statik metodlu versiyonunu yazın .( BankaA nın "Selamlar Ben BankaA" basan metodunu static yapın) . BankaA yı , BankaB nin içersinde new() ile oluşturmadan çağırın.
Dışarıdan 3 parametre alan bir uygulama yazın .
|
Mail Grubu Java Kitap Projesinin mail grubuna üye olmak için = java_kitap_projesi-subscribe@yahoogroups.com Üyelikten çıkmak için = java_kitap_projesi-unsubscribe@yahoogroups.com
|
|
Sorulanız ve Yorumlarınız için : upux@yahoo.com |
Bu dökümanın her hakkı saklıdır