Я видел пару таких хитрых фрагментов кода, пока готовился к сертификации по Java.
Возвращаемое значение в конце здесь: 10, но, наконец, вызывается и изменяет returnval на 20.
Может кто-нибудь объяснить, почему это так? это потому, что catch имеет другую область действия returnval ? или я что-то пропустил здесь.
class MultipleReturn {
int getInt() {
int returnVal = 10;
try {
String[] students = {"Harry", "Paul"};
System.out.println(students[5]);
}
catch (Exception e) {
System.out.println("About to return :" + returnVal);
return returnVal;
}
finally {
returnVal += 10;
System.out.println("Return value is now :" + returnVal);
}
return returnVal;
}
public static void main(String args[]) {
MultipleReturn var = new MultipleReturn();
System.out.println("In Main:" + var.getInt());
}
}
Еще один следующий фрагмент кода:
class MultipleReturn {
StringBuilder getStringBuilder() {
StringBuilder returnVal = new StringBuilder("10");
try {
String[] students = {"Harry", "Paul"};
System.out.println(students[5]);
}
catch (Exception e) {
System.out.println("About to return :" + returnVal);
return returnVal;
}
finally {
returnVal.append("10");
System.out.println("Return value is now :" + returnVal);
}
return returnVal;
}
public static void main(String args[]) {
MultipleReturn var = new MultipleReturn();
System.out.println("In Main:" + var.getStringBuilder());
}
}
здесь вывод равен 1010, что имеет смысл, поскольку finally изменяет значение returnval, и оно сохраняется.
Любое объяснение будет полезно.
я понимаю, что это плохо написанный код, и никто в здравом уме не должен писать ничего подобного.