Вы действительно ответили на свой вопрос.Нет ошибки времени компиляции, потому что блок try не должен сопровождаться перехватом.Это семантически правильно, и часто необходимо просто хотеть блока finally после попытки.
Возможно, исключение выдается из метода, но вы все равно хотите закрыть соединение.
Например:
public void connect() throws IOException {
Socket s = new Socket();
try {
s.getInputStream();
}
finally {
s.close();
}
}