Java Puzzle

Май 7th, 2008 | by OleXaa |
public class Main {

  class Foo {

    public String myName;

    public Foo(String name) {

      myName = name;

    }

  }  public Foo test() {

    Foo result = new Foo(”Starting”);

      try {

        System.out.println(”Try Block”);

        result = new Foo(”TRY”);

        return result;

      } finally {

        System.out.println(”In finally block”);

        result = new Foo(”FINALLY”);

      }

  }

public static void main(String[] args) {

    System.out.println((new Main().test()).myName);

  }

}
  1. 5 Responses to “Java Puzzle”

  2. By Flasher on Май 7, 2008 | Reply

    Why “TRY” ????

  3. By MistX on Май 7, 2008 | Reply

    как начинающего Javista, меня конструкция заинтересовала, спасибо!
    Просмотрев код, я сначала, подумал, что в консоль должна быть выведена фраза ”FINALLY”, но оказалось по другому… Разобрав по полочкам код, выяснилось, что myName относится к экземпляру класса Foo - result, который возвращается методом return, и только после этого result принимает значение ”FINALLY”, но оно уже нигде не используется.

  4. By Andrey Altukhov on Май 8, 2008 | Reply

    Потому, что return result; в try

  5. By OleXaa on Май 14, 2008 | Reply

    2Andrey Altukhov
    согласен, в реале так никто не пишет, но суть пазла разобраться в тонкостях определения значения результата, ну и, в некоторой степени, зависимости return от try-finally

  6. By OleXaa on Май 14, 2008 | Reply

    немного изменим задачу )
    что будет результатом роботы этой функции?

    try {
    return true;
    }
    finally {
    return false;
    }

You must be logged in to post a comment.