Yazilar:

 Sponsor Reklam 


24.09.2008 (04:00)

 Java Anahtar Sözcükleri, Reserved Keywords 
Java'da yer alan anahtar sözcükler (keywords) şunlardır:

* abstract
* assert
* boolean
* break
* byte
* case
* catch
* char
* class
* const (gelecekteki kullanım için ayrılmıştır)
* continue
* default
* do
* double
* else
* enum
* extends
* false
* final
* finally
* float
* for
* goto (gelecekteki kullanım için ayrılmıştır)
* if
* implements
* import
* instanceof
* int
* interface
* long
* native
* new
* null
* package
* private
* protected
* public
* return
* short
* static
* strictfp
* super
* switch
* synchronized
* this
* throw
* throws
* transient
* true
* try
* void
* volatile
* while
Imza: admin

24.09.2008 (03:25)

 synchronized Anahtar Sözcüğü ve Bloğu, Keyword 
Bir metoda erişimi serileştirmek (serialize) için yani oraya o an için tek bir erişimin yapılabilmesi için sychronized anahtar sözcüğü ile tanımlanmış olması gerekmektedir. Böylece o metota yapılan çağrılar sıralı olarak kullanılacaktır. Başka deyişle, örnek üzerindeki kanal senkronize edilmiş metoda girdiğinde, diğer kanallar aynı örnekte yer alan senkronize metodu kullanamaz, kullanmak için diğerinin işinin bitmesini bekler.

Senkronizasyon synchronized bloğu ile de yapılabilmektedir:

synchronized int carp(int a, int b) {
  // Senkronize edilmiş metot
  return a*b;
}
veya
Object nesne = new Object();
synchronized(nesne) {
  // nesne için senkronizasyon bloğu
}

Imza: admin

23.09.2008 (21:02)

 transient Anahtar Sözcüğü, Keyword 
transient çok nadir kullanımı olan, güvenlik amaçlı düşünülmüş bir anahtar sözcüktür. Bir sınıfa ait değişkenler transient belirteci ile belirtilir ise o sınıfa ait bir nesne üretilip kaydedildiğinde (depolandığında) o nesnedeki bu değişkenlerin içeriği kaydedilmeyebilmektedir.  Başka değişle JVM'nin düşük seviye bir parçasıdır, nesnenin kalıcı bir parçası değildir. Bu kelimenin Türkçe karşılığı zaten geçici-fani şeklindedir ve açıklayıcıdır.

Nesne serileştirmenin (object serialization) kontrolü sırasında, serileştirme mekanizmasının genellikle güvenlik sebepleriyle nesnenin bir kısmının kaydedilmesi bu sayde önlenmektedir. Serileşen nesne eski haline getirildiğinde bu parçalara amaçlandığı gibi ulaşılamayacaktır. Bu nedenle transient'i kullanırken dikkatli davranmak gerekmektedir.

Şu örnekte bir object için yapılan serileştirmede kaydedilen object geri getirildiğinde görüleceği üzere transient ile belirtilen değişkenin null değer olarak döndüğü, yani saklanmadığı görülecektir:

Bilgileri tutan Kayıt sınıfımız:

package kodcu.net;

public class Kayit implements java.io.Serializable {

  private int userid;
  private String username;
  private transient String password;

  // Constructor
  Kayit(int userid, String username, String password) {
    this.userid = userid;
    this.username = username;
    this.password = password;
  }

  /**
  * Bilgileri yaziya cevirir
  * @return String
  */

  public String toString() {
    if (password == null) {
      password = "YOK!";
    }
    return ("User ID: " + userid + ", Username: " + username + ", Password: " + password);
  }

}

Ana sınıfımız:

package kodcu.net;

import java.io.ObjectOutputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.FileInputStream;

public class Main() {

  public static void main(String[] args) {
    // Nesnemizi oluşturalım
    Kayit kayit = new Kayit(1, "admin", "123456");
    // Şimdiki bilgileri yazdıralım
    System.out.println(kayit.toString());
    try {
      // Kayıtımızı saklayalım
      ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("kayit.out"));
      oos.writeObject(kayit);
      oos.close();
      // Şimdi de geri getirelim
      ObjectInputStream ois =new ObjectInputStream(new FileInputStream("kayit.out"));
      kayit = (Kayit) ois.readObject();
      // Bilgilerin son halini yazdıralım
      System.out.println(kayit.toString());
    } catch (Exception e) {
      e.printStackTrace();
    } 
  }

}

Elde edilecek çıktı şu şekildedir:

User ID: 1, Username: admin, Password: 123456
User ID: 1, Username: admin, Password: YOK!

transient değişken olan password'ün değeri saklanmadığı için elde edilememiştir.
Imza: admin

22.09.2008 (22:32)

 assert Anahtar Sözcüğü, Keyword 
Yazılan kodda belirli koşulların testinde assert anahtar sözcüğünü kullanabiliriz. Eğer test edilen koşul false değer döndürüyorsa AssertionError sınıfından bir exception fırlatacaktır.

