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);
}
}
8 Responses to “Java Puzzle”
By Flasher on Май 7, 2008 | Reply
Why “TRY” ????
By MistX on Май 7, 2008 | Reply
как начинающего Javista, меня конструкция заинтересовала, спасибо!
Просмотрев код, я сначала, подумал, что в консоль должна быть выведена фраза ”FINALLY”, но оказалось по другому… Разобрав по полочкам код, выяснилось, что myName относится к экземпляру класса Foo - result, который возвращается методом return, и только после этого result принимает значение ”FINALLY”, но оно уже нигде не используется.
By Andrey Altukhov on Май 8, 2008 | Reply
Потому, что return result; в try
By OleXaa on Май 14, 2008 | Reply
2Andrey Altukhov
согласен, в реале так никто не пишет, но суть пазла разобраться в тонкостях определения значения результата, ну и, в некоторой степени, зависимости return от try-finally
By OleXaa on Май 14, 2008 | Reply
немного изменим задачу )
что будет результатом роботы этой функции?
try {
return true;
}
finally {
return false;
}
By Игореk on Июнь 3, 2008 | Reply
Прикольно было почитать
Попробуем-с тоже ответить в ближайших темах.
By Филолог on Июнь 25, 2008 | Reply
Конечно, как люди говорят, интересное рядом!
By Елена Чкалова on Июль 20, 2008 | Reply
Премного благодарна за занимательную точку зрения. Я с ней не совсем согласна, но она имеет право на существование.