SORU
30 Mayıs 2012, ÇARŞAMBA


Java anahtarları içinde bildirmek ve başlatma değişkenleri

Java anahtarları hakkında çılgın bir sorum var.

int key = 2;

switch (key) {
    case 1:
        int value = 1;
        break;
    case 2:
        value = 2;
        System.out.println(value);
        break;
    default:
        break;
}

Senaryo key 1 - 2 olarak başarıyla değerini yazdırın.
Senaryo 2 - case 2: value = 2 yorum yapacağım diyerek o cıyaklayanYerel değişken değeri başlatılmadı.

Soru :

Eğer yürütme akışı case 1: key = 2 () intdeğişken değer türü biliyor mu?Değilse bile senaryo 1 :

Eğer derleyici int, case 1: 10 *ifade erişmiş olmalı sonra değişken olarak bir değer türünü bilir.senaryo 2 : (Beyan ve Başlatma). Neden case 2: diyerek value = 2 yorum yapacağım sqawrk yok o zamanYerel değişken değeri başlatılmadı.

CEVAP
30 Mayıs 2012, ÇARŞAMBA


Switch ifadeleri kapsam açısından tuhaf bir soru var. section 6.3 of the JLS:

Kapsam yerel bir değişken bildirimi bir blok (madde 14.4) öteki blok bildiri görünür başlayarak, kendi başlatıcı ve dahil olmak üzere başka declarators hakkı yerel değişken bildirimi beyanı.

Senin durumunda aynıblok15 ** case 1 asla yerel değişken kapsam ve için kullanılabilir yürütmek... olsa bile o sonra görünüryazmabunu yapmamızı asla "" bildirimi. yürütülen rağmen (Bir deklarasyon gerçekten "başlatma rağmen".) çalıştırılabilir değil

Eğer açıklama value = 2; atama, derleyici hala bilir hangi değişken atıfta bulunuyorsunuz, ama bu olmayacak geçmiş herhangi bir icra yolu olan atar bir değer, bu yüzden bir hata olarak istediğiniz bir denemeni okumak başka değil-kesinlikle-atanan yerel değişken.

Şiddetle tavsiye ederimdeğilyerel değişkenler diğer durumlarda ilan kullanmak için son derece kafa karıştırıcı kod yol açar, gördüğünüz gibi. Ben yerel değişkenler ifadeler nadiren yapmaya çalışıyorum durumlarda çok kısa, ideal olarak olması gereken) tanıtmak geçiş zaman ben genellikle yeni bir kapsam tanıtmak için tercih:

case 1: {
    int value = 1;
    ...
    break;
}
case 2: {
    int value = 2;
    ...
    break;
}

Bu daha net sanırım.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Joseph Herscher

    Joseph Hersc

    14 Mart 2007
  • MrDevin521

    MrDevin521

    18 Temmuz 2010
  • The White House

    The White Ho

    21 Ocak 2006