Java Dersleri - Devam Etmeyecek

Centeglassered

Kızıltaş Madencisi
Mesajlar
579
En iyi cevaplar
0
Beğeniler
268
Puanları
900
Ruh hali
Buna devam etmeyeceğim çünkü gereksiz olduğunu düşünüyorum. İnternet'te çok daha güzel binlerce rehber varken boşuna böyle bir şey yapmayacağım. Ama silinmesin belki birinin işine yarar.

Selam gençler! Forumdan bayağı bir uzak kaldım. Yazılılar da bitmişken boş vakitlerimde Java öğreteyim dedim. Yararlı olursa ne mutlu bana! :)

Öncelikle İngilizce'ye önem vermeniz lazım. Kesin gerek demiyorum fakat kendi kendinize gelişmek istiyorsanız kesinlikle gerek. Tabi ki de ben terimleri Türkçe olarak yazacağım ama İngilizce olarak da bilmenizde fayda var.

Not: Yazdıklarım daha kolay anlaşılsın diye öyküleme yoluna gittim. Kafalar karışmasın. Olayın tam gerçeğini yazmamış olabilirim. Sadece akla yatkın olsun diye böyle yazıyorum.

Temelden anlamazsanız ilerde kafanız karışır!
O zaman temelden girelim! :)

Bilgisayar Programı

Bilgisayarın anlayacağı dilde belli bir komut dizisidir. Bilgisayar yalnızca kendine söyleneni yapar!

Programlama Dili
Bilgisayarın algılayabileceği dillere programlama dili denir. Bilgisayara komut vermek için bu dilleri bilmek gerekir. Programlama dilleri tamamen mantığa dayalıdır, sistemlidir. Çünkü bilgisayarlar insanlar gibi algılayamaz. Bir dil insana ne kadar yakınsa o kadar yüksek seviyelidir ve kolaydır. Bir dil insana ne kadar uzaksa o kadar düşük seviyelidir ve zordur. Fakat düşük seviyeli dilleri bilgisayar daha kolay anlayacağı için onlar daha hızlı ve güçlüdür.

Derleyici
Şimdi biz kodumuzu metin olarak yazıyoruz iyi güzel de bilgisayar metini nasıl komuta çevirecek? Eğer her çalıştığımızda bunu yaparsa programların açılması yıllar alır ve her satır önce komuta çevrileceği için yavaş olur. İşletim sistemleri gibi devasa yapıları hesaba katmıyorum bile. O zaman düz bir metini komutlara çevirecek bir şeye ihtiyacımız var. İşte bu şeylere derleyici diyoruz. Bazı dillerde bu sistem yoktur ve program çalışırken metin komutlara çevrilir. Bu nedenle bu diller daha yavaştır. Yani bir dillin derleme sistemi ile çalışması ona hız kazandırır. Ve derleme sırasında optimizasyon da yapılabilir. Yani aynı işlemi daha hızlı bir şekilde yapmanın yolu varsa o kullanılır.

Şuraya bir göz atın ve görüşürüz!
Bir dakika şuraya da bakın!

Sancılı teorik bilgilerle devam! Yazma işini size ve hayal gücünüze bırakıyorum. :)

Nesne (Object)
Herkes diyor "Java nesneye yönelik bir dildir." iyi güzel de nesne ne? Nesne gerçek bir nesnenin sanal versiyonudur. Ve her nesnenin bir türü bir sınıfı vardır. Şöyle düşünelim köpek bir nesnedir. Peki özellikleri nelerdir? Basit olarak rengi ve adı olsun. Bu özellikleri değişken dediğimiz veri yapılarında saklayacağız. Özellikleri dışında yapabileceği şeyler de fonksiyonlarıdır. Havlamak gibi. Eğer bir fonksiyon bir sınıfın içinde ise buna metot denir. Java da her şey sınıflarda olduğu için bütün fonksiyonlar ayrıca metottur.

Kısa bir özet; bir nesnenin özellikleri değişken, fonksiyonları metottur.