public static void main(String[] args) {
  int a = 18;
  int b = 3;
  int c = 0;
  for (int i=0; i<6; i++) {
    assert b > 0; // b sıfırdan büyük mü testi
    // Bu testi yapmasaydık burada sıfıra bölme hatası alabiliriz
    c = a/b;     
    b--;
  }
}

assert deyiminin kullanımı bu şekildedir ve ürün haldeki programda bulunmamsı gerekir. Test için kullanılmaktadır.
Imza: admin

22.09.2008 (01:53)

 Java'da Birden Fazla Sınıfı Genişletme 
Daha önce kalıtımdan ve extends anahtar sözcüğünden bahsetmiştik. Java'nın mantığında, bir sınıfın birden fazla sınıfı kalıtım yoluyla devralamaması, onları genişletemesi vardır. Bir sınıf en fazla bir sınıfı genişletebilir. Çok biçimli yapıyı kurmak için ise arabirimler vardır. Çoklu kalıtım (multiple inheritance) gereksinimini bir miktar bu sayede çözülmektedir.

Ancak şuraya bakacak olursak bir arabirimin birden fazla sınıfı genişlettiğini göreceğiz. Bazı yerlerde böyle yapılarla karşılaşabilmekteyiz. Bu kullanım, çoklu kalıtım gibi bazı ihtiyaçları gidermek için bazı yerlerde yer almaktadır. Böyle bir yazıma, kullanılan IDE, derleyici zamanı hatası (compile time error) verebilir. Dediğimiz gibi belirli amaçlar için belirli yerlerde kullanılabilmektedir. Tabi gelecekte kullanılabilecek bir yapı için ilk adımlar da olabilir.

Diyebiliriz ki birden fazla sınıfı genişletme, Java'da olmaz diye bir şey yok.
Imza: admin

22.09.2008 (01:37)

 enum Anahtar Sözcüğü, Keyword 
enum, Java'ya JDK 1.5 (Java versiyon 5.0)'den itibaren eklenmiş bir anahtar sözcüktür. Yeni bir tip (type) olarak karşımıza çıkmıştır. class veya interface'den farklı olan enum'un kullanımı şu şekildedir:

// enum kullanım örneği
package kodcu.net;

public enum Yon {
    DOGU, BATI, KUZEY, GUNEY
}

Bir enum tipi içinde sabit değişkenleri barındırır. Kullanımında büyük harfler kullanmak daha uygundur.

package kodcu.net;

public class YonBul {

  Yon yon = Yon.BATI;

  public static void main(String[] args) {
    switch(yon) {
      case DOGU: System.out.println("Doğu yönünde");
                          break;
      case BATI: System.out.println("Batı yönünde");
                          break;
      case KUZEY: System.out.println("Kuzey yönünde");
                          break;
      case GUNEY: System.out.println("Güney yönünde");
                          break;
    }
  } 

}

Ayrıca burada ve şurada da enum tipinden bahsedilmektedir.
Imza: admin

20.09.2008 (21:28)

 Java'da Arabirimler (Interfaces) 
Arabirimler Java'da çok biçimliliği (polymorphism) sağlamakta ve çoklu kalıtım (multiple inheritance) gereksinimini karşılamaktadır. Kullanımında interface tipi ve onun gerçeklenmesi (implements) bulunmaktadır.

Bu konuyla ilgili şurada yer alan yazıya bakabilirsiniz.
Imza: admin

20.09.2008 (21:18)

 interface, implements Anahtar Sözcüğü, Keyword 
class tipinden daha önce burada bahsetmiştik. inteface anahtar sözcüğü ile tanımlananlar ise özet tipler (abstract type) olarak yani arabirimler olarak yapılmaktadır. Bu arabirimler uygulanacak sınıfların yapması gerekenleri içerir. İçinde bulunan metotların bu arabirimi uygulayan sınıf tarafından tanımlanması gerekir. Arabirimler bir çeşit prototip örneği sergiler. Çalışma zamanında da dinamik metot çözümlemesini destekler.

Arabirimde yer alan metotlar gövdesizdir (prototip haldedir, onun formunu belirtir). Bunlar zorunlu olarak özet (abstract) tipte metotlardır. Arabirimde tanımlanan değişkenler de zorunlu olarak final ve static'tir.

Arabirimin sınıflarca uygulanması implements anahtar sözcüğü ile yapılır ve sınıf hiyerarşisinde genişletmenin (kalıtım, extends) aksine bir sınıf birden fazla arabirimi uygulayabilir (implements).

public class Dikdortgen extends Cokgen, implements AlanHesapla, CevreHesapla {
  // Dikdortgen sınıfı Cokgen sınıfından miras alır ve
  // AlanHesapla, CevreHesapla arabirimlerini uygular
  // Arabirimlerdeki metotları tanımlar
}

Ayrıca arabirimler de genişletilebilir.

interface Islem {

