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);
}
}
5 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;
}