Собеседование. Exceptions

Был на собеседовании. Вот решил разобрать вопросы на которые не смог ответить.

Что будет происходить в этом участке кода?

...
try{
return null;
}
finally{
return "one";
}

Я считаю будет возвращена строка «one». Т.к. блок  finally выполняется перед return в блоке try.

Каким образом можно пропустить выполнение блока finally?

Тут я ответил что возможность есть ,но как именно, не помню. Вот чтобы в следующий раз помнить. Есть 2 варианта, либо прервать выполнение программы System.exit(0), либо еще этот блок не выполнится если закончит свою работу демонизированная нить:

public class Test {

static class tryMe implements Runnable {
public void run() {
try {
System.out.println("Inside thread");
Thread.sleep(4000);
return;
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("Thread is dead baby.");
}
}
}

public static void main(String[] args) {
Thread thread = new Thread(new tryMe());
System.out.println("start");
thread.setDaemon(true);
thread.start();
System.out.println("end");
}
}
Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s