Sınıf (Class)
Tamam nesnenin az çok bir görüntüsü oluştu peki sınıf nedir? Sınıflar nesnelerin iskeleti gibidir. Köpek diye bir sınıf oluşturursunuz daha sonra köpek nesnesinin değişkenlerini ve metotlarını yazarsınız. Daha sonra constructor dediğimiz özel metotlar ile o sınıfın bir nesnesini oluşturursunuz.

Örneklerle her şeyi kavrayacaksınız şimdilik devam edin.

Paket (Package)
Paketler sınıfların gruplanmasıdır. Sınıfların içinde bulunduğu klasörler olarak da düşünebilirsiniz. Eğer aynı isimde iki sınıf varsa bunları paketleri ile ayırırsınız. Bu mantıktan şu çıkar; aynı isimli iki sınıf aynı pakette olamaz.

Mesela "hayvan" adında bir paket oluşturup içine Kedi, Köpek ve Yılan sınıfları koyabilirsiniz.

Hadi birinci ve ikinci derste gördüklerimizi kullanalım. Birinci derste verdiğim bağlantılardan -kendilerine teşekkür ediyorum çok güzel açıklamışlar tekerleği yeniden icat etmek istemedim- yüklediğiniz Eclipse programını açın. Arayüzü çok karmaşık gelebilir ama öğrenince bebek oyuncağı gibi.

İlk önce bir workspace isteyecek. Yani bir çalışma alanı. Eclipse sınıfları, paketleri falan bu konumda saklayacak. Ona göre bir yer seçin. Ya da olduğu gibi bırakın o bir yer seçer. :) Ayrıca birden fazla workspace oluşturabilirsiniz. (File > Switch Workspace) Sınıfların depolanacak neyi var diyebilirsiniz. Sınıflar metin halinde iken "BilmemNe.java" olarak kaydedilirler. Birinci derste bahsettiğimiz derleme işleminden sonra "BilmemNe.class" olarak kaydedilirler. Bu arada Eclipse otomatik olarak derler.

Şimdi gel gelelim projeye. Çalışma alanı seçtikten sonra Eclipse açılmalı ve başlama ekranı gibi bir şey çıkmalı. Uzun zamandır yeni bir workspace oluşturmadığım için ne olduğunu pek hatırlamıyorum ama o ekranı kapatın. Sol tarafta "Package Explorer" olmalı. Ona sağ tıklayıp açılan bağlam menüsünden New > Java Project diyin. Bir kutu çıkacak bu da başta karmaşık gelebilir ama kullandıkça öğrenirsiniz.



Proje oluşturduktan sonra en önemli iki klasör var. Biri src diğeri de bin. src klasöründe .java ile biten kaynak kodları (okunabilir, metin haldeki kodlar). bin klasöründe ise .class uzantılı dosyalar yani derlenmiş (bytecode) bulunur. Tabi biz src ile uğraşacağız. Zaten package expolerer'da bin klasörünü göremezsiniz. src klasörüne sağ tıklatıp açılan bağlam penceresinden New > Class diyerek yeni bir sınıf, New > Package diyerek yeni bir paket oluşturabilirsiniz.



Örnek olarak proje oluşturma ekranında Project Name kutucuğuna "Hayvanat Bahçesi" yazalım ve projeyi oluşturalım. Diğer ayarlara gerek yok. Daha sonra yeni paket oluşturma ekranında Source Folder kutucuğuna "Hayvanat Bahçesi/src" yazın. Name kutucuğuna da "hayvan" yazın. Ve paketi oluşturun. Son olarak sınıf oluşturma penceresinden Source Folder'a "Hayvanat Bahçesi/src", Package'a "hayvan", Name'e de "Kedi" yazın ve sınıfı oluşturun. Aynı şekilde Köpek ve Yılan sınıflarını da oluşturabilirsiniz.

Artık sınıf oluşturabildiğinize göre sonraki bölümde kod yazmaya girebiliriz. Ama bugünlük bu kadar. :) Umarım yararlı oluyordur.