  // otomatik olarak abstract tipte olan gövdesiz metotlar
  void carp(); // Gövdesiz halde
  void bol();  // Gövdesiz halde

}

interface DortIslem extends Islem {

  void topla();  // Gövdesiz halde
  void cikart();  // Gövdesiz halde

}

class Hesap implements DortIslem {

  public void carp() {
    // işlemler
  }

  public void bol() {
    // işlemler
  }

  public void topla() {
    // işlemler
  }

  public void cikart() {
    // işlemler
  }

}

Hesap sınıfı Islem arabirimini genişleten DortIslem arabirimini uyguluyor. Bu nedenle carp, bol, topla, cikart metotlarını da tanımlamak zorunda kalıyor.

Görüldüğü gibi arabirimler implements anahtar sözcüğü ile gerçeklenmektedir. Çok biçimlilik için bir yöntemdir. Hagi kurallar kümesinin uygulanacağı bilinmektedir.

Eğer bir sınıf bir arabirimi gerçekleyecek (implements) fakat metotlarını uygulamayacak ise (uygulamak zorunda olmaması için) bu sınıf abstract olarak belirtilmelidir. Bu sınıftan türeyen sınıflar ya üst sınıfın gerçeklediği arabirimin metotlarını uygulamalı ya da yine abstract olarak deklare edilmelidir.

Bu konuyla ilgili şuralara da bakılabilir:
* interface
* java interface
Imza: admin

20.09.2008 (20:46)

 abstract Anahtar Sözcüğü, Keyword 
abstract kelimesi özet anlamındadır. Sınıflar veya metotlar abstract olarak tanımlanabilir.

Arabirimlerde yer alan metotlar abstract olarak yazılmasa da otomatik olarak abstract özelliktedir.

Bir sınıf bir arabirimi uyguluyor fakat onun metotlarını uygulamama durumu var ise abstract olarak tanımlanmalıdır. abstract sınıfların örnekleri-nesneleri (instance) üretilemez. Bu nedenle bu sınıf genişletilebilir ve alt sınıfı abstract sınıf değilse nesnesi üretilebilir. Unutulmamalıdır ki abstract olmayan alt sınıf, üst sınıfın uyguladığı arabirimin metotlarından üst sınıfın uygulamadıklarını içeriyor olmalıdır. Eğer alt sınıf da uygulamayacaksa o da abstract olarak deklare edilmelidir. Böyle durumda yine aynı sebeple bu sınıfın da nesnesi üretilemeyecektir.

Genişletilen bir sınıf bazı metotlarının tüm alt sınıflarında da tanımlanmış olmasını zorunlu kılmak isteyebilir. Böyle bir durumda da tanımlanmasını istediği metotları abstract olarak belirtir.

public abstract class A {

  // Constructor
  A() { }

  protected void metot1() {
    // işlemler
  }

  protected void metot2() {
    // işlemler
  }

  protected abstract void metot3();
  protected abstract void metot4();

}

Örnekte bir abstract sınıf yer alıyor ve ona ait 4 metottan 2'si abstract olarak belirtilmiş. Bu sınıf abstract metotlar içerdiği için abstract olarak tanımlanmak zorunda. Bu sınıf abstract olduğu için sınıfın (new operatörü ile) bir nesnesi üretilemez. Bu sınıfı genişleten (extends) sınıflar abstract değillerse onların nesneleri üretilebilir. Fakat bu alt sınıflar metot3 ve metot4 isimli metotları tanımlamak zorundadır.

Görüldüğü gibi abstract yapı özet oluşturmada veya bazı kuralların yerine getirilmesi konusunda önemli bir yere sahiptir. Arabirimlerin yani polimorfik (çok biçimli) yapının temelini oluşturur.
Imza: admin

20.09.2008 (20:17)

 extends Anahtar Sözcüğü, Keyword 
extends anahtar sözcüğü kalıtımda bir sınıfın genişletilmesinde karşımıza çıkmaktadır. Bir sınıfın birden fazla alt sınıfı olabilirken bir alt sınıfın yalnız bir üst sınıfı olmaktadır.

Hayvanlar sınıfı Memeliler, Sürüngenler, Kuşlar sınıflarının üst sınıfıdır. İnsanlar, Maymunlar, Kediler, Köpekler sınıfları da Memeliler sınıfının alt sınıflarıdır. Memeliler sınıfının bir üst sınıfı varken birden fazla alt sınıfı olabilmektedir. İşte Java'da sınıf hiyerarşisi bu şekildedir. Bununla ilgili şu yazıya bakabilirsiniz.

extends anahtar sözcüğünün kullanımı şu şekildedir:

public class Insan extends Memeli {
  // Insan sınıfının içi
}

Aynı anda birden fazla sınıf genişletilemez. Şu örnek yanlıştır:

public class Insan extends Memeli, Hayvan, Canli {
  // Yanlış yazılım
}

Imza: admin

 1  ··  7   8   9   10 








Yazilar kaynak gosterilmeden kopyalanamaz © www.kodcu.net // Twitter