SORU
25 NİSAN 2010, Pazar


Java null nedir?

null nedir?

null Her şey bir örneğidir?

Ne set null mı ait?

Nasıl hafızasında temsil edilir?

CEVAP
25 NİSAN 2010, Pazar


Boş bir şey, bir örneği?

Hayır, null instanceof Bir tür yok.

15.20.2 Type Comparison Operator instanceof

RelationalExpression:
    RelationalExpression instanceof ReferenceType

Çalışma zamanında, instanceof operatörün sonuç değeri trueRelationalExpressionnull ve başvuru için döküm olabilirReferenceTypeClassCastException bir yükseltme olmadan. Aksi takdirde sonuç false.

Bu herhangi bir türü için E herhangi o == null, o instanceof R ** ** E o * 15 * her zaman * 19 * olduğu anlamına gelir.


Ne ayarlayın '' ait? null

JLS 4.1 The Kinds of Types and Values

Ayrıca bir özel vardırnulltürü, ifade türü henüz ismi null,. Çünkünulltür adı yok, imkansız bir değişken bildirmek içinnullyazın veya atama içinnullyazın. null başvuru ifadesi mümkün olan tek değerdirnullyazın. null referans her zaman herhangi bir referans türüne çevirebilirsiniz. Uygulamada, programcı yok sayabilirsiniznullyazın ve sadece null sadece herhangi bir başvuru türü bir özel değişmez olduğunu kabul edelim.


Null nedir?

Bu İDEA, yukarıda alıntı olarak, pratikte sadece bu kadar iddia edebilirsin diyor "sadece herhangi bir başvuru türü bir özel değişmez".

Java null == null (bu her zaman diğer dillerde böyle değil). Sözleşme, aynı zamanda bu özel mülkiyet (java.lang.Object) olduğunu da not:

public boolean equals(Object obj)

Olmayannull herhangi bir referans değer x, x.equals(null) return false.

Ayrıcavarsayılan değer(bunlara sahip olmayan değişkenler için) tüm başvuru türleri için:

JLS 4.12.5 Initial Values of Variables

  • Her sınıf, değişken, örnek değişken veya dizi bileşen ile başlatıldıvarsayılan değeroluşturulduğunda:
    • Tüm başvuru türleri için varsayılan değer null.

Bu nasıl kullanılacağı değişir. Buna ne denir etkinleştirmek için kullanabilirsinizgeç başlatmaalan, bir alan aslında eskiden bu kadar null başlangıç değeri olurdu, "" değerini hesaplamak için pahalı olabilir). gerçek yerini nerede

Aynı zamanda diğer anlamları vardır. java.lang.System gerçek bir örnek verelim:

public static Console console()

Verir: Sistem varsa konsol, aksi takdirde null.

Bu çok yaygın bir kullanım deseni: null-var olmayan bir nesnenin belirtmek için kullanılır.

Burada başka bir kullanım örneği, java.io.BufferedReader bu sefer:

public String readLine() throws IOException

Verir: Eğer akışın sonuna ulaşıldı 39* *satır, satır sonlandırma karakterleri, veya null herhangi dahil içeriğini içeren.

Burada, readLine() sonunda null sonunu göstermek için dönünceye kadar her bir hat için instanceof String döndürecektir. Bu, aşağıdaki gibi her satırı işlemek için izin verir

String line;
while ((line = reader.readLine()) != null) {
   process(line);
}

Bir fesih durumu readLine() null, dönen bağlı değildir, böylece API tasarlayabilir ama bu tasarım işleri kısa yapma avantajına sahip olduğu görülmektedir. Boş bir satır 47* *çünkü boş satır ile bir sorun yoktur, hiç unutmayın.

Başka bir örnek verelim, java.util.Map<K,V> bu sefer:

V get(Object key)

Değeri belirtilen key eğer bu harita eğer eşleştirilmiş, veya null döner anahtarı için hiçbir eşleştirme içerir.

Eğer bu haritayı verir null değerleri, sonra bir dönüş değeri null yok ille gösteren bir harita içerir hiçbir eşleştirme için anahtar; onun da mümkün olduğunu harita açıkça haritalar tuşu null. containsKey ameliyat Bu iki dava etmek için kullanılır.

Burada null kullanarak işleri karıştırır nasıl görmeye başlarız. İlk deyim, anahtarı, null eşlenmiş değil mi eğer iade olduğunu söylüyor. İkinci ifade ise anahtarı null eşleştirilmiş bile olabilir diyorayrıcaiade edilmesi.

null izin vermeyerek buna karşılık, java.util.Hashtable basit şeyler tutar anahtarları ve değerleri; null, açıkça dönerse V get(Object key), anahtar eşlenen olmadığı anlamına gelir.

API geri kalanını okuyun ve null kullanıldığı bulabilirsiniz. Her zaman değil unutmayınen iyi uygulamaörnekler.

Genel olarak konuşursak, null belirtmek için özel bir değer olarak kullanılır:

  • Başlatılmamış devlet
  • Fesih şartı
  • Mevcut olmayan nesne
  • Bilinmeyen bir değer

Nasıl hafızasında temsil edilir?

Java? Seni ilgilendirmez. Ve en iyi o şekilde duruyor.


null iyi bir şey mi?

Bu şimdi sınırda özneldir. Bazı insanlar null önlenebilirdi birçok programcı hataları neden olacağını söylüyorlar. Bazı Java gibi NullPointerException yakalar bir dil, iyi başarısız-hızlı olacak, çünkü bunu kullanmak için programcı hataları olduğunu söylüyorlar. Bazı insanlar Null object pattern, vb kullanarak null kaçının.

Bu kendi başına çok büyük bir konu olduğunu, en iyi başka bir soruya cevap olarak tartışıldı.

null kendini mucidi, C.A.R Hoare (quicksort şöhret): bir Alıntı ile bitireceğim

Bu milyar dolarlık hata benim diyorum.1965 yılında null başvuru icat edildi. O zaman, nesne yönelimli bir dil (ALGOL W) başvuruları için ilk kapsamlı tür sistemi tasarımı yaptım. Amacım tüm referanslarını kontrol kullanın otomatik olarak derleyici tarafından gerçekleştirilen kesinlikle güvenli olmalı, emin olmak için. Ama sadece uygulamak için çok kolay oldu çünkü null bir referans koymak için günaha karşı koyamadım. Belki de bu son kırk yıl içinde acı ve zarar milyarlarca dolar neden olan sayısız hatalar, güvenlik açıkları ve sistem çöker yol açtı.

video of this presentation daha derindir; tavsiye edilen bir saat.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • David Wills

    David Wills

    31 Aralık 2007
  • Learn Math Tutorials

    Learn Math T

    20 Kasım 2011
  • sghaff1

    sghaff1

    23 Mart 2009