Komutlar
Metotları ve değişkenleri ikinci derste yazmıştım. Şimdi ise bunları kullanmaya gelelim. Komutlar bir metodun çağırılması (çalıştırılması) veya bir değişkenin değerinin değiştirilmesi olabilir. İlerleyen kısımlarda göreceğiz. Bilmeniz gereken her komuttan sonra ";" (noktalı virgül) işareti kullanılır. Komutların ayrı satırlarda olması gerekmez.
Ya da bir komudun tamamının aynı satırda olması gerekmez. Bu Java'nın whitespace dediğimiz görünmez karakterleri es geçmesi yüzündendir. (Tab, space, enter gibi)
PHP:
// Örnek 1
komut1;
komut2;

// Örnek 2
komut1; komut2;

// Örnek 3
kom
ut1;

Bloklar
Bloklar bir veya birden fazla komutun toplanması ile oluşur. Bu komutlar "{}" (küme parantezi) arasına yazılır. Bir blok içinde oluşturulan nesneler blok sonunda bellekten silinir. Yani yok olur.
PHP:
// Örnek 4
{ // bloğun başı
    komut1;
    komut2;
} // bloğun sonu

// Örnek 5
{ komut3; }

Değişkenler
Bir veri tutan yapılardır diyebiliriz. İkiye ayrılırlar Temel Türler ve Nesneler. Nesnelerden zaten bahsetmiştik. Oluşturulmalarına da sonra gireceğiz.

Temel (İlkel) Türler
Bu türler bir nesneden daha ilkeldirler. Metotları ve değişkenleri olmayan nesneler gibi düşünebilirsiniz. Bir sayı veya karakter mesela. Aslında her birinin sınıfı var fakat onlar ileri düzey şeyler. Örnek olarak bir tam sayıyı verebiliriz. Tam sayının bir metodu yok. Fakat Tam Sayı sınıfında bir metini sayıya çeviren bir metot olabilir.

Şuradan ikilik sisteme bakın.

Gördüğünüz gibi ikilik sistemde yalnızca iki rakam kullanarak veri saklayabiliyoruz. İşte her 1 ve 0'a biz bit diyoruz.
bayt = 8 bit
kilobayt = 1024 bayt
...

Bellekteki veriler de ikilik sistemde saklanır. Yani bütün değişkenlerimizin belli bir boyutu vardır. Ayrıca bir değişkenin oluşturulması komutu şöyledir;

PHP:
// Örnek 1 - Değişken oluşturma
anahtarKelime değişkenAdı;

// Örnek 2 - Değer atama
değişkenAdı = değişkenDeğeri;

// Örnek 3 - İkisi bir arada
anahtarKelime değişkenAdı = değişkenDeğeri;

// Örnek 4 - Birden Fazla Değişken
anahtarKelime değ1, değ2, değ3;

// Örnek 5 - Karma
anahtarKelime değ1 = değer1, değ2, değ3 = değer2;


Not: Değişken adı bir harfle başlar ve daha sonra rakam kullanılabilir. Örnek; d1, d2, d3
Not: Java büyük harfi ve küçük harfi ayrı tutar. Aynı adla iki değişken oluşturamazsınız. Yani "değişken" ve "değişken" hata verir. Fakat "değişken" ve "Değişken" normaldir.
Not: Java'da bütün tam sayıların + veya - oldukları da depolanır. (signed) Ve Java two's complement integer sistemini kullanır. Buradan (İngilizce) bakabilirsiniz.
Not: Java'da kayan nokta sayıları (floating point numbers) IEEE 754 floating point standardındadır. Buradan bakabilirsiniz.


Anahtar Kelimesi (Adı): Açıklaması
byte: 8-bit işaretli (signed) tam sayı two's complement integer
short:
16-bit işaretli (signed) tam sayı two's complement integer
int:
32-bit işaretli (signed) tam sayı two's complement integer
long:
64-bit işaretli (signed) tam sayı two's complement integer
float:
32-bit işaretli (signed) gerçel sayı single-precision IEEE 754 floating point
double:
64-bit işaretli (signed) gerçel sayı double-precision IEEE 754 floating point
boolean:
1-bit bilgi koşul true-false
char:
16-bit karakter Unicode

