SORU
27 Mart 2013, ÇARŞAMBA


Nasıl final anahtar kelime çalışır

Java'da değişkenler için final anahtar kelime değerlerini, değiştirilemez yapmak için kullanıyoruz. Ama sınıfın yapıcı / yöntemler değeri değiştirebilirsiniz görüyorum. Eğer değişken static tekrar edelim, o zaman derleme bir hatadır.

İşte kod:

private final List foo;

public Test()
{
    foo = new ArrayList();
    foo.add("foo"); // Modification-1
}
public static void main(String[] args) 
{
    Test t = new Test();
    t.foo.add("bar"); // Modification-2
    System.out.println("print - "   t.foo);
}

Yukarıdaki kod gayet iyi çalışıyor ve hiçbir hata.

Şimdi değişim static olarak değişken:

private static final List foo;

Şimdi derleme bir hatadır. Nasıl bu final gerçekten işe yarıyor mu?

CEVAP
27 Mart 2013, ÇARŞAMBA


Buen sevdiğim soru. Muhabir kurucular için saygı, yöntem, sınıf değişkenleri(statik değişkenler), yerel Değişkenler ile nesne hakkında davranış ne anladığınızı buraya, öğrenmek için çalışır.

import java.util.ArrayList;
import java.util.List;

class Test {
    private final List foo;

    public Test() {
        foo = new ArrayList();
        foo.add("foo"); // Modification-1
    }

    public void setFoo(List foo) {
//      this.foo = foo;  //compile time error.
    }
}

Yukarıdaki durumda Test yapıcı setFoo yöntem belirledik.
Kurucu hakkında:Kurucu sadece çağrılabilirbirnew sözcüğünü kullanarak bir nesne oluşturma başına zaman. Programcı olamaz defalarca yapıcı şekilde tasarlanmıştır çünkü kurucu çağırmak.
Yöntemi hakkında:Yöntem programcı istediği zaman çağrılabilir ve derleyici programcı yöntemi sıfır ya da birden çok kez çağırabilir bilir.

Senaryo 1

private final List foo;  // 1

fooörnekdeğişken. Test sınıf örnek foo Test sınıf nesnesi içerisine kopyalanacaktır değişken nesne. yarattığımızda Eğer foo kurucu içinde o zaman biz atarsanız derleyici o Kurucu yalnızca bir kez çağrılır. yapıcı içinde atamak için sorun yok.

foo içinde yöntem o zaman biz atarsanız derleyici bu yöntemi, birden çok kez çağrılabilir bilir. Değer değişmesi gerekecek final değişken için izin olmayan birden çok kez. Son değişken yalnızca bir defa değer atayabilirsiniz. Derleyici kurucu için iyi bir seçim mi karar veriyor!

Senaryo 2

private static final List foo = new ArrayList();

foo şimdistatikdeğişken. Test sınıf nesne yarattığımızda sonra foo foo statik olduğundan Test sınıf nesne kopyalanacaktır. Şimdi foo her nesnenin özellik değil. Bu Test sınıf özelliğidir. Ama foo görülebilecek tarafından çok sayıda nesne ve eğer her hangi bir nesne oluşturulur kullanarak yeni bir anahtar kelime olan sonuçta çağırmak Test kurucu sonra değeri değişecektir anda birden fazla nesne oluşturma (Hatırla static foo değil kopyalanan her nesne artık ama paylaşılır arasında birden çok nesne.)

Senaryo 3

t.foo.add("bar"); // Modification-2

Modification-2 soru yukarıda. Yukarıdaki durumda başvurulan nesne ilk değiştirmiyorsunuz ama izin foo içinde içeriğini ekliyoruz. Derleyici eğer new ArrayList() foo referans değişkeni için nesne atamak çalışırsanız yakınıyor.
Kuraleğer final referans değişken başlatılmamış nesne varsa o sensin ArrayList nesne farklı bakın değiştiremez. (ArrayList)

sonsınıfın alt sınıfı olamaz
sonyöntemleri geçersiz kılınamaz. (Bu yöntem, üst sınıfta)
sonyöntemleri geçersiz kılabilirsiniz. (Gramer şekilde okuyun. Alt sınıf içinde bu yöntem)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jonathan Leack

    Jonathan Lea

    26 ŞUBAT 2007
  • RD

    RD

    19 NİSAN 2006
  • The10HourMan

    The10HourMan

    28 EYLÜL 2012