Вот пример кода, иллюстрирующий нашу проблему:
A a = null;
try {
a = new A();
a = doSomethingThatWillThrowAnException();
} finally {
System.out.println("A = " + a);
}
Вопрос в том, каково значение 'a', как показано в блоке finally ...
Я не уверен, и я думаю, что наткнулся на то, что не может быть полностью описано. Я заметил на своем ноутбуке (jdk1.6.0.16 на x86), что «a» равно A (). Тем не менее, с JDK 1.4 на Solaris я думаю, что это значение равно нулю (например, если присвоение было выполнено, даже если выброшено исключение). Это, очевидно, связано с ошибкой, и мы будем развертывать версию без назначения, просто чтобы убедиться, но мы хотели бы знать, заметил ли кто-либо из вас это или есть какое-то объяснение, чтобы предложить.
Мы также сделаем пример программы, чтобы продемонстрировать это на проблемном JDK ... и мы опубликуем результаты.