sobota, 4 września 2010

Java i http://

Kiedy usłyszałem pytanie z pewnej rozmowy kwalifikacyjnej stwierdziłem: "to jest totalnie jutro na moim blogu" :)

Pytanie jest proste: czy poniższy kod napisany w Javie się skompiluje?

public class HttpTest {
  public static void main(String[] args) {
    System.out.println("Hi!");
    http://www.java.com
    System.out.println("Hello!");
  }
}


Pogrubiona linijka to ta, której tak naprawdę dotyczy pytanie ;)

Oczywiście //www.java.com to zwykły komentarz - tu nie ma żadnych wątpliwości. A co z http:?

Otóż jest to... etykieta. Etykieta jak w starym dobrym C++. No dobra czyli się skompiluje, ale przecież w Javie nie ma instrukcji goto - to po co etykiety?

Ha! Słowo goto jest na liście słów kluczowych Javy. Co nie zmienia faktu, że instrukcji goto nie można stosować. Czyli poniższy kod nie jest poprawny:

public class HttpTest {
  public static void main(String[] args) {
    System.out.println("Hi!");
    http://www.java.com
    System.out.println("Hello!");
    goto http;
  }
}

Czyżby planowali... poszerzyć Javę o instrukcję goto? ;)

To na koniec jeszcze mała Javowa zagadka - specjalnie dla tych, co gramatykę Javy mają w małym paluszku ;)

System.out.println(100/**//9);

Powyższa linijka spowoduje błąd kompilacji czy nie?

7 komentarzy:

  1. no raczej że się skompiluje :D
    ciekawe przykłady ;)

    OdpowiedzUsuń
  2. Jak dla mnie ostatnia linijka wypisze na ekran "11" albo coś koło tego ;).

    OdpowiedzUsuń
  3. Mała uwaga do treści wpisu: w kodzie źródłowym krytyczna linijka nie jest pogrubiona.

    A jaka jest ostateczna odpowiedź na końcowe pytanie (nie chciało mi się sprawdzać :)?
    Wygląda raczej na to, że się skompiluje. No chyba, że pomiędzy /* i */ musi coś być (przynajmniej spacja).

    OdpowiedzUsuń
  4. U mnie wygląda na pogrubioną, ale to szczegół :)

    Skompiluje się bez problemów, między /**/ nic nie musi być :) Za to:

    System.out.println(100//**/9);

    już nie zadziała :)

    OdpowiedzUsuń
  5. Dobre, zagięło mnie :)
    Jakoś znak komentarza // mi umknął w treści urla i poległbym na tym pytaniu.

    Co do słowa kluczowego goto w javie, występuje ono tylko ze względów historycznych. Co do etykiet, to przydają się one w instrukcjach break i continue. Co do kodu źródłowego - u mnie też nic nie jest pogrubione :). Co do Twojego stwierdzenia: "U mnie wygląda na pogrubioną", przypomniał mi się joke:

    Przychodzi informatyk do lekarza:
    - Panie doktorze, chyba coś jest nie tak z moją wątrobą.
    - Dziwne, u mnie działa.

    OdpowiedzUsuń
  6. :) Sprawdziłem, w Google Chrome faktycznie nie jest pogrubione, w przeciwieństwie do Firefoksa i Opery :) Ciekawe, bo tag <b> otacza tą linijkę ;)

    OdpowiedzUsuń
  7. Kiedyś ten sam problem z http://www.java.com widziałem na jakiś targach pracy na PWr, na stoisku bodajże NSN. Pamiętam wtedy, że poległem na tym pytaniu, ale dzięki temu gdy zobaczyłem tytuł posta, od razu wiedziałem o czym będzie :)

    OdpowiedzUsuń