SORU
5 Kasım 2012, PAZARTESİ


Neden Java derleyici bu değişken her zaman başlatıldı anlamıyor?

class Foo{
    public static void main(String args[]){
        final int x=101;

        int y;
        if(x>100){
            y=-1;
        }
        System.out.println(y);
    }
}

Java derleyici ifade her zaman doğru ve bu nedenle y ise bu durumu her zaman başlatılır anlar. Hayır, beklendiği gibi hata derleme.

class Bar{
    public static void main(String args[]){
        final int x;
        x=101;

        int y;      
        if(x>100){
            y=-1;
        }
        System.out.println(y);
    }
}

Ama iki satır x beyanı ve başlatma kırarım, derleyici bu durum her zaman doğru almak için görünmüyor ve y her zaman başlatılır. Bu Güneş geliştiriciler cevapsız bir şey mi?

final int x;
x=101;
byte b;
b=x;
System.out.println(b);

Aynı şey burada olur ve derleyici hata hassasiyet kaybı verir.

final int x=101;
byte b;
b=x;
System.out.println(b);

Yine, derleyici x b aralığı içinde olduğunu anlayabiliyorum.

CEVAP
5 Kasım 2012, PAZARTESİ


Taşınabilirlik için amaçlayan bir parçası olarak, bir derleyici kabul ve reddetmek için kurallar çok özel bir set var. Bu kurallar her iki izni ve değişken kesinlikle kullanım esnasında belli olup olmadığını belirlerken akış analizi yalnızca sınırlı bir form gerektirir.

Java Dil Şartnamesi Chapter 16. Definite Assignment bkz

Kritik kuralı "(e)" diye. S 16.2.7. if Statements, biridir Kesinlikle atandığı için kural genişletir:

Vsonra atanıreğer (e) Lerve sadece eğerVsonra atanırSveVsonra atanıreyanlış zaman.

y alakalıV. Eğer deyimi daha önce atanmamış. Nitekim sonra atanırS, y = {y=-1;} ama hiçbir şey^ x ne zaman tayin yapıyor . 100 yanlış.

Böylece y kesinlikle if cümlesinden sonra atanır.

Daha eksiksiz bir akış analiz durumu^ x o belirleyecek . 100 her zaman doğrudur, ama derleyici İDEA tarafından bu belirli kurallara dayalı program reddetmek için gereklidir.

Son değişken gayet iyi. Kural aslında: -

"Bir hata varsa son bir değişken sürece atanırsa-derleme kesinlikle (§16) atanmamış hemen önce. atama."

Bildirim kesinlikle atanmamış yaprakları ve hatta sınırlı akış analizi x hala kesinlikle atama atanmamış olduğunu belirleyebilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Call Me Howard

    Call Me Howa

    18 AĞUSTOS 2012
  • happyjpy

    happyjpy

    22 AĞUSTOS 2009
  • tinycammonitor

    tinycammonit

    14 Aralık 2010