PHP:
// Örnek 6 - Örnek 1'den hatırlayın değişken oluşturmanın kalıbı var.
int yaş = 15;
char harf1 = 'C', harf2 = 'E', harf3 = 'M';
boolean erkek = true;
double kiloBölüBoy = 73 / 175;


Ve merak etmeyin zevkli yerler gelecek... Sanırım :)

Operatörler
Şimdi size operatörlerden bahsedeceğim. Veriyi düzenleyen bir işlem gibi düşünebilirsin. Bir sayıya başka bir sayıyı eklemek gibi. Operatörleri beşe ayıracağım; Sayısal Operatörler, Koşulsal Operatörler, Metinsel Operatörler, Atama Operatörleri ve Genel Operatörler. (Kağıt üzerinde böyle bir şey yok. Ben oluşturdum. Orijinalı: Operators)

Sayısal Operatörler
Sayısal değişken türlerinde kullanılan operatörler. Bu türler küçükten büyüğe; byte, short, int, long, float, double. Unutmayın sayısal bir işlem yaparken iki değer varsa sonucun türü bu değerlerden büyük olan türe göredir. Yani bir float ile bir double toplanırsa sonuç double olur.

+ Toplama Operatörü: İki sayıyı toplar.
- Çıkarma Operatörü: İki sayıyı çıkarır.
- Aksi Operatörü: Bir sayıyı pozitifse negatife, negatifse pozitife, sıfır ise sıfıra çevirir. Ya da -1 ile çarpar.
* Çarpma Operatörü: İki sayıyı çarpar.
/ Bölme Operatörü: İki sayıyı böler.
% Kalan Operatörü: İki sayının kalanını verir.
++ Arttırma Operatörü: Bir sayıyı 1 arttırır ve değerini verir. Eğer öne koyulursa arttırıp değeri verir, eğer ardına koyulursa değeri verip arttırır.
-- Azaltma Operatörü: Bir sayıyı 1 azaltır ve değerini verir. Eğer önüne koyulursa azaltıp değeri verir, eğer ardına koyulursa değeri verip azaltır.
- Bit Çevirme Operatörü: Bir sayının bitlerinden 0 olanı 1, 1 olanı 0 yapar.
<< Bit Sola Kaydırma Operatörü (Signed): Bir sayının bitlerini diğer sayı kadar sola kaydırır. Sağdaki hanelere 0 ekler.
>> Bit Sağa Kaydırma Operatörü (Signed): Bir sayının bitlerini sağa kaydırır. En sağdaki sayı yok olur. En sola en soldaki sayı tekrar eklenir.
>>> Bit Sağa Kaydırma Operatörü (Unsigned): Bir sayının bitlerini sağa kaydırır. En sağdaki sayı yok olur. En sola 0 eklenir.
& Bit VE Operatörü: Her bit ayrı ayrı karşılaştırılır. İki tarafın biti de 1 ise sonuç 1 değilse 0 dır.
| Bit VEYA Operatörü (Kapsayıcı VEYA): Her bit ayrı ayrı karşılaştırılır. İki tarafın bitlerinden herhangi biri 1 ise sonuç 1 değilse 0 dır.
^ Bit Özel VEYA Operatörü: Her bit ayrı ayrı karşılaştırılır. İki tarafın bitleri farklı ise sonuç 1 aynı ise sonuç 0 dır.

PHP:
// Toplama Operatörü
int sayi1 = 3, sayi2 = 4;
int sonuc = sayi1 + sayi2; // sonuc = 7

// Çıkarma Operatörü
sonuc = sayi1 - sayi2; // sonuc = -1

// Aksi Operatörü
sonuc = -sayi1; // sonuc = -3

// Çarpma Operatörü
sonuc = sayi1 * sayi2; // sonuc = 12

// Bölme Operatörü
sonuc = sayi1 / sayi2; // sonuc = 0

// Kalan Operatörü
sonuc = sayi1 % sayi2; // sonuc = 3

// Arttırma Operatörü
sayi1++; // sayi1 = 4
sonuc = sayi1++; // sonuc = 4 sayi1 = 5
sonuc = ++sayi1; // sonuc = 6 sayi1 = 6

// Azaltma Operatörü
sayi1--; // sayi1 = 5
sonuc = sayi1--; // sonuc = 5 sayi1 = 4
sonuc = --sayi1; // sonuc = 3 sayi1 = 3

// Bit Çevirme Operatörü
sonuc = -sayi1;
// sayi1 =  3 = 00000000 00000000 00000000 00000011
// sonuc = -4 = 11111111 11111111 11111111 11111100

// Bit Sola Kaydırma Operatörü
sonuc = sayi1 << 3;
// sayi1 =  3 = 00000000 00000000 00000000 00000011
// sonuc = 24 = 00000000 00000000 00000000 00011000

// Bit Sağa Kaydırma Operatörü (Signed)
sayi1 = -24;
sonuc = sayi1 >> 3;
// sayi1 = -24 = 11111111 11111111 11111111 11101000
// sonuc =  -3 = 11111111 11111111 11111111 11111101

// Bit Sağa Kaydırma Operatörü (Unsigned)
sonuc = sayi1 >>> 3;
// sayi1 =       -24 = 11111111 11111111 11111111 11101000
// sonuc = 536870909 = 00011111 11111111 11111111 11111101

// Bit VE Operatörü
int sayi3 = 12, sayi4 = 2;
sonuc = sayi3 & sayi4;
// sayi3 = 12 = 00000000 00000000 00000000 00000110
// sayi4 =  2 = 00000000 00000000 00000000 00000010
// sonuc =  2 = 00000000 00000000 00000000 00000010

// Bit Kapsayıcı VEYA Operatörü
sayi4 = 1;
sonuc = sayi3 | sayi4;
// sayi3 = 12 = 00000000 00000000 00000000 00000110
// sayi4 =  1 = 00000000 00000000 00000000 00000001
// sonuc = 13 = 00000000 00000000 00000000 00000111

// Bit Özel VEYA Operatörü
sayi4 = 8;
sonuc = sayi3 ^ sayi4;
// sayi3 = 12 = 00000000 00000000 00000000 00000110
// sayi4 =  8 = 00000000 00000000 00000000 00000100
// sonuc =  4 = 00000000 00000000 00000000 00000010


Devamı gelecek... Şimdilik yemek yeyip yatacağım. Hayırlı Ramazanlar. :D
Ayrıca Ders 5'deki bir hatayı düzelttim. Aslında büyük bir hataydı. :D
 


Son düzenleme:

Kronik2143

Elmas Madencisi
Mesajlar
835
En iyi cevaplar
0
Beğeniler
447
Puanları
1,090
Bana pek java dersi gibi gelmedi.
 

CrafterMan24

Arduino is my life :C
Mesajlar
570
En iyi cevaplar
0
Beğeniler
414
Puanları
0
Aslında Java ve .NET de JIT derleyicili olduklarından çalışma zamanında satır satır okunarak interprete ediliyorlar. Java ve .NET derlenmesi kodu Java için "Bytecode", .NET için "CIL" adı verilen bir "dil"imsi şeye dönüştürüyor, ve bu kod satır satır okunuyor.

.NET CIL örneği:
Kod:
.class public Foo
{
    .method public static int32 Add(int32, int32) cil managed
    {
        .maxstack 2
        ldarg.0 // load the first argument;
        ldarg.1 // load the second argument;
        add     // add them;
        ret     // return the result;
    }
}


Java Bytecode örneği:
Kod:
0:   iconst_2
1:   istore_1
2:   iload_1
3:   sipush  1000
6:   if_icmpge       44
9:   iconst_2
10:  istore_2
11:  iload_2
12:  iload_1
13:  if_icmpge       31
16:  iload_1
17:  iload_2
18:  irem
19:  ifne    25
22:  goto    38
25:  iinc    2, 1
28:  goto    11
31:  getstatic
34:  iload_1
35:  invokevirtual
38:  iinc    1, 1
41:  goto    2
44:  return
 

Centeglassered

Kızıltaş Madencisi
Mesajlar
579
En iyi cevaplar
0
Beğeniler
268
Puanları
900
Ruh hali
Aslında Java ve .NET de JIT derleyicili olduklarından çalışma zamanında satır satır okunarak interprete ediliyorlar. Java ve .NET derlenmesi kodu Java için "Bytecode", .NET için "CIL" adı verilen bir "dil"imsi şeye dönüştürüyor, ve bu kod satır satır okunuyor.

.NET CIL örneği:
Kod:
.class public Foo
{
    .method public static int32 Add(int32, int32) cil managed
    {
        .maxstack 2
        ldarg.0 // load the first argument;
        ldarg.1 // load the second argument;
        add     // add them;
        ret     // return the result;
    }
}


Java Bytecode örneği:
Kod:
0:   iconst_2
1:   istore_1
2:   iload_1
3:   sipush  1000
6:   if_icmpge       44
9:   iconst_2
10:  istore_2
11:  iload_2
12:  iload_1
13:  if_icmpge       31
16:  iload_1
17:  iload_2
18:  irem
19:  ifne    25
22:  goto    38
25:  iinc    2, 1
28:  goto    11
31:  getstatic
34:  iload_1
35:  invokevirtual
38:  iinc    1, 1
41:  goto    2
44:  return
Dediğim gibi işi hikayeye vurdum kolay anlaşılsın diye. :)
 

Shaduel

Marangoz
Mesajlar
50
En iyi cevaplar
0
Beğeniler
12
Puanları
0
Peki ben şöyle düşünüyorum, hadi nesneyi objeyi metodu class paket herşeyi oluşturduk, bir program yazacağız örneğin eclipse ile, o programa nasıl pencere yapıcaz nasıl içine resim koyucaz, nasıl içine buton koyucaz? Benim merak ettiklerim bunlar.
 

MegaCrafter

Obsidyen Madencisi
Mesajlar
1,419
En iyi cevaplar
0
Beğeniler
1,542
Puanları
3,070
Peki ben şöyle düşünüyorum, hadi nesneyi objeyi metodu class paket herşeyi oluşturduk, bir program yazacağız örneğin eclipse ile, o programa nasıl pencere yapıcaz nasıl içine resim koyucaz, nasıl içine buton koyucaz? Benim merak ettiklerim bunlar.
Hepsini Swing GUI sayesinde yapıyoruz. JFrame, JPanel, JLabel, JButton kullanarak yapılabiliyor. En basitleri de onlar zaten.
 

Shaduel

Marangoz
Mesajlar
50
En iyi cevaplar
0
Beğeniler
12
Puanları
0
Ben javanın temelindeyim ama merak meraktır işte, sormadan edemiyor insan.
şu an öğrendiğim terimler şunlar;
- if
- else
- return
- boolean
- metodcagir()
Ben öğrenmek istiyorum fakat yardım edecek pek insan yok :/
Edit: Sence şu durumdayken ne yapmalıyım. Bana bir şey öner.
 

Centeglassered

Kızıltaş Madencisi
Mesajlar
579
En iyi cevaplar
0
Beğeniler
268
Puanları
900
Ruh hali
Ben javanın temelindeyim ama merak meraktır işte, sormadan edemiyor insan.
şu an öğrendiğim terimler şunlar;
- if
- else
- return
- boolean
- metodcagir()
Ben öğrenmek istiyorum fakat yardım edecek pek insan yok :/
Edit: Sence şu durumdayken ne yapmalıyım. Bana bir şey öner.
Daha çok yol var be şampiyon. Öncelikle konsol ile takılmaya biraz daha devam et derim. Daha sonra seviye atlarsın zaten. Öğrenecek kavramlar bol. Sınıflar, nesneler, sabit metotlar, kalıtım, arayüzler falan.
 

Shaduel

Marangoz
Mesajlar
50
En iyi cevaplar
0
Beğeniler
12
Puanları
0
Orta düzey Java bilgisine sahip olmam için kaç yıl java üzerinde durmalıyım?
 

Üst